testCheckFinalClassesCommand()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
cc 1
nc 1
nop 3
1
<?php
2
3
namespace FinalizerTest\Console;
4
5
use Finalizer\Console\CheckFinalClassesCommand;
6
use PHPUnit\Framework\TestCase;
7
use Symfony\Component\Console\Input\ArrayInput;
8
use Symfony\Component\Console\Tests\Fixtures\DummyOutput;
9
use function count;
10
use function explode;
11
12
/**
13
 * @covers \Finalizer\Console\CheckFinalClassesCommand
14
 */
15
class CheckFinalClassesCommandTest extends TestCase
16
{
17
    /**
18
     * @dataProvider pathsProvider
19
     *
20
     * @param string[] $paths
21
     * @param string   $expectedOutput
22
     */
23
    public function testCheckFinalClassesCommand(array $paths, string $expectedOutput, int $expectedExitCode) : void
24
    {
25
        $output = new DummyOutput();
26
27
        $exitCode = (new CheckFinalClassesCommand())->run(new ArrayInput(['directories' => $paths]), $output);
28
29
        $this->assertCount(count(explode("\n", $expectedOutput)), explode(PHP_EOL, $output->fetch()));
30
        $this->assertSame($expectedExitCode, $exitCode);
31
    }
32
33
    /**
34
     * Data provider
35
     *
36
     * @return mixed[][]
37
     */
38
    public function pathsProvider() : array
39
    {
40
        return [
41
            [
42
                [__DIR__ . '/../../../src'],
43
                '',
44
                0,
45
            ],
46
            [
47
                [__DIR__ . '/../../FinalizerTestAsset'],
48
                <<<'OUTPUT'
49
Following classes need to be made final:
50
+--------------------------------------------------------------+
51
| FinalizerTestAsset\Finalizable\ClassWithConstructor          |
52
| FinalizerTestAsset\Finalizable\ClassWithNoMethods            |
53
| FinalizerTestAsset\Finalizable\ClassWithPrivateMethod        |
54
| FinalizerTestAsset\Finalizable\ClassWithProtectedMethod      |
55
| FinalizerTestAsset\Finalizable\EmptyChildClass               |
56
| FinalizerTestAsset\Finalizable\FooBarConstructorMethodClass  |
57
| FinalizerTestAsset\Finalizable\FooBarMethodClass             |
58
| FinalizerTestAsset\Finalizable\FooMethodClass                |
59
| FinalizerTestAsset\Finalizable\InvokableClass                |
60
| FinalizerTestAsset\Finalizable\InvokableClassWithConstructor |
61
+--------------------------------------------------------------+
62
Following classes are final and need to be made extensible again:
63
+-----------------------------------------------------------+
64
| FinalizerTestAsset\InvalidFinal\ClassThatShouldNotBeFinal |
65
+-----------------------------------------------------------+
66
67
OUTPUT
68
                ,
69
                1
70
            ],
71
            [
72
                [__DIR__ . '/../../../src', __DIR__ . '/../../FinalizerTestAsset'],
73
                <<<'OUTPUT'
74
Following classes need to be made final:
75
+--------------------------------------------------------------+
76
| FinalizerTestAsset\Finalizable\ClassWithConstructor          |
77
| FinalizerTestAsset\Finalizable\ClassWithNoMethods            |
78
| FinalizerTestAsset\Finalizable\ClassWithPrivateMethod        |
79
| FinalizerTestAsset\Finalizable\ClassWithProtectedMethod      |
80
| FinalizerTestAsset\Finalizable\EmptyChildClass               |
81
| FinalizerTestAsset\Finalizable\FooBarConstructorMethodClass  |
82
| FinalizerTestAsset\Finalizable\FooBarMethodClass             |
83
| FinalizerTestAsset\Finalizable\FooMethodClass                |
84
| FinalizerTestAsset\Finalizable\InvokableClass                |
85
| FinalizerTestAsset\Finalizable\InvokableClassWithConstructor |
86
+--------------------------------------------------------------+
87
Following classes are final and need to be made extensible again:
88
+-----------------------------------------------------------+
89
| FinalizerTestAsset\InvalidFinal\ClassThatShouldNotBeFinal |
90
+-----------------------------------------------------------+
91
92
OUTPUT
93
                ,
94
                1
95
            ],
96
            [
97
                [
98
                    __DIR__ . '/../../FinalizerTestAsset/Finalizable',
99
                    __DIR__ . '/../../FinalizerTestAsset/InvalidFinal',
100
                ],
101
                <<<'OUTPUT'
102
Following classes need to be made final:
103
+--------------------------------------------------------------+
104
| FinalizerTestAsset\Finalizable\ClassWithConstructor          |
105
| FinalizerTestAsset\Finalizable\ClassWithNoMethods            |
106
| FinalizerTestAsset\Finalizable\ClassWithPrivateMethod        |
107
| FinalizerTestAsset\Finalizable\ClassWithProtectedMethod      |
108
| FinalizerTestAsset\Finalizable\EmptyChildClass               |
109
| FinalizerTestAsset\Finalizable\FooBarConstructorMethodClass  |
110
| FinalizerTestAsset\Finalizable\FooBarMethodClass             |
111
| FinalizerTestAsset\Finalizable\FooMethodClass                |
112
| FinalizerTestAsset\Finalizable\InvokableClass                |
113
| FinalizerTestAsset\Finalizable\InvokableClassWithConstructor |
114
+--------------------------------------------------------------+
115
Following classes are final and need to be made extensible again:
116
+-----------------------------------------------------------+
117
| FinalizerTestAsset\InvalidFinal\ClassThatShouldNotBeFinal |
118
+-----------------------------------------------------------+
119
120
OUTPUT
121
                ,
122
                1
123
            ],
124
        ];
125
    }
126
}
127