8000 Deprecation based on the value must be triggered only if they are pro… · symfony/symfony@06ca456 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 06ca456

Browse files
committed
Deprecation based on the value must be triggered only if they are provided by the user
1 parent 4827c24 commit 06ca456

File tree

2 files changed

+72
-23
lines changed

2 files changed

+72
-23
lines changed

src/Symfony/Component/OptionsResolver/OptionsResolver.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ public function offsetGet($option)
798798

799799
// Shortcut for resolved options
800800
if (array_key_exists($option, $this->resolved)) {
801-
if (isset($this->deprecated[$option])) {
801+
if (isset($this->deprecated[$option]) && \is_string($this->deprecated[$option])) {
802802
@trigger_error(strtr($this->deprecated[$option], array('%name%' => $option)), E_USER_DEPRECATED);
803803
}
804804

@@ -953,9 +953,6 @@ public function offsetGet($option)
953953
if ('' !== $deprecationMessage) {
954954
@trigger_error(strtr($deprecationMessage, array('%name%' => $option)), E_USER_DEPRECATED);
955955
}
956-
957-
// Store result for next calls
958-
$this->deprecated[$option] = $deprecationMessage ?: null;
959956
}
960957

961958
// Normalize the validated option

src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -597,18 +597,6 @@ function (OptionsResolver $resolver) {
597597
2,
598598
);
599599

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-
612600
yield 'It deprecates an option evaluated in another definition' => array(
613601
function (OptionsResolver $resolver) {
614602
// defined by superclass
@@ -618,7 +606,7 @@ function (OptionsResolver $resolver) {
618606
;
619607
// defined by subclass
620608
$resolver->setDefault('bar', function (Options $options) {
621-
return $options['foo'];
609+
return $options['foo']; // It a trigger deprecation
622610
});
623611
},
624612
array(),
@@ -651,16 +639,40 @@ function (OptionsResolver $resolver) {
651639
1,
652640
);
653641

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(
655643
function (OptionsResolver $resolver) {
656644
$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+
})
659668
;
660669
},
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,
664676
);
665677

666678
yield 'It ignores deprecation if closure returns an empty string' => array(
@@ -698,6 +710,46 @@ function (OptionsResolver $resolver) {
698710
),
699711
1,
700712
);
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+
;
7 E122 31+
},
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+
);
701753
}
702754

703755
/**

0 commit comments

Comments
 (0)
0