4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Config\Tests\Definition\Builder;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Config\Tests\Definition\Builder\NodeBuilder as CustomNodeBuilder;
16 use Symfony\Component\Config\Definition\Builder\TreeBuilder;
18 require __DIR__.'/../../Fixtures/Builder/NodeBuilder.php';
19 require __DIR__.'/../../Fixtures/Builder/BarNodeDefinition.php';
20 require __DIR__.'/../../Fixtures/Builder/VariableNodeDefinition.php';
22 class TreeBuilderTest extends TestCase
24 public function testUsingACustomNodeBuilder()
26 $builder = new TreeBuilder();
27 $root = $builder->root('custom', 'array', new CustomNodeBuilder());
29 $nodeBuilder = $root->children();
31 $this->assertInstanceOf('Symfony\Component\Config\Tests\Definition\Builder\NodeBuilder', $nodeBuilder);
33 $nodeBuilder = $nodeBuilder->arrayNode('deeper')->children();
35 $this->assertInstanceOf('Symfony\Component\Config\Tests\Definition\Builder\NodeBuilder', $nodeBuilder);
38 public function testOverrideABuiltInNodeType()
40 $builder = new TreeBuilder();
41 $root = $builder->root('override', 'array', new CustomNodeBuilder());
43 $definition = $root->children()->variableNode('variable');
45 $this->assertInstanceOf('Symfony\Component\Config\Tests\Definition\Builder\VariableNodeDefinition', $definition);
48 public function testAddANodeType()
50 $builder = new TreeBuilder();
51 $root = $builder->root('override', 'array', new CustomNodeBuilder());
53 $definition = $root->children()->barNode('variable');
55 $this->assertInstanceOf('Symfony\Component\Config\Tests\Definition\Builder\BarNodeDefinition', $definition);
58 public function testCreateABuiltInNodeTypeWithACustomNodeBuilder()
60 $builder = new TreeBuilder();
61 $root = $builder->root('builtin', 'array', new CustomNodeBuilder());
63 $definition = $root->children()->booleanNode('boolean');
65 $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition', $definition);
68 public function testPrototypedArrayNodeUseTheCustomNodeBuilder()
70 $builder = new TreeBuilder();
71 $root = $builder->root('override', 'array', new CustomNodeBuilder());
73 $root->prototype('bar')->end();
75 $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\BarNode', $root->getNode(true)->getPrototype());
78 public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
80 $builder = new TreeBuilder();
82 $builder->root('propagation')
84 ->setNodeClass('extended', 'Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition')
85 ->node('foo', 'extended')->end()
88 ->node('foo', 'extended')
94 $node = $builder->buildTree();
95 $children = $node->getChildren();
97 $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $children['foo']);
99 $childChildren = $children['child']->getChildren();
101 $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $childChildren['foo']);
104 public function testDefinitionInfoGetsTransferredToNode()
106 $builder = new TreeBuilder();
108 $builder->root('test')->info('root info')
110 ->node('child', 'variable')->info('child info')->defaultValue('default')
114 $tree = $builder->buildTree();
115 $children = $tree->getChildren();
117 $this->assertEquals('root info', $tree->getInfo());
118 $this->assertEquals('child info', $children['child']->getInfo());
121 public function testDefinitionExampleGetsTransferredToNode()
123 $builder = new TreeBuilder();
125 $builder->root('test')
126 ->example(array('key' => 'value'))
128 ->node('child', 'variable')->info('child info')->defaultValue('default')->example('example')
132 $tree = $builder->buildTree();
133 $children = $tree->getChildren();
135 $this->assertInternalType('array', $tree->getExample());
136 $this->assertEquals('example', $children['child']->getExample());