Passed
Pull Request — master (#593)
by butschster
05:58
created

testGetsClassesForExistsScope()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 8
nc 1
nop 0
dl 0
loc 13
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Spiral\Tests\Tokenizer;
6
7
use PHPUnit\Framework\TestCase;
8
use Spiral\Core\Container;
9
use Spiral\Tests\Tokenizer\Classes\ClassA;
10
use Spiral\Tests\Tokenizer\Classes\ClassB;
11
use Spiral\Tests\Tokenizer\Classes\ClassC;
12
use Spiral\Tests\Tokenizer\Classes\Inner\ClassD;
13
use Spiral\Tokenizer\Config\TokenizerConfig;
14
use Spiral\Tokenizer\ScopedClassesInterface;
15
use Spiral\Tokenizer\ScopedClassLocator;
16
use Spiral\Tokenizer\Tokenizer;
17
18
final class ScopedClassLocatorTest extends TestCase
19
{
20
    private Container $container;
21
22
    protected function setUp(): void
23
    {
24
        parent::setUp();
25
26
        $this->container = new Container();
27
        $this->container->bind(Tokenizer::class, $this->getTokenizer());
0 ignored issues
show
Bug introduced by
$this->getTokenizer() of type Spiral\Tokenizer\Tokenizer is incompatible with the type array|callable|string expected by parameter $resolver of Spiral\Core\Container::bind(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

27
        $this->container->bind(Tokenizer::class, /** @scrutinizer ignore-type */ $this->getTokenizer());
Loading history...
28
        $this->container->bindSingleton(ScopedClassesInterface::class, ScopedClassLocator::class);
29
    }
30
31
    public function testGetsClassesForExistsScope()
32
    {
33
        $classes = $this->container->get(ScopedClassesInterface::class)->getScopedClasses('foo');
34
35
        $this->assertArrayHasKey(ClassD::class, $classes);
36
37
        // Excluded
38
        $this->assertArrayNotHasKey(self::class, $classes);
39
        $this->assertArrayNotHasKey(ClassA::class, $classes);
40
        $this->assertArrayNotHasKey(ClassB::class, $classes);
41
        $this->assertArrayNotHasKey(ClassC::class, $classes);
42
        $this->assertArrayNotHasKey('Spiral\Tests\Tokenizer\Classes\Excluded\ClassXX', $classes);
43
        $this->assertArrayNotHasKey('Spiral\Tests\Tokenizer\Classes\Bad_Class', $classes);
44
    }
45
46
    public function testGetsClassesForNotExistScope()
47
    {
48
        $classes = $this->container->get(ScopedClassesInterface::class)->getScopedClasses('bar');
49
50
        $this->assertArrayHasKey(self::class, $classes);
51
        $this->assertArrayHasKey(ClassA::class, $classes);
52
        $this->assertArrayHasKey(ClassB::class, $classes);
53
        $this->assertArrayHasKey(ClassC::class, $classes);
54
        $this->assertArrayHasKey(ClassD::class, $classes);
55
56
        // Excluded
57
        $this->assertArrayNotHasKey('Spiral\Tests\Tokenizer\Classes\Excluded\ClassXX', $classes);
58
        $this->assertArrayNotHasKey('Spiral\Tests\Tokenizer\Classes\Bad_Class', $classes);
59
    }
60
61
    protected function getTokenizer(): Tokenizer
62
    {
63
        $config = new TokenizerConfig([
64
            'directories' => [__DIR__],
65
            'exclude' => ['Excluded'],
66
            'scopes' => [
67
                'foo' => [
68
                    'directories' => [__DIR__.'/Classes/Inner'],
69
                    'exclude' => [],
70
                ],
71
            ],
72
        ]);
73
74
        return new Tokenizer($config);
75
    }
76
}
77