Yaffs site version 1.1
[yaffs-website] / vendor / symfony / config / Tests / Definition / ArrayNodeTest.php
diff --git a/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php b/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
new file mode 100644 (file)
index 0000000..0b5565e
--- /dev/null
@@ -0,0 +1,219 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Config\Tests\Definition;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Config\Definition\ArrayNode;
+use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
+use Symfony\Component\Config\Definition\ScalarNode;
+
+class ArrayNodeTest extends TestCase
+{
+    /**
+     * @expectedException \Symfony\Component\Config\Definition\Exception\InvalidTypeException
+     */
+    public function testNormalizeThrowsExceptionWhenFalseIsNotAllowed()
+    {
+        $node = new ArrayNode('root');
+        $node->normalize(false);
+    }
+
+    /**
+     * @expectedException        \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
+     * @expectedExceptionMessage Unrecognized option "foo" under "root"
+     */
+    public function testExceptionThrownOnUnrecognizedChild()
+    {
+        $node = new ArrayNode('root');
+        $node->normalize(array('foo' => 'bar'));
+    }
+
+    public function ignoreAndRemoveMatrixProvider()
+    {
+        $unrecognizedOptionException = new InvalidConfigurationException('Unrecognized option "foo" under "root"');
+
+        return array(
+            array(true, true, array(), 'no exception is thrown for an unrecognized child if the ignoreExtraKeys option is set to true'),
+            array(true, false, array('foo' => 'bar'), 'extra keys are not removed when ignoreExtraKeys second option is set to false'),
+            array(false, true, $unrecognizedOptionException),
+            array(false, false, $unrecognizedOptionException),
+        );
+    }
+
+    /**
+     * @dataProvider ignoreAndRemoveMatrixProvider
+     */
+    public function testIgnoreAndRemoveBehaviors($ignore, $remove, $expected, $message = '')
+    {
+        if ($expected instanceof \Exception) {
+            if (method_exists($this, 'expectException')) {
+                $this->expectException(get_class($expected));
+                $this->expectExceptionMessage($expected->getMessage());
+            } else {
+                $this->setExpectedException(get_class($expected), $expected->getMessage());
+            }
+        }
+        $node = new ArrayNode('root');
+        $node->setIgnoreExtraKeys($ignore, $remove);
+        $result = $node->normalize(array('foo' => 'bar'));
+        $this->assertSame($expected, $result, $message);
+    }
+
+    /**
+     * @dataProvider getPreNormalizationTests
+     */
+    public function testPreNormalize($denormalized, $normalized)
+    {
+        $node = new ArrayNode('foo');
+
+        $r = new \ReflectionMethod($node, 'preNormalize');
+        $r->setAccessible(true);
+
+        $this->assertSame($normalized, $r->invoke($node, $denormalized));
+    }
+
+    public function getPreNormalizationTests()
+    {
+        return array(
+            array(
+                array('foo-bar' => 'foo'),
+                array('foo_bar' => 'foo'),
+            ),
+            array(
+                array('foo-bar_moo' => 'foo'),
+                array('foo-bar_moo' => 'foo'),
+            ),
+            array(
+                array('anything-with-dash-and-no-underscore' => 'first', 'no_dash' => 'second'),
+                array('anything_with_dash_and_no_underscore' => 'first', 'no_dash' => 'second'),
+            ),
+            array(
+                array('foo-bar' => null, 'foo_bar' => 'foo'),
+                array('foo-bar' => null, 'foo_bar' => 'foo'),
+            ),
+        );
+    }
+
+    /**
+     * @dataProvider getZeroNamedNodeExamplesData
+     */
+    public function testNodeNameCanBeZero($denormalized, $normalized)
+    {
+        $zeroNode = new ArrayNode(0);
+        $zeroNode->addChild(new ScalarNode('name'));
+        $fiveNode = new ArrayNode(5);
+        $fiveNode->addChild(new ScalarNode(0));
+        $fiveNode->addChild(new ScalarNode('new_key'));
+        $rootNode = new ArrayNode('root');
+        $rootNode->addChild($zeroNode);
+        $rootNode->addChild($fiveNode);
+        $rootNode->addChild(new ScalarNode('string_key'));
+        $r = new \ReflectionMethod($rootNode, 'normalizeValue');
+        $r->setAccessible(true);
+
+        $this->assertSame($normalized, $r->invoke($rootNode, $denormalized));
+    }
+
+    public function getZeroNamedNodeExamplesData()
+    {
+        return array(
+            array(
+                array(
+                    0 => array(
+                        'name' => 'something',
+                    ),
+                    5 => array(
+                        0 => 'this won\'t work too',
+                        'new_key' => 'some other value',
+                    ),
+                    'string_key' => 'just value',
+                ),
+                array(
+                    0 => array(
+                        'name' => 'something',
+                    ),
+                    5 => array(
+                        0 => 'this won\'t work too',
+                        'new_key' => 'some other value',
+                    ),
+                    'string_key' => 'just value',
+                ),
+            ),
+        );
+    }
+
+    /**
+     * @dataProvider getPreNormalizedNormalizedOrderedData
+     */
+    public function testChildrenOrderIsMaintainedOnNormalizeValue($prenormalized, $normalized)
+    {
+        $scalar1 = new ScalarNode('1');
+        $scalar2 = new ScalarNode('2');
+        $scalar3 = new ScalarNode('3');
+        $node = new ArrayNode('foo');
+        $node->addChild($scalar1);
+        $node->addChild($scalar3);
+        $node->addChild($scalar2);
+
+        $r = new \ReflectionMethod($node, 'normalizeValue');
+        $r->setAccessible(true);
+
+        $this->assertSame($normalized, $r->invoke($node, $prenormalized));
+    }
+
+    public function getPreNormalizedNormalizedOrderedData()
+    {
+        return array(
+            array(
+                array('2' => 'two', '1' => 'one', '3' => 'three'),
+                array('2' => 'two', '1' => 'one', '3' => 'three'),
+            ),
+        );
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Child nodes must be named.
+     */
+    public function testAddChildEmptyName()
+    {
+        $node = new ArrayNode('root');
+
+        $childNode = new ArrayNode('');
+        $node->addChild($childNode);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage A child node named "foo" already exists.
+     */
+    public function testAddChildNameAlreadyExists()
+    {
+        $node = new ArrayNode('root');
+
+        $childNode = new ArrayNode('foo');
+        $node->addChild($childNode);
+
+        $childNodeWithSameName = new ArrayNode('foo');
+        $node->addChild($childNodeWithSameName);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage The node at path "foo" has no default value.
+     */
+    public function testGetDefaultValueWithoutDefaultValue()
+    {
+        $node = new ArrayNode('foo');
+        $node->getDefaultValue();
+    }
+}