Skip to content

Commit b4179ad

Browse files
authored
Merge pull request #40 from anne-gaelle123inkt/master
Fix the count of statements
2 parents 1a60bae + 848a7ff commit b4179ad

File tree

6 files changed

+146
-35
lines changed

6 files changed

+146
-35
lines changed

src/Lib/IO/MetricsFactory.php

+6-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use DigitalRevolution\CodeCoverageInspection\Model\Metric\MethodMetric;
99
use DOMDocument;
1010
use DOMNode;
11+
use DOMNodeList;
1112
use DOMXPath;
1213

1314
class MetricsFactory
@@ -75,14 +76,15 @@ public static function getFileMetrics(DOMDocument $document): array
7576
$filename = str_replace('\\', '/', (string)XMLUtil::getAttribute($parentNode, 'name'));
7677

7778
// calculate coverage
78-
$statements = (int)XMLUtil::getAttribute($domMetric, 'statements');
79+
$statementsNodes = $xpath->query('line[@type="stmt"]', $parentNode);
80+
$statements = $statementsNodes === false ? 0 : count($statementsNodes);
7981
$coveredStatements = (int)XMLUtil::getAttribute($domMetric, 'coveredstatements');
8082
$coveragePercentage = $statements === 0 ? 100 : round($coveredStatements / $statements * 100, self::COVERAGE_PERCENTAGE_PRECISION);
8183

8284
// gather metrics per method
8385
$methodMetrics = self::getMethodMetrics($xpath, $parentNode);
8486

85-
$coveredStatements = self::getCoveredStatements($xpath, $parentNode);
87+
$coveredStatements = self::getCoveredStatements($statementsNodes);
8688

8789
$metrics[$filename] = new FileMetric($filename, $statements, $coveragePercentage, $methodMetrics, $coveredStatements);
8890
}
@@ -114,11 +116,11 @@ public static function getMethodMetrics(DOMXPath $xpath, DOMNode $fileNode): arr
114116
}
115117

