-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
214 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<?php | ||
namespace exussum12\CoverageChecker; | ||
|
||
use XMLReader; | ||
|
||
/** | ||
* Class JacocoReport | ||
* Used for reading in a Jacoco coverage report | ||
* @package exussum12\CoverageChecker | ||
*/ | ||
class JacocoReport extends XMLReport | ||
{ | ||
/** | ||
* {@inheritdoc} | ||
*/ | ||
public function getLines() | ||
{ | ||
$this->coveredLines = []; | ||
$reader = new XMLReader; | ||
$reader->open($this->file); | ||
$currentNamespace = ''; | ||
$currentFile = ''; | ||
|
||
while ($reader->read()) { | ||
$currentNamespace = $this->findNamespace($reader, $currentNamespace); | ||
|
||
$currentFile = $this->findFile($reader, $currentNamespace, $currentFile); | ||
|
||
$this->addLine($reader, $currentFile); | ||
} | ||
|
||
return $this->coveredLines; | ||
} | ||
|
||
public static function getDescription() | ||
{ | ||
return 'Parses xml coverage report produced by Jacoco'; | ||
} | ||
|
||
/** | ||
* @param $reader | ||
* @param $currentFile | ||
*/ | ||
protected function addLine($reader, $currentFile) | ||
{ | ||
if (( | ||
$reader->name === "line" | ||
)) { | ||
$this->coveredLines | ||
[$currentFile] | ||
[$reader->getAttribute('nr')] | ||
= $reader->getAttribute("mi") == 0; | ||
} | ||
} | ||
|
||
protected function findFile($reader, $currentNamespace, $currentFile): string | ||
{ | ||
if (( | ||
$reader->name === "sourcefile" && | ||
$reader->nodeType == XMLReader::ELEMENT | ||
)) { | ||
$currentFile = $currentNamespace . '/' . $reader->getAttribute('name'); | ||
$this->coveredLines[$currentFile] = []; | ||
} | ||
|
||
return $currentFile; | ||
} | ||
|
||
protected function findNamespace($reader, $currentNamespace) | ||
{ | ||
if (( | ||
$reader->name === "package" && | ||
$reader->nodeType == XMLReader::ELEMENT | ||
)) { | ||
$currentNamespace = $reader->getAttribute('name'); | ||
} | ||
return $currentNamespace; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<?php | ||
namespace exussum12\CoverageChecker\tests; | ||
|
||
use PHPUnit\Framework\TestCase; | ||
|
||
use exussum12\CoverageChecker\JacocoReport; | ||
|
||
class JacocoLoaderTest extends TestCase | ||
{ | ||
public function testLoadXML() | ||
{ | ||
$xmlReport = new JacocoReport(__DIR__ . '/fixtures/jacoco.xml'); | ||
$coveredLines = $xmlReport->getLines(); | ||
$expected = [ | ||
'org/jacoco/examples/maven/java/HelloWorld.java' => [ | ||
3 => true, | ||
6 => true, | ||
7 => false, | ||
9 => true, | ||
], | ||
'org/jacoco/examples/maven/java/New/HelloWorld.java' => [ | ||
3 => false, | ||
6 => false, | ||
7 => false, | ||
9 => false, | ||
] | ||
|
||
]; | ||
|
||
$this->assertEquals($expected, $coveredLines); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
<?xml version="1.0" encoding="utf-8" standalone="yes"?> | ||
<!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.0//EN" | ||
"report.dtd"> | ||
<report name="JaCoCo Maven plug-in example for Java project"> | ||
<sessioninfo id="pcname" start="1502989510414" | ||
dump="1502989510978" /> | ||
<package name="org/jacoco/examples/maven/java"> | ||
<class name="org/jacoco/examples/maven/java/HelloWorld"> | ||
<method name="<init>" desc="()V" line="3"> | ||
<counter type="INSTRUCTION" missed="0" covered="3" /> | ||
<counter type="LINE" missed="0" covered="1" /> | ||
<counter type="COMPLEXITY" missed="0" covered="1" /> | ||
<counter type="METHOD" missed="0" covered="1" /> | ||
</method> | ||
<method name="getMessage" desc="(Z)Ljava/lang/String;" | ||
line="6"> | ||
<counter type="INSTRUCTION" missed="2" covered="4" /> | ||
<counter type="BRANCH" missed="1" covered="1" /> | ||
<counter type="LINE" missed="1" covered="2" /> | ||
<counter type="COMPLEXITY" missed="1" covered="1" /> | ||
<counter type="METHOD" missed="0" covered="1" /> | ||
</method> | ||
<counter type="INSTRUCTION" missed="2" covered="7" /> | ||
<counter type="BRANCH" missed="1" covered="1" /> | ||
<counter type="LINE" missed="1" covered="3" /> | ||
<counter type="COMPLEXITY" missed="1" covered="2" /> | ||
<counter type="METHOD" missed="0" covered="2" /> | ||
<counter type="CLASS" missed="0" covered="1" /> | ||
</class> | ||
<sourcefile name="HelloWorld.java"> | ||
<line nr="3" mi="0" ci="3" mb="0" cb="0" /> | ||
<line nr="6" mi="0" ci="2" mb="1" cb="1" /> | ||
<line nr="7" mi="2" ci="0" mb="0" cb="0" /> | ||
<line nr="9" mi="0" ci="2" mb="0" cb="0" /> | ||
<counter type="INSTRUCTION" missed="2" covered="7" /> | ||
<counter type="BRANCH" missed="1" covered="1" /> | ||
<counter type="LINE" missed="1" covered="3" /> | ||
<counter type="COMPLEXITY" missed="1" covered="2" /> | ||
<counter type="METHOD" missed="0" covered="2" /> | ||
<counter type="CLASS" missed="0" covered="1" /> | ||
</sourcefile> | ||
<counter type="INSTRUCTION" missed="2" covered="7" /> | ||
<counter type="BRANCH" missed="1" covered="1" /> | ||
<counter type="LINE" missed="1" covered="3" /> | ||
<counter type="COMPLEXITY" missed="1" covered="2" /> | ||
<counter type="METHOD" missed="0" covered="2" /> | ||
<counter type="CLASS" missed="0" covered="1" /> | ||
</package> | ||
<package name="org/jacoco/examples/maven/java/New"> | ||
<class name="org/jacoco/examples/maven/java/New/HelloWorld"> | ||
<method name="<init>" desc="()V" line="3"> | ||
<counter type="INSTRUCTION" missed="3" covered="0" /> | ||
<counter type="LINE" missed="1" covered="0" /> | ||
<counter type="COMPLEXITY" missed="1" covered="0" /> | ||
<counter type="METHOD" missed="1" covered="0" /> | ||
</method> | ||
<method name="getMessage" desc="(Z)Ljava/lang/String;" | ||
line="6"> | ||
<counter type="INSTRUCTION" missed="6" covered="0" /> | ||
<counter type="BRANCH" missed="2" covered="0" /> | ||
<counter type="LINE" missed="3" covered="0" /> | ||
<counter type="COMPLEXITY" missed="2" covered="0" /> | ||
<counter type="METHOD" missed="1" covered="0" /> | ||
</method> | ||
<counter type="INSTRUCTION" missed="9" covered="0" /> | ||
<counter type="BRANCH" missed="2" covered="0" /> | ||
<counter type="LINE" missed="4" covered="0" /> | ||
<counter type="COMPLEXITY" missed="3" covered="0" /> | ||
<counter type="METHOD" missed="2" covered="0" /> | ||
<counter type="CLASS" missed="1" covered="0" /> | ||
</class> | ||
<sourcefile name="HelloWorld.java"> | ||
<line nr="3" mi="3" ci="0" mb="0" cb="0" /> | ||
<line nr="6" mi="2" ci="0" mb="2" cb="0" /> | ||
<line nr="7" mi="2" ci="0" mb="0" cb="0" /> | ||
<line nr="9" mi="2" ci="0" mb="0" cb="0" /> | ||
<counter type="INSTRUCTION" missed="9" covered="0" /> | ||
<counter type="BRANCH" missed="2" covered="0" /> | ||
<counter type="LINE" missed="4" covered="0" /> | ||
<counter type="COMPLEXITY" missed="3" covered="0" /> | ||
<counter type="METHOD" missed="2" covered="0" /> | ||
<counter type="CLASS" missed="1" covered="0" /> | ||
</sourcefile> | ||
<counter type="INSTRUCTION" missed="9" covered="0" /> | ||
<counter type="BRANCH" missed="2" covered="0" /> | ||
<counter type="LINE" missed="4" covered="0" /> | ||
<counter type="COMPLEXITY" missed="3" covered="0" /> | ||
<counter type="METHOD" missed="2" covered="0" /> | ||
<counter type="CLASS" missed="1" covered="0" /> | ||
</package> | ||
<counter type="INSTRUCTION" missed="11" covered="7" /> | ||
<counter type="BRANCH" missed="3" covered="1" /> | ||
<counter type="LINE" missed="5" covered="3" /> | ||
<counter type="COMPLEXITY" missed="4" covered="2" /> | ||
<counter type="METHOD" missed="2" covered="2" /> | ||
<counter type="CLASS" missed="1" covered="1" /> | ||
</report> |