testAnonymousClassesAreExcluded()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 1
eloc 13
nc 1
nop 0
dl 0
loc 22
rs 9.8333
c 3
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace RoaveTest\BackwardCompatibility\DetectChanges\BCBreak\ClassBased;
6
7
use PHPUnit\Framework\TestCase;
8
use Roave\BackwardCompatibility\Changes;
9
use Roave\BackwardCompatibility\DetectChanges\BCBreak\ClassBased\ClassBased;
10
use Roave\BackwardCompatibility\DetectChanges\BCBreak\ClassBased\ExcludeAnonymousClasses;
11
use Roave\BetterReflection\BetterReflection;
12
use Roave\BetterReflection\Reflection\ReflectionClass;
13
use Roave\BetterReflection\Reflector\ClassReflector;
14
use Roave\BetterReflection\SourceLocator\Type\StringSourceLocator;
15
use function reset;
16
17
final class ExcludeAnonymousClassesTest extends TestCase
18
{
19
    public function testNormalClassesAreNotExcluded() : void
20
    {
21
        $locator        = (new BetterReflection())->astLocator();
22
        $reflector      = new ClassReflector(new StringSourceLocator(
23
            <<<'PHP'
24
<?php
25
26
class ANormalClass {}
27
PHP
28
            ,
29
            $locator
30
        ));
31
        $fromReflection = $reflector->reflect('ANormalClass');
32
        $toReflection   = $reflector->reflect('ANormalClass');
33
34
        $check = $this->createMock(ClassBased::class);
35
        $check->expects(self::once())
36
            ->method('__invoke')
37
            ->with($fromReflection, $toReflection)
38
            ->willReturn(Changes::empty());
39
40
        $excluder = new ExcludeAnonymousClasses($check);
41
        $excluder->__invoke($fromReflection, $toReflection);
42
    }
43
44
    public function testAnonymousClassesAreExcluded() : void
45
    {
46
        $locator                  = (new BetterReflection())->astLocator();
47
        $reflector                = new ClassReflector(new StringSourceLocator(
48
            <<<'PHP'
49
<?php
50
51
$anonClass = new class {};
52
PHP
53
            ,
54
            $locator
55
        ));
56
        $allClasses               = $reflector->getAllClasses();
57
        $anonymousClassReflection = reset($allClasses);
58
59
        self::assertInstanceOf(ReflectionClass::class, $anonymousClassReflection);
60
61
        $check = $this->createMock(ClassBased::class);
62
        $check->expects(self::never())->method('__invoke');
63
64
        (new ExcludeAnonymousClasses($check))
65
            ->__invoke($anonymousClassReflection, $anonymousClassReflection);
66
    }
67
}
68