116118
/**
119+
* @param DOMNodeList<DOMNode>|false $statementNodes
117120
* @return int[]
118121
*/
119-
private static function getCoveredStatements(DOMXPath $xpath, DOMNode $fileNode): array
122+
private static function getCoveredStatements(DOMNodeList|false $statementNodes): array
120123
{
121-
$statementNodes = $xpath->query('line[@type="stmt"]', $fileNode);
122124
if ($statementNodes === false || count($statementNodes) === 0) {
123125
return [];
124126
}

tests/Functional/Command/BaselineCommand/Data/coverage.xml

+15-4
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@
99
coveredmethods="0"
1010
conditionals="0"
1111
coveredconditionals="0"
12-
statements="78"
13-
coveredstatements="35"
12+
statements="5"
13+
coveredstatements="2"
1414
elements="0"
1515
coveredelements="0"/>
16+
<line num="1" type="method" name="methodName" count="1"/>
17+
<line num="2" type="stmt" count="0"/>
18+
<line num="3" type="stmt" count="1"/>
19+
<line num="4" type="stmt" count="0"/>
20+
<line num="5" type="stmt" count="1"/>
21+
<line num="6" type="stmt" count="0"/>
1622
</file>
1723
<file name="/home/workspace/test/case/file-b.php">
1824
<metrics loc="11"
@@ -22,10 +28,15 @@
2228
coveredmethods="0"
2329
conditionals="0"
2430
coveredconditionals="0"
25-
statements="100"
26-
coveredstatements="50"
31+
statements="4"
32+
coveredstatements="2"
2733
elements="0"
2834
coveredelements="0"/>
35+
<line num="1" type="method" name="methodName" count="1"/>
36+
<line num="2" type="stmt" count="1"/>
37+
<line num="3" type="stmt" count="0"/>
38+
<line num="4" type="stmt" count="1"/>
39+
<line num="5" type="stmt" count="0"/>
2940
</file>
3041
</project>
3142
</coverage>
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<phpfci xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/digitalrevolution/phpunit-file-coverage-inspection/resources/phpfci.xsd" min-coverage="100">
33
<custom-coverage>
4-
<file path="test/case/file-a.php" min="44"/>
4+
<file path="test/case/file-a.php" min="40"/>
55
<file path="test/case/file-b.php" min="50"/>
66
</custom-coverage>
77
</phpfci>

tests/Functional/Command/InspectCommand/Data/checkstyle.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<error line="1" column="0" severity="error" message="Project per file coverage is configured at 80%. Current coverage is at 70%. Improve coverage for this class." source="phpunit-file-coverage-inspection"/>
55
</file>
66
<file name="/home/workspace/test/directory/standard-below-threshold.php">
7-
<error line="1" column="0" severity="error" message="Custom file coverage is configured at 90%. Current coverage is at 85%. Improve coverage for this class." source="phpunit-file-coverage-inspection"/>
7+
<error line="1" column="0" severity="error" message="Custom file coverage is configured at 90%. Current coverage is at 80%. Improve coverage for this class." source="phpunit-file-coverage-inspection"/>
88
</file>
99
<file name="/home/workspace/test/case/below-threshold.php">
1010
<error line="1" column="0" severity="error" message="Custom file coverage is configured at 55%. Current coverage is at 50%. Improve coverage for this class." source="phpunit-file-coverage-inspection"/>

tests/Functional/Command/InspectCommand/Data/coverage.xml

+104-19
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,21 @@
1010
coveredmethods="0"
1111
conditionals="0"
1212
coveredconditionals="0"
13-
statements="100"
14-
coveredstatements="90"
13+
statements="10"
14+
coveredstatements="9"
1515
elements="0"
1616
coveredelements="0"/>
17+
<line num="1" type="method" name="methodName" count="1"/>
18+
<line num="2" type="stmt" count="1"/>
19+
<line num="3" type="stmt" count="1"/>
20+
<line num="4" type="stmt" count="1"/>
21+
<line num="5" type="stmt" count="1"/>
22+
<line num="6" type="stmt" count="1"/>
23+
<line num="7" type="stmt" count="1"/>
24+
<line num="8" type="stmt" count="1"/>
25+
<line num="9" type="stmt" count="1"/>
26+
<line num="10" type="stmt" count="0"/>
27+
<line num="11" type="stmt" count="1"/>
1728
</file>
1829
<!-- coverage 70% -->
1930
<file name="/home\workspace/test/case/standard-below-threshold.php">
@@ -24,10 +35,21 @@
2435
coveredmethods="0"
2536
conditionals="0"
2637
coveredconditionals="0"
27-
statements="100"
28-
coveredstatements="70"
38+
statements="10"
39+
coveredstatements="7"
2940
elements="0"
3041
coveredelements="0"/>
42+
<line num="1" type="method" name="methodName" count="1"/>
43+
<line num="2" type="stmt" count="1"/>
44+
<line num="3" type="stmt" count="1"/>
45+
<line num="4" type="stmt" count="1"/>
46+
<line num="5" type="stmt" count="1"/>
47+
<line num="6" type="stmt" count="0"/>
48+
<line num="7" type="stmt" count="1"/>
49+
<line num="8" type="stmt" count="0"/>
50+
<line num="9" type="stmt" count="1"/>
51+
<line num="10" type="stmt" count="0"/>
52+
<line num="11" type="stmt" count="1"/>
3153
</file>
3254

3355
<!-- coverage directory coverage below threshold -->
@@ -39,10 +61,21 @@
3961
coveredmethods="0"
4062
conditionals="0"
4163
coveredconditionals="0"
42-
statements="100"
43-
coveredstatements="85"
64+
statements="10"
65+
coveredstatements="8"
4466
elements="0"
4567
coveredelements="0"/>
68+
<line num="1" type="method" name="methodName" count="1"/>
69+
<line num="2" type="stmt" count="1"/>
70+
<line num="3" type="stmt" count="1"/>
71+
<line num="4" type="stmt" count="1"/>
72+
<line num="5" type="stmt" count="1"/>
73+
<line num="6" type="stmt" count="1"/>
74+
<line num="7" type="stmt" count="1"/>
75+
<line num="8" type="stmt" count="0"/>
76+
<line num="9" type="stmt" count="1"/>
77+
<line num="10" type="stmt" count="0"/>
78+
<line num="11" type="stmt" count="1"/>
4679
</file>
4780
<!-- coverage directory coverage above threshold -->
4881
<file name="/home\workspace/test/directory/standard-above-threshold.php">
@@ -53,10 +86,21 @@
5386
coveredmethods="0"
5487
conditionals="0"
5588
coveredconditionals="0"
56-
statements="100"
57-
coveredstatements="95"
89+
statements="10"
90+
coveredstatements="9"
5891
elements="0"
5992
coveredelements="0"/>
93+
<line num="1" type="method" name="methodName" count="1"/>
94+
<line num="2" type="stmt" count="1"/>
95+
<line num="3" type="stmt" count="1"/>
96+
<line num="4" type="stmt" count="1"/>
97+
<line num="5" type="stmt" count="1"/>
98+
<line num="6" type="stmt" count="1"/>
99+
<line num="7" type="stmt" count="1"/>
100+
<line num="8" type="stmt" count="1"/>
101+
<line num="9" type="stmt" count="1"/>
102+
<line num="10" type="stmt" count="0"/>
103+
<line num="11" type="stmt" count="1"/>
60104
</file>
61105

62106
<!-- custom configured files -->
@@ -69,10 +113,16 @@
69113
coveredmethods="0"
70114
conditionals="0"
71115
coveredconditionals="0"
72-
statements="100"
73-
coveredstatements="60"
116+
statements="5"
117+
coveredstatements="3"
74118
elements="0"
75119
coveredelements="0"/>
120+
<line num="1" type="method" name="methodName" count="1"/>
121+
<line num="2" type="stmt" count="1"/>
122+
<line num="3" type="stmt" count="0"/>
123+
<line num="4" type="stmt" count="1"/>
124+
<line num="5" type="stmt" count="0"/>
125+
<line num="6" type="stmt" count="1"/>
76126
</file>
77127
<!-- coverage 50% -->
78128
<file name="/home\workspace/test/case\below-threshold.php">
@@ -83,10 +133,13 @@
83133
coveredmethods="0"
84134
conditionals="0"
85135
coveredconditionals="0"
86-
statements="100"
87-
coveredstatements="50"
136+
statements="2"
137+
coveredstatements="1"
88138
elements="0"
89139
coveredelements="0"/>
140+
<line num="1" type="method" name="methodName" count="1"/>
141+
<line num="2" type="stmt" count="1"/>
142+
<line num="3" type="stmt" count="0"/>
90143
</file>
91144

92145
<!-- coverage 90% -->
@@ -98,10 +151,21 @@
98151
coveredmethods="0"
99152
conditionals="0"
100153
coveredconditionals="0"
101-
statements="100"
102-
coveredstatements="90"
154+
statements="10"
155+
coveredstatements="9"
103156
elements="0"
104157
coveredelements="0"/>
158+
<line num="1" type="method" name="methodName" count="1"/>
159+
<line num="2" type="stmt" count="1"/>
160+
<line num="3" type="stmt" count="1"/>
161+
<line num="4" type="stmt" count="1"/>
162+
<line num="5" type="stmt" count="1"/>
163+
<line num="6" type="stmt" count="1"/>
164+
<line num="7" type="stmt" count="1"/>
165+
<line num="8" type="stmt" count="1"/>
166+
<line num="9" type="stmt" count="1"/>
167+
<line num="10" type="stmt" count="0"/>
168+
<line num="11" type="stmt" count="1"/>
105169
</file>
106170

107171
<!-- coverage 90% and uncovered methods -->
@@ -115,10 +179,21 @@
115179
coveredmethods="0"
116180
conditionals="0"
117181
coveredconditionals="0"
118-
statements="100"
119-
coveredstatements="90"
182+
statements="10"
183+
coveredstatements="9"
120184
elements="0"
121185
coveredelements="0"/>
186+
<line num="1" type="method" name="methodName" count="1"/>
187+
<line num="2" type="stmt" count="1"/>
188+
<line num="3" type="stmt" count="1"/>
189+
<line num="4" type="stmt" count="1"/>
190+
<line num="5" type="stmt" count="1"/>
191+
<line num="6" type="stmt" count="1"/>
192+
<line num="7" type="stmt" count="1"/>
193+
<line num="8" type="stmt" count="1"/>
194+
<line num="9" type="stmt" count="1"/>
195+
<line num="10" type="stmt" count="0"/>
196+
<line num="11" type="stmt" count="1"/>
122197
</file>
123198

124199
<!-- coverage 90% and ignore uncovered methods -->
@@ -131,11 +206,21 @@
131206
coveredmethods="0"
132207
conditionals="0"
133208
coveredconditionals="0"
134-
statements="100"
135-
coveredstatements="90"
209+
statements="10"
210+
coveredstatements="9"
136211
elements="0"
137212
coveredelements="0"/>
213+
<line num="1" type="method" name="methodName" count="1"/>
214+
<line num="2" type="stmt" count="1"/>
215+
<line num="3" type="stmt" count="1"/>
216+
<line num="4" type="stmt" count="1"/>
217+
<line num="5" type="stmt" count="1"/>
218+
<line num="6" type="stmt" count="1"/>
219+
<line num="7" type="stmt" count="1"/>
220+
<line num="8" type="stmt" count="1"/>
221+
<line num="9" type="stmt" count="1"/>
222+
<line num="10" type="stmt" count="0"/>
223+
<line num="11" type="stmt" count="1"/>
138224
</file>
139-
140225
</project>
141226
</coverage>

tests/Unit/Lib/IO/MetricsFactoryTest.php

+19-6
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,14 @@ public function testGetMethodMetrics(): void
6666
<metrics loc="11" ncloc="11" classes="0"
6767
methods="0" coveredmethods="0"
6868
conditionals="0" coveredconditionals="0"
69-
statements="50" coveredstatements="10"
69+
statements="5" coveredstatements="1"
7070
elements="0" coveredelements="0"/>
7171
<line num="29" type="method" name="isFoobar" visibility="public" complexity="1" crap="1" count="1"/>
72-
<line num="31" type="stmt" count="1"/>
72+
<line num="31" type="stmt" count="0"/>
73+
<line num="32" type="stmt" count="0"/>
74+
<line num="33" type="stmt" count="1"/>
75+
<line num="34" type="stmt" count="0"/>
76+
<line num="35" type="stmt" count="0"/>
7377
</file>
7478
</project>
7579
</coverage>';
@@ -160,24 +164,33 @@ public static function multiFilesDataProvider(): array
160164
'first 100 %' => [
161165
'<file name="utTestFile.php">
162166
<metrics loc="11" ncloc="11" statements="1" coveredstatements="1"/>
167+
<line num="1" type="method" name="methodName" count="1"/>
168+
<line num="2" type="stmt" count="1"/>
163169
</file>',
164170
' <file name="utTestFile.php">
165171
<metrics loc="11" ncloc="11" statements="0" coveredstatements="0"/>
172+
<line num="1" type="method" name="methodName" count="1"/>
166173
</file>',
167-
0,
174+
1,
168175
100.0,
169-
[]
176+
[2]
170177
],
171178
'second 100%' => [
172179
'<file name="utTestFile.php">
173180
<metrics loc="11" ncloc="11" statements="2" coveredstatements="0"/>
181+
<line num="1" type="method" name="methodName" count="1"/>
182+
<line num="2" type="stmt" count="0"/>
183+
<line num="3" type="stmt" count="0"/>
174184
</file>',
175185
'<file name="utTestFile.php">
176186
<metrics loc="11" ncloc="11" statements="2" coveredstatements="2"/>
187+
<line num="1" type="method" name="methodName" count="1"/>
188+
<line num="2" type="stmt" count="1"/>
189+
<line num="3" type="stmt" count="1"/>
177190
</file>',
178-
0,
191+
1,
179192
100.0,
180-
[]
193+
[2, 3]
181194
]
182195
];
183196
}

0 commit comments

Comments
 (0)