@@ -597,18 +597,6 @@ function (OptionsResolver $resolver) {
597
597
2 ,
598
598
);
599
599
600
- yield 'It does not deprecates a missing option with default value ' => array (
601
- function (OptionsResolver $ resolver ) {
602
- $ resolver
603
- ->setDefault ('foo ' , null )
604
- ->setDeprecated ('foo ' )
605
- ;
606
- },
607
- array (),
608
- null ,
609
- 0 ,
610
- );
611
-
612
600
yield 'It deprecates an option evaluated in another definition ' => array (
613
601
function (OptionsResolver $ resolver ) {
614
602
// defined by superclass
@@ -618,7 +606,7 @@ function (OptionsResolver $resolver) {
618
606
;
619
607
// defined by subclass
620
608
$ resolver ->setDefault ('bar ' , function (Options $ options ) {
621
- return $ options ['foo ' ];
609
+ return $ options ['foo ' ]; // It a trigger deprecation
622
610
});
623
611
},
624
612
array (),
@@ -651,16 +639,40 @@ function (OptionsResolver $resolver) {
651
639
1 ,
652
640
);
653
641
654
- yield 'It ignores deprecation for missing option without default value ' => array (
642
+ yield 'It deprecates options based on the value only if they are provided by the user ' => array (
655
643
function (OptionsResolver $ resolver ) {
656
644
$ resolver
657
- ->setDefined (array ('foo ' , 'bar ' ))
658
- ->setDeprecated ('foo ' )
645
+ ->setDefined ('foo ' )
646
+ ->setAllowedTypes ('foo ' , array ('null ' , 'bool ' ))
647
+ ->setDeprecated ('foo ' , function (Options $ options , $ value ) {
648
+ if (!\is_bool ($ value )) {
649
+ return 'Passing a value different than true or false is deprecated. ' ;
650
+ }
651
+
652
+ return '' ;
653
+ })
654
+ ->setDefault ('baz ' , null )
655
+ ->setAllowedTypes ('baz ' , array ('null ' , 'int ' ))
656
+ ->setDeprecated ('baz ' , function (Options $ options , $ value ) {
657
+ if (!\is_int ($ value )) {
658
+ return 'Not passing a integer is deprecated. ' ;
659
+ }
660
+
661
+ return '' ;
662
+ })
663
+ ->setDefault ('bar ' , function (Options $ options ) {
664
+ $ options ['baz ' ]; // It does not trigger a deprecation
665
+
666
+ return $ options ['foo ' ]; // It does not trigger a deprecation
667
+ })
659
668
;
660
669
},
661
- array ('bar ' => 'baz ' ),
662
- null ,
663
- 0 ,
670
+ array ('foo ' => null ), // It trigger a deprecation
671
+ array (
672
+ 'type ' => E_USER_DEPRECATED ,
673
+ 'message ' => 'Passing a value different than true or false is deprecated. ' ,
674
+ ),
675
+ 1 ,
664
676
);
665
677
666
678
yield 'It ignores deprecation if closure returns an empty string ' => array (
@@ -698,6 +710,46 @@ function (OptionsResolver $resolver) {
698
710
),
699
711
1 ,
700
712
);
713
+
714
+ yield 'It trigger deprecation for each evaluation ' => array (
715
+ function (OptionsResolver $ resolver ) {
716
+ $ resolver
717
+ // defined by superclass
718
+ ->setDefined ('foo ' )
719
+ ->setDeprecated ('foo ' )
720
+ // defined by subclass
721
+ ->setDefault ('bar ' , function (Options $ options ) {
722
+ return $ options ['foo ' ]; // It trigger a deprecation
723
+ })
724
+ ->setNormalizer ('bar ' , function (Options $ options , $ value ) {
725
+ $ options ['foo ' ]; // It trigger a deprecation
726
+ $ options ['foo ' ]; // It trigger a deprecation
727
+
728
+ return $ value ;
729
+ })
730
+ ;
731
+ },
732
+ array ('foo ' => 'baz ' ), // It trigger a deprecation
733
+ array (
734
+ 'type ' => E_USER_DEPRECATED ,
735
+ 'message ' => 'The option "foo" is deprecated. ' ,
736
+ ),
737
+ 4 ,
738
+ );
739
+
740
+ yield 'It ignores deprecation if no option provided by the user ' => array (
741
+ function (OptionsResolver $ resolver ) {
742
+ $ resolver
743
+ ->setDefined ('foo ' )
744
+ ->setDefault ('bar ' , null )
745
+ ->setDeprecated ('foo ' )
746
+ ->setDeprecated ('bar ' )
747
+ ;
748
+ },
749
+ array (),
750
+ null ,
751
+ 0 ,
752
+ );
701
753
}
702
754
703
755
/**
0 commit comments