LocateUsedSymbolsFromASTRootsTest::locate()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace ComposerRequireCheckerTest\UsedSymbolsLocator;
4
5
use ArrayObject;
6
use ComposerRequireChecker\UsedSymbolsLocator\LocateUsedSymbolsFromASTRoots;
7
use PhpParser\Node\Name;
8
use PhpParser\Node\Stmt\Class_;
9
use PhpParser\ParserFactory;
10
use PHPUnit\Framework\TestCase;
11
12
/**
13
 * @covers \ComposerRequireChecker\UsedSymbolsLocator\LocateUsedSymbolsFromASTRoots
14
 */
15
final class LocateUsedSymbolsFromASTRootsTest extends TestCase
16
{
17
    /** @var LocateUsedSymbolsFromASTRoots */
18
    private $locator;
19
20
    protected function setUp(): void
21
    {
22
        parent::setUp();
23
24
        $this->locator = new LocateUsedSymbolsFromASTRoots();
25
    }
26
27
    public function testNoAsts(): void
28
    {
29
        $asts = [];
30
        $symbols = $this->locate($asts);
31
32
        $this->assertCount(0, $symbols);
33
    }
34
35
    public function testLocate(): void
36
    {
37
        $node = new Class_('Foo');
38
        $node->extends = new Name('Bar');
39
        $symbols = $this->locate([[$node]]);
40
41
        $this->assertCount(1, $symbols);
42
        $this->assertContains('Bar', $symbols);
43
    }
44
45
    public function testInvokeReturnsSymbolsSorted(): void
46
    {
47
        $expectedSymbols = [
48
            'Doctrine\Common\Collections\ArrayCollection',
49
            'FILTER_VALIDATE_URL',
50
            'filter_var',
51
            'Foo\Bar\Baz',
52
            'libxml_clear_errors',
53
        ];
54
55
        $parserFactory = new ParserFactory();
56
57
        $parser = $parserFactory->create(ParserFactory::PREFER_PHP7);
58
59
        $ast = $parser->parse(file_get_contents(__DIR__ . '/../../fixtures/unknownSymbols/src/OtherThing.php'));
60
61
        $symbols = $this->locate([
62
            $ast,
63
        ]);
64
65
        $this->assertSame($expectedSymbols, $symbols);
66
    }
67
68
    /**
69
     * @return string[]
70
     */
71
    private function locate(array $asts): array
72
    {
73
        return ($this->locator)(new ArrayObject($asts));
74
    }
75
}
76