Skip to content

Commit

Permalink
Add Jacoco filter
Browse files Browse the repository at this point in the history
  • Loading branch information
exussum12 committed Aug 18, 2017
1 parent 42d707e commit 8ff0beb
Show file tree
Hide file tree
Showing 5 changed files with 214 additions and 4 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coverageChecker
Allows tools to conditionally allow standards to new code
Allows old code to use new standards

[![Build Status](https://travis-ci.org/exussum12/coverageChecker.svg?branch=master)](https://travis-ci.org/exussum12/coverageChecker)
[![Coverage Status](https://coveralls.io/repos/github/exussum12/coverageChecker/badge.svg?branch=master)](https://coveralls.io/github/exussum12/coverageChecker?branch=master)
Expand Down Expand Up @@ -32,8 +32,8 @@ First of all a diff is needed
git diff origin/master...branch > /tmp/diff.txt
or

git diff origin/master...HEAD > /tmp/diff.txt
assuming your on the branch currently
git diff origin/master... > /tmp/diff.txt
assuming your on the branch currently and all changed are checked in

or

Expand Down Expand Up @@ -75,7 +75,7 @@ exit code 0 and no output indicates success
Will fail (exit status 2) if less than 90% of the code committed is covered by a test.
This requires phpunit to be run on the branch first!

Note: This works for all clover output!
Note: This works for all clover output! so any project using clover can use this regardless of the language it was written for

## phpcs

Expand Down
79 changes: 79 additions & 0 deletions src/JacocoReport.php
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;
}
}
32 changes: 32 additions & 0 deletions tests/JacocoLoaderTest.php
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);
}
}
2 changes: 2 additions & 0 deletions tests/PhpMndTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

class PhpMndTest extends TestCase
{
private $mnd;

public function setUp()
{
$file = __DIR__ . "/fixtures/phpmnd.txt";
Expand Down
97 changes: 97 additions & 0 deletions tests/fixtures/jacoco.xml
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="&lt;init&gt;" 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="&lt;init&gt;" 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>

0 comments on commit 8ff0beb

Please sign in to comment.