Skip to content

Commit cbeb31f

Browse files
committed
Add test case for node visitor ClassFile
1 parent 87d1573 commit cbeb31f

File tree

1 file changed

+160
-0
lines changed

1 file changed

+160
-0
lines changed

tests/NodeVisitor/ClassFileTest.php

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace OpenCodeModelingTest\CodeAst\NodeVisitor;
6+
7+
use OpenCodeModeling\CodeAst\Code\ClassGenerator;
8+
use OpenCodeModeling\CodeAst\NodeVisitor\ClassNamespace;
9+
use OpenCodeModeling\CodeAst\NodeVisitor\ClassFile;
10+
use PhpParser\NodeTraverser;
11+
use PhpParser\Parser;
12+
use PhpParser\ParserFactory;
13+
use PhpParser\PrettyPrinter\Standard;
14+
use PHPUnit\Framework\TestCase;
15+
16+
final class ClassFileTest extends TestCase
17+
{
18+
/**
19+
* @var Parser
20+
*/
21+
private $parser;
22+
23+
/**
24+
* @var Standard
25+
*/
26+
private $printer;
27+
28+
public function setUp(): void
29+
{
30+
$this->parser = (new ParserFactory())->create(ParserFactory::ONLY_PHP7);
31+
$this->printer = new Standard(['shortArraySyntax' => true]);
32+
}
33+
34+
/**
35+
* @test
36+
*/
37+
public function it_generates_class_for_empty_file(): void
38+
{
39+
$ast = $this->parser->parse('');
40+
41+
$nodeTraverser = new NodeTraverser();
42+
$nodeTraverser->addVisitor(new ClassFile(new ClassGenerator('TestClass')));
43+
44+
$expected = <<<EOF
45+
<?php
46+
47+
class TestClass
48+
{
49+
}
50+
EOF;
51+
52+
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
53+
}
54+
55+
/**
56+
* @test
57+
*/
58+
public function it_checks_class_for_existing_file(): void
59+
{
60+
$ast = $this->parser->parse('<?php class TestClass {}');
61+
62+
$nodeTraverser = new NodeTraverser();
63+
$nodeTraverser->addVisitor(new ClassFile(new ClassGenerator('TestClass')));
64+
65+
$expected = <<<EOF
66+
<?php
67+
68+
class TestClass
69+
{
70+
}
71+
EOF;
72+
73+
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
74+
}
75+
76+
/**
77+
* @test
78+
*/
79+
public function it_generates_class_with_namespace_for_empty_file(): void
80+
{
81+
$ast = $this->parser->parse('');
82+
83+
$nodeTraverser = new NodeTraverser();
84+
$nodeTraverser->addVisitor(new ClassNamespace('My\\Awesome\\Service'));
85+
$nodeTraverser->addVisitor(new ClassFile(new ClassGenerator('TestClass')));
86+
87+
$expected = <<<EOF
88+
<?php
89+
90+
namespace My\Awesome\Service;
91+
92+
class TestClass
93+
{
94+
}
95+
EOF;
96+
97+
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
98+
}
99+
100+
/**
101+
* @test
102+
*/
103+
public function it_generates_class_for_namespace_file(): void
104+
{
105+
$code = <<<EOF
106+
<?php
107+
108+
namespace My\Awesome\Service;
109+
EOF;
110+
111+
$ast = $this->parser->parse($code);
112+
113+
$nodeTraverser = new NodeTraverser();
114+
$nodeTraverser->addVisitor(new ClassFile(new ClassGenerator('TestClass')));
115+
116+
$expected = <<<EOF
117+
<?php
118+
119+
namespace My\Awesome\Service;
120+
121+
class TestClass
122+
{
123+
}
124+
EOF;
125+
126+
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
127+
}
128+
129+
/**
130+
* @test
131+
*/
132+
public function it_checks_class_with_namespace_for_existing_file(): void
133+
{
134+
$code = <<<EOF
135+
<?php
136+
137+
namespace My\Awesome\Service;
138+
139+
class TestClass {}
140+
EOF;
141+
142+
$ast = $this->parser->parse($code);
143+
144+
$nodeTraverser = new NodeTraverser();
145+
$nodeTraverser->addVisitor(new ClassFile(new ClassGenerator('TestClass')));
146+
147+
$expected = <<<EOF
148+
<?php
149+
150+
namespace My\Awesome\Service;
151+
152+
class TestClass
153+
{
154+
}
155+
EOF;
156+
157+
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
158+
}
159+
160+
}

0 commit comments

Comments
 (0)