From e2a50ef4bc05c0c719d00d1cbbf680a3e8c1bb4a Mon Sep 17 00:00:00 2001 From: Tobias Schultze Date: Mon, 30 Jul 2012 23:35:43 +0200 Subject: [PATCH] [OptionsResolver] fix normalizer without corresponding option --- src/Symfony/Component/OptionsResolver/Options.php | 2 +- .../Component/OptionsResolver/Tests/OptionsTest.php | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/OptionsResolver/Options.php b/src/Symfony/Component/OptionsResolver/Options.php index 5a2b0f7f38..3c1129c921 100644 --- a/src/Symfony/Component/OptionsResolver/Options.php +++ b/src/Symfony/Component/OptionsResolver/Options.php @@ -504,7 +504,7 @@ class Options implements \ArrayAccess, \Iterator, \Countable $normalizer = $this->normalizers[$option]; $this->lock[$option] = true; - $this->options[$option] = $normalizer($this, $this->options[$option]); + $this->options[$option] = $normalizer($this, array_key_exists($option, $this->options) ? $this->options[$option] : null); unset($this->lock[$option]); // The option is now normalized diff --git a/src/Symfony/Component/OptionsResolver/Tests/OptionsTest.php b/src/Symfony/Component/OptionsResolver/Tests/OptionsTest.php index 66f9e399a4..f739c911a1 100644 --- a/src/Symfony/Component/OptionsResolver/Tests/OptionsTest.php +++ b/src/Symfony/Component/OptionsResolver/Tests/OptionsTest.php @@ -514,4 +514,15 @@ class OptionsTest extends \PHPUnit_Framework_TestCase $this->options->clear(); $this->assertEmpty($this->options->all()); } + + public function testNormalizerWithoutCorrespondingOption() + { + $test = $this; + + $this->options->setNormalizer('foo', function (Options $options, $previousValue) use ($test) { + $test->assertNull($previousValue); + return ''; + }); + $this->assertEquals(array('foo' => ''), $this->options->all()); + } }