123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- <?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\Builder;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\Config\Definition\Builder\TreeBuilder;
- use Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder as CustomNodeBuilder;
- class TreeBuilderTest extends TestCase
- {
- public function testUsingACustomNodeBuilder()
- {
- $builder = new TreeBuilder('custom', 'array', new CustomNodeBuilder());
- $nodeBuilder = $builder->getRootNode()->children();
- $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
- $nodeBuilder = $nodeBuilder->arrayNode('deeper')->children();
- $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
- }
- public function testOverrideABuiltInNodeType()
- {
- $builder = new TreeBuilder('override', 'array', new CustomNodeBuilder());
- $definition = $builder->getRootNode()->children()->variableNode('variable');
- $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\VariableNodeDefinition', $definition);
- }
- public function testAddANodeType()
- {
- $builder = new TreeBuilder('override', 'array', new CustomNodeBuilder());
- $definition = $builder->getRootNode()->children()->barNode('variable');
- $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\BarNodeDefinition', $definition);
- }
- public function testCreateABuiltInNodeTypeWithACustomNodeBuilder()
- {
- $builder = new TreeBuilder('builtin', 'array', new CustomNodeBuilder());
- $definition = $builder->getRootNode()->children()->booleanNode('boolean');
- $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition', $definition);
- }
- public function testPrototypedArrayNodeUseTheCustomNodeBuilder()
- {
- $builder = new TreeBuilder('override', 'array', new CustomNodeBuilder());
- $root = $builder->getRootNode();
- $root->prototype('bar')->end();
- $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\BarNode', $root->getNode(true)->getPrototype());
- }
- public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
- {
- $builder = new TreeBuilder('propagation');
- $builder->getRootNode()
- ->children()
- ->setNodeClass('extended', 'Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition')
- ->node('foo', 'extended')->end()
- ->arrayNode('child')
- ->children()
- ->node('foo', 'extended')
- ->end()
- ->end()
- ->end()
- ->end();
- $node = $builder->buildTree();
- $children = $node->getChildren();
- $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $children['foo']);
- $childChildren = $children['child']->getChildren();
- $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $childChildren['foo']);
- }
- public function testDefinitionInfoGetsTransferredToNode()
- {
- $builder = new TreeBuilder('test');
- $builder->getRootNode()->info('root info')
- ->children()
- ->node('child', 'variable')->info('child info')->defaultValue('default')
- ->end()
- ->end();
- $tree = $builder->buildTree();
- $children = $tree->getChildren();
- $this->assertEquals('root info', $tree->getInfo());
- $this->assertEquals('child info', $children['child']->getInfo());
- }
- public function testDefinitionExampleGetsTransferredToNode()
- {
- $builder = new TreeBuilder('test');
- $builder->getRootNode()
- ->example(['key' => 'value'])
- ->children()
- ->node('child', 'variable')->info('child info')->defaultValue('default')->example('example')
- ->end()
- ->end();
- $tree = $builder->buildTree();
- $children = $tree->getChildren();
- $this->assertInternalType('array', $tree->getExample());
- $this->assertEquals('example', $children['child']->getExample());
- }
- public function testDefaultPathSeparatorIsDot()
- {
- $builder = new TreeBuilder('propagation');
- $builder->getRootNode()
- ->children()
- ->node('foo', 'variable')->end()
- ->arrayNode('child')
- ->children()
- ->node('foo', 'variable')
- ->end()
- ->end()
- ->end()
- ->end();
- $node = $builder->buildTree();
- $children = $node->getChildren();
- $this->assertArrayHasKey('foo', $children);
- $this->assertInstanceOf('Symfony\Component\Config\Definition\BaseNode', $children['foo']);
- $this->assertSame('propagation.foo', $children['foo']->getPath());
- $this->assertArrayHasKey('child', $children);
- $childChildren = $children['child']->getChildren();
- $this->assertArrayHasKey('foo', $childChildren);
- $this->assertInstanceOf('Symfony\Component\Config\Definition\BaseNode', $childChildren['foo']);
- $this->assertSame('propagation.child.foo', $childChildren['foo']->getPath());
- }
- public function testPathSeparatorIsPropagatedToChildren()
- {
- $builder = new TreeBuilder('propagation');
- $builder->getRootNode()
- ->children()
- ->node('foo', 'variable')->end()
- ->arrayNode('child')
- ->children()
- ->node('foo', 'variable')
- ->end()
- ->end()
- ->end()
- ->end();
- $builder->setPathSeparator('/');
- $node = $builder->buildTree();
- $children = $node->getChildren();
- $this->assertArrayHasKey('foo', $children);
- $this->assertInstanceOf('Symfony\Component\Config\Definition\BaseNode', $children['foo']);
- $this->assertSame('propagation/foo', $children['foo']->getPath());
- $this->assertArrayHasKey('child', $children);
- $childChildren = $children['child']->getChildren();
- $this->assertArrayHasKey('foo', $childChildren);
- $this->assertInstanceOf('Symfony\Component\Config\Definition\BaseNode', $childChildren['foo']);
- $this->assertSame('propagation/child/foo', $childChildren['foo']->getPath());
- }
- /**
- * @group legacy
- * @expectedDeprecation A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.
- */
- public function testInitializingTreeBuildersWithoutRootNode()
- {
- new TreeBuilder();
- }
- }
|