LineMutationTest::assertLineNumber()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 2
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Unit\Core\HistoryAnalyser\UnifiedDiffParser;
6
7
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\LineNumber;
8
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\UnifiedDiffParser\LineMutation;
9
use PHPUnit\Framework\TestCase;
10
11
final class LineMutationTest extends TestCase
12
{
13
    private const LINE_NUMBER_1 = 1;
14
    private const LINE_NUMBER_2 = 2;
15
16
    public function testNewLineNumberSet(): void
17
    {
18
        $lineMutation = LineMutation::newLineNumber($this->getLineNumber1());
19
        $this->assertNull($lineMutation->getOriginalLine());
20
        $this->assertNotNull($lineMutation->getNewLine());
21
        /** @psalm-suppress PossiblyNullArgument */
22
        $this->assertLineNumber($this->getLineNumber1(), $lineMutation->getNewLine());
0 ignored issues
show
Bug introduced by
It seems like $lineMutation->getNewLine() can also be of type null; however, parameter $actual of DaveLiddament\StaticAnal...est::assertLineNumber() does only seem to accept DaveLiddament\StaticAnal...omain\Common\LineNumber, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

22
        $this->assertLineNumber($this->getLineNumber1(), /** @scrutinizer ignore-type */ $lineMutation->getNewLine());
Loading history...
23
    }
24
25
    public function testOriginalLineNumberSet(): void
26
    {
27
        $lineMutation = LineMutation::originalLineNumber($this->getLineNumber1());
28
        $this->assertNull($lineMutation->getNewLine());
29
        $this->assertNotNull($lineMutation->getOriginalLine());
30
        /** @psalm-suppress PossiblyNullArgument */
31
        $this->assertLineNumber($this->getLineNumber1(), $lineMutation->getOriginalLine());
0 ignored issues
show
Bug introduced by
It seems like $lineMutation->getOriginalLine() can also be of type null; however, parameter $actual of DaveLiddament\StaticAnal...est::assertLineNumber() does only seem to accept DaveLiddament\StaticAnal...omain\Common\LineNumber, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

31
        $this->assertLineNumber($this->getLineNumber1(), /** @scrutinizer ignore-type */ $lineMutation->getOriginalLine());
Loading history...
32
    }
33
34
    /**
35
     * @return array<string,array{LineMutation,LineMutation|null}>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<string,array{LineM...ion,LineMutation|null}> at position 6 could not be parsed: Expected ':' at position 6, but found 'LineMutation'.
Loading history...
36
     */
37
    public function notEqualDataProvider(): array
38
    {
39
        return [
40
            'compareWithNull' => [
41
                LineMutation::originalLineNumber($this->getLineNumber1()),
42
                null,
43
            ],
44
            'bothOriginalLineNumberDifferentLineNumbers' => [
45
                LineMutation::originalLineNumber($this->getLineNumber1()),
46
                LineMutation::originalLineNumber($this->getLineNumber2()),
47
            ],
48
            'bothNewLineNumberDifferentLineNumbers' => [
49
                LineMutation::newLineNumber($this->getLineNumber1()),
50
                LineMutation::newLineNumber($this->getLineNumber2()),
51
            ],
52
            'bothSameLineNumberForOriginalAndNew' => [
53
                LineMutation::newLineNumber($this->getLineNumber1()),
54
                LineMutation::originalLineNumber($this->getLineNumber2()),
55
            ],
56
        ];
57
    }
58
59
    /**
60
     * @dataProvider notEqualDataProvider
61
     */
62
    public function testNotEqual(LineMutation $a, ?LineMutation $b): void
63
    {
64
        $this->assertFalse($a->isEqual($b));
65
    }
66
67
    /**
68
     * @return array<string,array{LineMutation,LineMutation}>
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<string,array{LineMutation,LineMutation}> at position 6 could not be parsed: Expected ':' at position 6, but found 'LineMutation'.
Loading history...
69
     */
70
    public function equalDataProvider(): array
71
    {
72
        return [
73
            'sameOriginalLineNumber' => [
74
                LineMutation::originalLineNumber($this->getLineNumber1()),
75
                LineMutation::originalLineNumber($this->getLineNumber1()),
76
            ],
77
            'sameNewLineNumber' => [
78
                LineMutation::newLineNumber($this->getLineNumber1()),
79
                LineMutation::newLineNumber($this->getLineNumber1()),
80
            ],
81
        ];
82
    }
83
84
    /**
85
     * @dataProvider equalDataProvider
86
     */
87
    public function testEqual(LineMutation $a, LineMutation $b): void
88
    {
89
        $this->assertTrue($a->isEqual($b));
90
    }
91
92
    private function getLineNumber1(): LineNumber
93
    {
94
        return new LineNumber(self::LINE_NUMBER_1);
95
    }
96
97
    private function getLineNumber2(): LineNumber
98
    {
99
        return new LineNumber(self::LINE_NUMBER_2);
100
    }
101
102
    private function assertLineNumber(LineNumber $expected, LineNumber $actual): void
103
    {
104
        $this->assertSame($expected->getLineNumber(), $actual->getLineNumber());
105
    }
106
}
107