Passed
Push — main ( 2c83d5...fb3f8a )
by Siad
05:21
created

PHPStanTaskTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 124
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 10
eloc 52
dl 0
loc 124
rs 10
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A testAnalyseOptionsCanBeSet() 0 15 1
A testListOptionsCanBeSet() 0 10 1
A assertExpectedCommandInLogs() 0 3 1
A testHelpOptionsCanBeSet() 0 10 1
A testTestInvalidCommandCausesBuildError() 0 5 1
A testCommonOptionsCanBeSet() 0 14 1
A testExecutableCanBeSet() 0 12 1
A testItRun() 0 7 1
A testItRunWithFileset() 0 5 1
A setUp() 0 3 1
1
<?php
2
/**
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14
 *
15
 * This software consists of voluntary contributions made by many individuals
16
 * and is licensed under the LGPL. For more information please see
17
 * <http://phing.info>.
18
 */
19
20
declare(strict_types=1);
21
22
namespace Phing\Test\Task\Optional\PHPStan;
23
24
use Phing\Exception\BuildException;
25
use Phing\Project;
26
use Phing\Test\Support\BuildFileTest;
27
28
class PHPStanTaskTest extends BuildFileTest
29
{
30
    private const PHPSTAN_TEST_BASE = PHING_TEST_BASE . '/etc/tasks/ext/phpstan/';
31
32
    public function setUp(): void
33
    {
34
        $this->configureProject(self::PHPSTAN_TEST_BASE . "/PHPStanTaskTest.xml");
35
    }
36
37
    public function testItRun(): void
38
    {
39
        $this->executeTarget("testRun");
40
41
        $expectedCommand = 'phpstan analyse';
42
43
        $this->assertExpectedCommandInLogs($expectedCommand);
44
    }
45
46
    public function testItRunWithFileset(): void
47
    {
48
        $this->executeTarget("testRunFileset");
49
50
        $this->assertExpectedCommandInLogs('phpstan analyse');
51
    }
52
53
    private function assertExpectedCommandInLogs(string $expectedCommand): void
54
    {
55
        $this->assertInLogs('Executing command: ' . $expectedCommand, Project::MSG_INFO);
56
    }
57
58
    /**
59
     * @depends testItRun
60
     */
61
    public function testExecutableCanBeSet(): void
62
    {
63
        $this->executeTarget("testExecutableChange");
64
65
        $expectedCommand = str_replace(
66
            '/',
67
            DIRECTORY_SEPARATOR,
68
            '/non/existing/path/to/phpstan'
69
        );
70
        $expectedCommand .= ' analyse';
71
72
        $this->assertExpectedCommandInLogs($expectedCommand);
73
    }
74
75
    /**
76
     * @depends testItRun
77
     */
78
    public function testTestInvalidCommandCausesBuildError(): void
79
    {
80
        $this->expectException(BuildException::class);
81
        $this->expectExceptionMessage('unknown command');
82
        $this->executeTarget("testInvalidCommand");
83
    }
84
85
    /**
86
     * @depends testItRun
87
     */
88
    public function testAnalyseOptionsCanBeSet(): void
89
    {
90
        $this->executeTarget("testAnalyseOptions");
91
92
        $expectedCommand = 'phpstan analyse';
93
        $expectedCommand .= ' --configuration=anyConfiguration';
94
        $expectedCommand .= ' --level=anyLevel';
95
        $expectedCommand .= ' --no-progress';
96
        $expectedCommand .= ' --debug';
97
        $expectedCommand .= ' --autoload-file=anyAutoloadFile';
98
        $expectedCommand .= ' --error-format=anyErrorFormat';
99
        $expectedCommand .= ' --memory-limit=anyMemoryLimit';
100
        $expectedCommand .= ' path1 path2';
101
102
        $this->assertExpectedCommandInLogs($expectedCommand);
103
    }
104
105
    /**
106
     * @depends testItRun
107
     */
108
    public function testHelpOptionsCanBeSet(): void
109
    {
110
        $this->executeTarget("testHelpOptions");
111
112
        $expectedCommand = 'phpstan help';
113
        $expectedCommand .= ' --format=anyFormat';
114
        $expectedCommand .= ' --raw';
115
        $expectedCommand .= ' anyCommand';
116
117
        $this->assertExpectedCommandInLogs($expectedCommand);
118
    }
119
120
    /**
121
     * @depends testItRun
122
     */
123
    public function testListOptionsCanBeSet(): void
124
    {
125
        $this->executeTarget("testListOptions");
126
127
        $expectedCommand = 'phpstan list';
128
        $expectedCommand .= ' --format=anyFormat';
129
        $expectedCommand .= ' --raw';
130
        $expectedCommand .= ' anyNamespace';
131
132
        $this->assertExpectedCommandInLogs($expectedCommand);
133
    }
134
135
    /**
136
     * @depends testItRun
137
     */
138
    public function testCommonOptionsCanBeSet(): void
139
    {
140
        $this->executeTarget("testCommonOptions");
141
142
        $expectedCommand = 'phpstan analyse';
143
        $expectedCommand .= ' --help';
144
        $expectedCommand .= ' --quiet';
145
        $expectedCommand .= ' --version';
146
        $expectedCommand .= ' --ansi';
147
        $expectedCommand .= ' --no-ansi';
148
        $expectedCommand .= ' --no-interaction';
149
        $expectedCommand .= ' --verbose';
150
151
        $this->assertExpectedCommandInLogs($expectedCommand);
152
    }
153
}
154