From 4f5b44bd3bd490309eb2ba7b44df4769816ba729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Sat, 3 Aug 2013 19:26:54 +0200 Subject: twig implementation --- .../OptionsResolver/Tests/OptionsTest.php | 529 +++++++++++++++++++++ 1 file changed, 529 insertions(+) create mode 100644 vendor/symfony/options-resolver/Symfony/Component/OptionsResolver/Tests/OptionsTest.php (limited to 'vendor/symfony/options-resolver/Symfony/Component/OptionsResolver/Tests/OptionsTest.php') diff --git a/vendor/symfony/options-resolver/Symfony/Component/OptionsResolver/Tests/OptionsTest.php b/vendor/symfony/options-resolver/Symfony/Component/OptionsResolver/Tests/OptionsTest.php new file mode 100644 index 00000000..e24a7647 --- /dev/null +++ b/vendor/symfony/options-resolver/Symfony/Component/OptionsResolver/Tests/OptionsTest.php @@ -0,0 +1,529 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Tests; + +use Symfony\Component\OptionsResolver\Options; + +class OptionsTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var Options + */ + private $options; + + protected function setUp() + { + $this->options = new Options(); + } + + public function testArrayAccess() + { + $this->assertFalse(isset($this->options['foo'])); + $this->assertFalse(isset($this->options['bar'])); + + $this->options['foo'] = 0; + $this->options['bar'] = 1; + + $this->assertTrue(isset($this->options['foo'])); + $this->assertTrue(isset($this->options['bar'])); + + unset($this->options['bar']); + + $this->assertTrue(isset($this->options['foo'])); + $this->assertFalse(isset($this->options['bar'])); + $this->assertEquals(0, $this->options['foo']); + } + + public function testCountable() + { + $this->options->set('foo', 0); + $this->options->set('bar', 1); + + $this->assertCount(2, $this->options); + } + + /** + * @expectedException \OutOfBoundsException + */ + public function testGetNonExisting() + { + $this->options->get('foo'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testSetNotSupportedAfterGet() + { + $this->options->set('foo', 'bar'); + $this->options->get('foo'); + $this->options->set('foo', 'baz'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testRemoveNotSupportedAfterGet() + { + $this->options->set('foo', 'bar'); + $this->options->get('foo'); + $this->options->remove('foo'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testSetNormalizerNotSupportedAfterGet() + { + $this->options->set('foo', 'bar'); + $this->options->get('foo'); + $this->options->setNormalizer('foo', function () {}); + } + + public function testSetLazyOption() + { + $test = $this; + + $this->options->set('foo', function (Options $options) use ($test) { + return 'dynamic'; + }); + + $this->assertEquals('dynamic', $this->options->get('foo')); + } + + public function testSetDiscardsPreviousValue() + { + $test = $this; + + // defined by superclass + $this->options->set('foo', 'bar'); + + // defined by subclass + $this->options->set('foo', function (Options $options, $previousValue) use ($test) { + /* @var \PHPUnit_Framework_TestCase $test */ + $test->assertNull($previousValue); + + return 'dynamic'; + }); + + $this->assertEquals('dynamic', $this->options->get('foo')); + } + + public function testOverloadKeepsPreviousValue() + { + $test = $this; + + // defined by superclass + $this->options->set('foo', 'bar'); + + // defined by subclass + $this->options->overload('foo', function (Options $options, $previousValue) use ($test) { + /* @var \PHPUnit_Framework_TestCase $test */ + $test->assertEquals('bar', $previousValue); + + return 'dynamic'; + }); + + $this->assertEquals('dynamic', $this->options->get('foo')); + } + + public function testPreviousValueIsEvaluatedIfLazy() + { + $test = $this; + + // defined by superclass + $this->options->set('foo', function (Options $options) { + return 'bar'; + }); + + // defined by subclass + $this->options->overload('foo', function (Options $options, $previousValue) use ($test) { + /* @var \PHPUnit_Framework_TestCase $test */ + $test->assertEquals('bar', $previousValue); + + return 'dynamic'; + }); + + $this->assertEquals('dynamic', $this->options->get('foo')); + } + + public function testPreviousValueIsNotEvaluatedIfNoSecondArgument() + { + $test = $this; + + // defined by superclass + $this->options->set('foo', function (Options $options) use ($test) { + $test->fail('Should not be called'); + }); + + // defined by subclass, no $previousValue argument defined! + $this->options->overload('foo', function (Options $options) use ($test) { + return 'dynamic'; + }); + + $this->assertEquals('dynamic', $this->options->get('foo')); + } + + public function testLazyOptionCanAccessOtherOptions() + { + $test = $this; + + $this->options->set('foo', 'bar'); + + $this->options->set('bam', function (Options $options) use ($test) { + /* @var \PHPUnit_Framework_TestCase $test */ + $test->assertEquals('bar', $options->get('foo')); + + return 'dynamic'; + }); + + $this->assertEquals('bar', $this->options->get('foo')); + $this->assertEquals('dynamic', $this->options->get('bam')); + } + + public function testLazyOptionCanAccessOtherLazyOptions() + { + $test = $this; + + $this->options->set('foo', function (Options $options) { + return 'bar'; + }); + + $this->options->set('bam', function (Options $options) use ($test) { + /* @var \PHPUnit_Framework_TestCase $test */ + $test->assertEquals('bar', $options->get('foo')); + + return 'dynamic'; + }); + + $this->assertEquals('bar', $this->options->get('foo')); + $this->assertEquals('dynamic', $this->options->get('bam')); + } + + public function testNormalizer() + { + $this->options->set('foo', 'bar'); + + $this->options->setNormalizer('foo', function () { + return 'normalized'; + }); + + $this->assertEquals('normalized', $this->options->get('foo')); + } + + public function testNormalizerReceivesUnnormalizedValue() + { + $this->options->set('foo', 'bar'); + + $this->options->setNormalizer('foo', function (Options $options, $value) { + return 'normalized['.$value.']'; + }); + + $this->assertEquals('normalized[bar]', $this->options->get('foo')); + } + + public function testNormalizerCanAccessOtherOptions() + { + $test = $this; + + $this->options->set('foo', 'bar'); + $this->options->set('bam', 'baz'); + + $this->options->setNormalizer('bam', function (Options $options) use ($test) { + /* @var \PHPUnit_Framework_TestCase $test */ + $test->assertEquals('bar', $options->get('foo')); + + return 'normalized'; + }); + + $this->assertEquals('bar', $this->options->get('foo')); + $this->assertEquals('normalized', $this->options->get('bam')); + } + + public function testNormalizerCanAccessOtherLazyOptions() + { + $test = $this; + + $this->options->set('foo', function (Options $options) { + return 'bar'; + }); + $this->options->set('bam', 'baz'); + + $this->options->setNormalizer('bam', function (Options $options) use ($test) { + /* @var \PHPUnit_Framework_TestCase $test */ + $test->assertEquals('bar', $options->get('foo')); + + return 'normalized'; + }); + + $this->assertEquals('bar', $this->options->get('foo')); + $this->assertEquals('normalized', $this->options->get('bam')); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testFailForCyclicDependencies() + { + $this->options->set('foo', function (Options $options) { + $options->get('bam'); + }); + + $this->options->set('bam', function (Options $options) { + $options->get('foo'); + }); + + $this->options->get('foo'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testFailForCyclicDependenciesBetweenNormalizers() + { + $this->options->set('foo', 'bar'); + $this->options->set('bam', 'baz'); + + $this->options->setNormalizer('foo', function (Options $options) { + $options->get('bam'); + }); + + $this->options->setNormalizer('bam', function (Options $options) { + $options->get('foo'); + }); + + $this->options->get('foo'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testFailForCyclicDependenciesBetweenNormalizerAndLazyOption() + { + $this->options->set('foo', function (Options $options) { + $options->get('bam'); + }); + $this->options->set('bam', 'baz'); + + $this->options->setNormalizer('bam', function (Options $options) { + $options->get('foo'); + }); + + $this->options->get('foo'); + } + + public function testAllInvokesEachLazyOptionOnlyOnce() + { + $test = $this; + $i = 1; + + $this->options->set('foo', function (Options $options) use ($test, &$i) { + $test->assertSame(1, $i); + ++$i; + + // Implicitly invoke lazy option for "bam" + $options->get('bam'); + }); + $this->options->set('bam', function (Options $options) use ($test, &$i) { + $test->assertSame(2, $i); + ++$i; + }); + + $this->options->all(); + } + + public function testAllInvokesEachNormalizerOnlyOnce() + { + $test = $this; + $i = 1; + + $this->options->set('foo', 'bar'); + $this->options->set('bam', 'baz'); + + $this->options->setNormalizer('foo', function (Options $options) use ($test, &$i) { + $test->assertSame(1, $i); + ++$i; + + // Implicitly invoke normalizer for "bam" + $options->get('bam'); + }); + $this->options->setNormalizer('bam', function (Options $options) use ($test, &$i) { + $test->assertSame(2, $i); + ++$i; + }); + + $this->options->all(); + } + + public function testReplaceClearsAndSets() + { + $this->options->set('one', '1'); + + $this->options->replace(array( + 'two' => '2', + 'three' => function (Options $options) { + return '2' === $options['two'] ? '3' : 'foo'; + } + )); + + $this->assertEquals(array( + 'two' => '2', + 'three' => '3', + ), $this->options->all()); + } + + public function testClearRemovesAllOptions() + { + $this->options->set('one', 1); + $this->options->set('two', 2); + + $this->options->clear(); + + $this->assertEmpty($this->options->all()); + + } + + /** + * @covers Symfony\Component\OptionsResolver\Options::replace + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testCannotReplaceAfterOptionWasRead() + { + $this->options->set('one', 1); + $this->options->all(); + + $this->options->replace(array( + 'two' => '2', + )); + } + + /** + * @covers Symfony\Component\OptionsResolver\Options::overload + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testCannotOverloadAfterOptionWasRead() + { + $this->options->set('one', 1); + $this->options->all(); + + $this->options->overload('one', 2); + } + + /** + * @covers Symfony\Component\OptionsResolver\Options::clear + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testCannotClearAfterOptionWasRead() + { + $this->options->set('one', 1); + $this->options->all(); + + $this->options->clear(); + } + + public function testOverloadCannotBeEvaluatedLazilyWithoutExpectedClosureParams() + { + $this->options->set('foo', 'bar'); + + $this->options->overload('foo', function () { + return 'test'; + }); + + $this->assertNotEquals('test', $this->options->get('foo')); + $this->assertTrue(is_callable($this->options->get('foo'))); + } + + public function testOverloadCannotBeEvaluatedLazilyWithoutFirstParamTypeHint() + { + $this->options->set('foo', 'bar'); + + $this->options->overload('foo', function ($object) { + return 'test'; + }); + + $this->assertNotEquals('test', $this->options->get('foo')); + $this->assertTrue(is_callable($this->options->get('foo'))); + } + + public function testOptionsIteration() + { + $this->options->set('foo', 'bar'); + $this->options->set('foo1', 'bar1'); + $expectedResult = array('foo' => 'bar', 'foo1' => 'bar1'); + + $this->assertEquals($expectedResult, iterator_to_array($this->options, true)); + } + + public function testHasWithNullValue() + { + $this->options->set('foo', null); + + $this->assertTrue($this->options->has('foo')); + } + + public function testRemoveOptionAndNormalizer() + { + $this->options->set('foo1', 'bar'); + $this->options->setNormalizer('foo1', function (Options $options) { + return ''; + }); + $this->options->set('foo2', 'bar'); + $this->options->setNormalizer('foo2', function (Options $options) { + return ''; + }); + + $this->options->remove('foo2'); + $this->assertEquals(array('foo1' => ''), $this->options->all()); + } + + public function testReplaceOptionAndNormalizer() + { + $this->options->set('foo1', 'bar'); + $this->options->setNormalizer('foo1', function (Options $options) { + return ''; + }); + $this->options->set('foo2', 'bar'); + $this->options->setNormalizer('foo2', function (Options $options) { + return ''; + }); + + $this->options->replace(array('foo1' => 'new')); + $this->assertEquals(array('foo1' => 'new'), $this->options->all()); + } + + public function testClearOptionAndNormalizer() + { + $this->options->set('foo1', 'bar'); + $this->options->setNormalizer('foo1', function (Options $options) { + return ''; + }); + $this->options->set('foo2', 'bar'); + $this->options->setNormalizer('foo2', function (Options $options) { + return ''; + }); + + $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()); + } +} -- cgit v1.2.3