Completed
Push — master ( 14ae9a...4a06b3 )
by Matthias
17:09 queued 14:38
created

testDontRecordNamespacedDefinedConstDefinition()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace ComposerRequireCheckerTest\NodeVisitor;
4
5
use ComposerRequireChecker\NodeVisitor\DefinedSymbolCollector;
6
use PhpParser\Node\Arg;
7
use PhpParser\Node\Expr\FuncCall;
8
use PhpParser\Node\Name;
9
use PhpParser\Node\Scalar\String_;
10
use PhpParser\Node\Stmt\Class_;
11
use PhpParser\NodeTraverser;
12
use PhpParser\NodeTraverserInterface;
13
use PhpParser\NodeVisitor\NameResolver;
14
use PhpParser\Parser;
15
use PhpParser\ParserFactory;
16
use PHPUnit\Framework\TestCase;
17
18
class DefinedSymbolCollectorTest extends TestCase
19
{
20
    /**
21
     * @var DefinedSymbolCollector
22
     */
23
    private $collector;
24
25
    /**
26
     * @var Parser
27
     */
28
    private $parser;
29
30
    /**
31
     * @var NodeTraverserInterface
32
     */
33
    private $traverser;
34
35
    /**
36
     * {@inheritDoc}
37
     */
38
    protected function setUp()
39
    {
40
        $this->collector = new DefinedSymbolCollector();
41
        $this->parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7);
42
        $this->traverser = new NodeTraverser();
43
44
        $this->traverser->addVisitor(new NameResolver());
45
        $this->traverser->addVisitor($this->collector);
46
    }
47
48
    public function testExceptionWhenNoNamespaceDefined()
49
    {
50
        $this->expectException(\UnexpectedValueException::class);
51
        $node = new Class_('gedöns');
52
        $this->collector->enterNode($node);
53
    }
54
55
    public function testRecordDefinedConstDefinition()
56
    {
57
        $node = new FuncCall(new Name('define'), [
58
            new Arg(new String_('CONST_A')),
59
            new Arg(new String_('VALUE_A')),
60
        ]);
61
        $this->collector->enterNode($node);
62
63
        $this->assertContains('CONST_A', $this->collector->getDefinedSymbols());
64
    }
65
66
    public function testDontRecordNamespacedDefinedConstDefinition()
67
    {
68
        $node = new FuncCall(new Name('define', ['namespacedName' => new Name\FullyQualified('Foo\define')]), [
69
            new Arg(new String_('NO_CONST')),
70
            new Arg(new String_('VALUE_A')),
71
        ]);
72
        $this->collector->enterNode($node);
73
74
        $this->assertEmpty($this->collector->getDefinedSymbols());
75
        $this->assertNotContains('NO_CONST', $this->collector->getDefinedSymbols());
76
    }
77
78
}