forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			220 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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();
 | |
|     }
 | |
| }
 |