|
9 | 9 | use OpenCodeModeling\CodeAst\NodeVisitor\ClassConstant;
|
10 | 10 | use OpenCodeModeling\CodeAst\NodeVisitor\ClassFile;
|
11 | 11 | use OpenCodeModeling\CodeAst\NodeVisitor\ClassNamespace;
|
| 12 | +use OpenCodeModeling\CodeAst\NodeVisitor\ClassUseTrait; |
| 13 | +use OpenCodeModeling\CodeAst\NodeVisitor\NamespaceUse; |
12 | 14 | use OpenCodeModeling\CodeAst\NodeVisitor\StrictType;
|
13 | 15 | use OpenCodeModeling\JsonSchemaToPhpAst\ValueObject\BooleanFactory;
|
14 | 16 | use PhpParser\NodeTraverser;
|
@@ -137,6 +139,40 @@ class TestClass
|
137 | 139 | {
|
138 | 140 | private const TYPE_STRING = 'string';
|
139 | 141 | }
|
| 142 | +EOF; |
| 143 | + |
| 144 | + $this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast))); |
| 145 | + } |
| 146 | + |
| 147 | + /** |
| 148 | + * @test |
| 149 | + */ |
| 150 | + public function it_preserves_order_of_registered_visitors() |
| 151 | + { |
| 152 | + $ast = $this->parser->parse(''); |
| 153 | + |
| 154 | + $nodeTraverser = new NodeTraverser(); |
| 155 | + $nodeTraverser->addVisitor(new StrictType()); |
| 156 | + $nodeTraverser->addVisitor(new ClassNamespace('My\\Awesome\\Service')); |
| 157 | + $nodeTraverser->addVisitor(new NamespaceUse('My\\Awesome\\ServiceTrait')); |
| 158 | + $nodeTraverser->addVisitor(new ClassFile(new ClassGenerator('TestClass'))); |
| 159 | + $nodeTraverser->addVisitor(new ClassUseTrait('ServiceTrait')); |
| 160 | + $nodeTraverser->addVisitor(ClassConstant::forClassConstant('TYPE_STRING', 'string')); |
| 161 | + $nodeTraverser->addVisitor(ClassConstant::forClassConstant('TYPE_INT', 3)); |
| 162 | + |
| 163 | + $expected = <<<'EOF' |
| 164 | +<?php |
| 165 | +
|
| 166 | +declare (strict_types=1); |
| 167 | +namespace My\Awesome\Service; |
| 168 | +
|
| 169 | +use My\Awesome\ServiceTrait; |
| 170 | +class TestClass |
| 171 | +{ |
| 172 | + use ServiceTrait; |
| 173 | + public const TYPE_STRING = 'string'; |
| 174 | + public const TYPE_INT = 3; |
| 175 | +} |
140 | 176 | EOF;
|
141 | 177 |
|
142 | 178 | $this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
|
|
0 commit comments