Passed
Pull Request — master (#38)
by Marco
02:23
created

ClassBecameFinalTest::testDiffs()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace RoaveTest\ApiCompare\Comparator\BackwardsCompatibility\ClassBased;
6
7
use PHPUnit\Framework\TestCase;
8
use Roave\ApiCompare\Change;
9
use Roave\ApiCompare\Comparator\BackwardsCompatibility\ClassBased\ClassBecameFinal;
10
use Roave\BetterReflection\BetterReflection;
11
use Roave\BetterReflection\Reflection\ReflectionClass;
12
use Roave\BetterReflection\Reflector\ClassReflector;
13
use Roave\BetterReflection\SourceLocator\Type\StringSourceLocator;
14
use function array_map;
15
use function iterator_to_array;
16
17
final class ClassBecameFinalTest extends TestCase
18
{
19
    /**
20
     * @dataProvider classesToBeTested
21
     *
22
     * @param string[] $expectedMessages
23
     */
24
    public function testDiffs(
25
        ReflectionClass $fromClass,
26
        ReflectionClass $toClass,
27
        array $expectedMessages
28
    ) : void {
29
        $changes = (new ClassBecameFinal())
30
            ->compare($fromClass, $toClass);
31
32
        self::assertSame(
33
            $expectedMessages,
34
            array_map(function (Change $change) : string {
35
                return $change->__toString();
36
            }, iterator_to_array($changes))
37
        );
38
    }
39
40
    /** @return (string[]|ReflectionClass)[][] */
41
    public function classesToBeTested() : array
42
    {
43
        $locator       = (new BetterReflection())->astLocator();
44
        $fromReflector = new ClassReflector(new StringSourceLocator(
45
            <<<'PHP'
46
<?php
47
48
class A {}
49
final class B {}
50
class C {}
51
final class D {}
52
PHP
53
            ,
54
            $locator
55
        ));
56
        $toReflector   = new ClassReflector(new StringSourceLocator(
57
            <<<'PHP'
58
<?php
59
60
final class A {}
61
class B {}
62
class C {}
63
final class D {}
64
PHP
65
            ,
66
            $locator
67
        ));
68
69
        return [
70
            'A' => [
71
                $fromReflector->reflect('A'),
72
                $toReflector->reflect('A'),
73
                ['[BC] CHANGED: Class A became final'],
74
            ],
75
            'B' => [
76
                $fromReflector->reflect('B'),
77
                $toReflector->reflect('B'),
78
                [],
79
            ],
80
            'C' => [
81
                $fromReflector->reflect('C'),
82
                $toReflector->reflect('C'),
83
                [],
84
            ],
85
            'D' => [
86
                $fromReflector->reflect('D'),
87
                $toReflector->reflect('D'),
88
                [],
89
            ],
90
        ];
91
    }
92
}
93