Completed
Push — master ( 41ae82...437c90 )
by Dave
13s queued 11s
created

assertNoIssuesOutput()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
cc 1
eloc 2
c 2
b 0
f 1
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Unit\Plugins\OutputFormatters;
6
7
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\AbsoluteFileName;
8
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\LineNumber;
9
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Location;
10
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\ProjectRoot;
11
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Type;
12
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\OutputFormatter\OutputFormatter;
13
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResult;
14
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResults;
15
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResultsBuilder;
16
use PHPUnit\Framework\TestCase;
17
18
abstract class AbstractOutputFormatterTest extends TestCase
19
{
20
    private const FILE_1 = '/FILE_1';
21
    private const FILE_2 = '/FILE_2';
22
    private const TYPE_1 = 'TYPE_1';
23
    private const TYPE_2 = 'TYPE_2';
24
25
    abstract protected function getOutputFormatter(): OutputFormatter;
26
27
    protected function assertName(string $expectedName): void
28
    {
29
        $outputFormatter = $this->getOutputFormatter();
30
        $this->assertSame($expectedName, $outputFormatter->getIdentifier());
31
    }
32
33
    protected function assertNoIssuesOutput(string $expectedOutput): void
34
    {
35
        $analysisResults = new AnalysisResults([]);
36
37
        $this->assertOutput($expectedOutput, $analysisResults);
38
    }
39
40
    protected function assertIssuesOutput(string $expectedOutput): void
41
    {
42
        $analysisResultsBuilder = new AnalysisResultsBuilder();
43
        $this->addAnalysisResult($analysisResultsBuilder, self::FILE_1, 10, self::TYPE_1, 'MESSAGE_1');
44
        $this->addAnalysisResult($analysisResultsBuilder, self::FILE_1, 12, self::TYPE_2, 'MESSAGE_2');
45
        $this->addAnalysisResult($analysisResultsBuilder, self::FILE_2, 0, self::TYPE_1, 'MESSAGE_3');
46
47
        $this->assertOutput($expectedOutput, $analysisResultsBuilder->build());
48
    }
49
50
    private function assertOutput(string $expectedOutput, AnalysisResults $analysisResults): void
51
    {
52
        $outputFormatter = $this->getOutputFormatter();
53
        $output = $outputFormatter->outputResults($analysisResults);
54
        $this->assertSame($expectedOutput, $output);
55
    }
56
57
    private function addAnalysisResult(
58
        AnalysisResultsBuilder $analysisResultsBuilder,
59
        string $file,
60
        int $lineNumberAsInt,
61
        string $type,
62
        string $message
63
    ): void {
64
        $projectRoot = new ProjectRoot('/', '/');
65
        $absoluteFileName = new AbsoluteFileName($file);
66
        $lineNumber = new LineNumber($lineNumberAsInt);
67
        $location = Location::fromAbsoluteFileName($absoluteFileName, $projectRoot, $lineNumber);
68
69
        $analysisResult = new AnalysisResult($location, new Type($type), $message, []);
70
71
        $analysisResultsBuilder->addAnalysisResult($analysisResult);
72
    }
73
}
74