Laravel version update

Laravel version update
This commit is contained in:
Manish Verma
2018-08-06 18:48:58 +05:30
parent d143048413
commit 126fbb0255
13678 changed files with 1031482 additions and 778530 deletions

View File

@@ -1,30 +0,0 @@
<?php
/*
* This file is part of the PHP_CodeCoverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Tests for the PHP_CodeCoverage_Util class.
*
* @since Class available since Release 1.0.0
*/
class PHP_CodeCoverage_UtilTest extends PHPUnit_Framework_TestCase
{
/**
* @covers PHP_CodeCoverage_Util::percent
*/
public function testPercent()
{
$this->assertEquals(100, PHP_CodeCoverage_Util::percent(100, 0));
$this->assertEquals(100, PHP_CodeCoverage_Util::percent(100, 100));
$this->assertEquals(
'100.00%',
PHP_CodeCoverage_Util::percent(100, 100, true)
);
}
}

View File

@@ -1,6 +1,6 @@
<?php
/*
* This file is part of the PHP_CodeCoverage package.
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
@@ -8,18 +8,29 @@
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeCoverage;
use SebastianBergmann\CodeCoverage\Driver\Xdebug;
/**
* Abstract base class for test case classes.
*
* @since Class available since Release 1.0.0
*/
abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
abstract class TestCase extends \PHPUnit\Framework\TestCase
{
protected static $TEST_TMP_PATH;
public static function setUpBeforeClass()
{
self::$TEST_TMP_PATH = TEST_FILES_PATH . 'tmp';
}
protected function getXdebugDataForBankAccount()
{
return array(
array(
TEST_FILES_PATH . 'BankAccount.php' => array(
return [
[
TEST_FILES_PATH . 'BankAccount.php' => [
8 => 1,
9 => -2,
13 => -1,
@@ -33,26 +44,26 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
29 => -1,
31 => -1,
32 => -2
)
),
array(
TEST_FILES_PATH . 'BankAccount.php' => array(
]
],
[
TEST_FILES_PATH . 'BankAccount.php' => [
8 => 1,
13 => 1,
16 => 1,
29 => 1,
)
),
array(
TEST_FILES_PATH . 'BankAccount.php' => array(
]
],
[
TEST_FILES_PATH . 'BankAccount.php' => [
8 => 1,
13 => 1,
16 => 1,
22 => 1,
)
),
array(
TEST_FILES_PATH . 'BankAccount.php' => array(
]
],
[
TEST_FILES_PATH . 'BankAccount.php' => [
8 => 1,
13 => 1,
14 => 1,
@@ -62,16 +73,18 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
24 => 1,
29 => 1,
31 => 1,
)
)
);
]
]
];
}
protected function getCoverageForBankAccount()
{
$data = $this->getXdebugDataForBankAccount();
require_once TEST_FILES_PATH . '/BankAccountTest.php';
$stub = $this->createMock(Xdebug::class);
$stub = $this->getMock('PHP_CodeCoverage_Driver_Xdebug');
$stub->expects($this->any())
->method('stop')
->will($this->onConsecutiveCalls(
@@ -81,49 +94,52 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
$data[3]
));
$coverage = new PHP_CodeCoverage($stub, new PHP_CodeCoverage_Filter);
$filter = new Filter;
$filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
$coverage = new CodeCoverage($stub, $filter);
$coverage->start(
new BankAccountTest('testBalanceIsInitiallyZero'),
new \BankAccountTest('testBalanceIsInitiallyZero'),
true
);
$coverage->stop(
true,
array(TEST_FILES_PATH . 'BankAccount.php' => range(6, 9))
[TEST_FILES_PATH . 'BankAccount.php' => range(6, 9)]
);
$coverage->start(
new BankAccountTest('testBalanceCannotBecomeNegative')
new \BankAccountTest('testBalanceCannotBecomeNegative')
);
$coverage->stop(
true,
array(TEST_FILES_PATH . 'BankAccount.php' => range(27, 32))
[TEST_FILES_PATH . 'BankAccount.php' => range(27, 32)]
);
$coverage->start(
new BankAccountTest('testBalanceCannotBecomeNegative2')
new \BankAccountTest('testBalanceCannotBecomeNegative2')
);
$coverage->stop(
true,
array(TEST_FILES_PATH . 'BankAccount.php' => range(20, 25))
[TEST_FILES_PATH . 'BankAccount.php' => range(20, 25)]
);
$coverage->start(
new BankAccountTest('testDepositWithdrawMoney')
new \BankAccountTest('testDepositWithdrawMoney')
);
$coverage->stop(
true,
array(
[
TEST_FILES_PATH . 'BankAccount.php' => array_merge(
range(6, 9),
range(20, 25),
range(27, 32)
)
)
]
);
return $coverage;
@@ -133,7 +149,8 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
{
$data = $this->getXdebugDataForBankAccount();
$stub = $this->getMock('PHP_CodeCoverage_Driver_Xdebug');
$stub = $this->createMock(Xdebug::class);
$stub->expects($this->any())
->method('stop')
->will($this->onConsecutiveCalls(
@@ -141,25 +158,28 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
$data[1]
));
$coverage = new PHP_CodeCoverage($stub, new PHP_CodeCoverage_Filter);
$filter = new Filter;
$filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
$coverage = new CodeCoverage($stub, $filter);
$coverage->start(
new BankAccountTest('testBalanceIsInitiallyZero'),
new \BankAccountTest('testBalanceIsInitiallyZero'),
true
);
$coverage->stop(
true,
array(TEST_FILES_PATH . 'BankAccount.php' => range(6, 9))
[TEST_FILES_PATH . 'BankAccount.php' => range(6, 9)]
);
$coverage->start(
new BankAccountTest('testBalanceCannotBecomeNegative')
new \BankAccountTest('testBalanceCannotBecomeNegative')
);
$coverage->stop(
true,
array(TEST_FILES_PATH . 'BankAccount.php' => range(27, 32))
[TEST_FILES_PATH . 'BankAccount.php' => range(27, 32)]
);
return $coverage;
@@ -169,7 +189,8 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
{
$data = $this->getXdebugDataForBankAccount();
$stub = $this->getMock('PHP_CodeCoverage_Driver_Xdebug');
$stub = $this->createMock(Xdebug::class);
$stub->expects($this->any())
->method('stop')
->will($this->onConsecutiveCalls(
@@ -177,30 +198,33 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
$data[3]
));
$coverage = new PHP_CodeCoverage($stub, new PHP_CodeCoverage_Filter);
$filter = new Filter;
$filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
$coverage = new CodeCoverage($stub, $filter);
$coverage->start(
new BankAccountTest('testBalanceCannotBecomeNegative2')
new \BankAccountTest('testBalanceCannotBecomeNegative2')
);
$coverage->stop(
true,
array(TEST_FILES_PATH . 'BankAccount.php' => range(20, 25))
[TEST_FILES_PATH . 'BankAccount.php' => range(20, 25)]
);
$coverage->start(
new BankAccountTest('testDepositWithdrawMoney')
new \BankAccountTest('testDepositWithdrawMoney')
);
$coverage->stop(
true,
array(
[
TEST_FILES_PATH . 'BankAccount.php' => array_merge(
range(6, 9),
range(20, 25),
range(27, 32)
)
)
]
);
return $coverage;
@@ -208,43 +232,46 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
protected function getExpectedDataArrayForBankAccount()
{
return array(
TEST_FILES_PATH . 'BankAccount.php' => array(
8 => array(
return [
TEST_FILES_PATH . 'BankAccount.php' => [
8 => [
0 => 'BankAccountTest::testBalanceIsInitiallyZero',
1 => 'BankAccountTest::testDepositWithdrawMoney'
),
],
9 => null,
13 => array(),
14 => array(),
15 => array(),
16 => array(),
18 => array(),
22 => array(
13 => [],
14 => [],
15 => [],
16 => [],
18 => [],
22 => [
0 => 'BankAccountTest::testBalanceCannotBecomeNegative2',
1 => 'BankAccountTest::testDepositWithdrawMoney'
),
24 => array(
],
24 => [
0 => 'BankAccountTest::testDepositWithdrawMoney',
),
],
25 => null,
29 => array(
29 => [
0 => 'BankAccountTest::testBalanceCannotBecomeNegative',
1 => 'BankAccountTest::testDepositWithdrawMoney'
),
31 => array(
],
31 => [
0 => 'BankAccountTest::testDepositWithdrawMoney'
),
],
32 => null
)
);
]
];
}
protected function getCoverageForFileWithIgnoredLines()
{
$coverage = new PHP_CodeCoverage(
$filter = new Filter;
$filter->addFileToWhitelist(TEST_FILES_PATH . 'source_with_ignore.php');
$coverage = new CodeCoverage(
$this->setUpXdebugStubForFileWithIgnoredLines(),
new PHP_CodeCoverage_Filter
$filter
);
$coverage->start('FileWithIgnoredLines', true);
@@ -255,18 +282,19 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
protected function setUpXdebugStubForFileWithIgnoredLines()
{
$stub = $this->getMock('PHP_CodeCoverage_Driver_Xdebug');
$stub = $this->createMock(Xdebug::class);
$stub->expects($this->any())
->method('stop')
->will($this->returnValue(
array(
TEST_FILES_PATH . 'source_with_ignore.php' => array(
[
TEST_FILES_PATH . 'source_with_ignore.php' => [
2 => 1,
4 => -1,
6 => -1,
7 => 1
)
)
]
]
));
return $stub;
@@ -274,9 +302,12 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
protected function getCoverageForClassWithAnonymousFunction()
{
$coverage = new PHP_CodeCoverage(
$filter = new Filter;
$filter->addFileToWhitelist(TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php');
$coverage = new CodeCoverage(
$this->setUpXdebugStubForClassWithAnonymousFunction(),
new PHP_CodeCoverage_Filter
$filter
);
$coverage->start('ClassWithAnonymousFunction', true);
@@ -287,12 +318,13 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
protected function setUpXdebugStubForClassWithAnonymousFunction()
{
$stub = $this->getMock('PHP_CodeCoverage_Driver_Xdebug');
$stub = $this->createMock(Xdebug::class);
$stub->expects($this->any())
->method('stop')
->will($this->returnValue(
array(
TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php' => array(
[
TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php' => [
7 => 1,
9 => 1,
10 => -1,
@@ -302,8 +334,8 @@ abstract class PHP_CodeCoverage_TestCase extends PHPUnit_Framework_TestCase
14 => 1,
17 => 1,
18 => 1
)
)
]
]
));
return $stub;

View File

@@ -3,20 +3,20 @@
<project timestamp="%i" name="BankAccount">
<file name="%s/BankAccount.php">
<class name="BankAccount" namespace="global">
<metrics methods="4" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="5" elements="14" coveredelements="8"/>
<metrics complexity="5" methods="4" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="5" elements="14" coveredelements="8"/>
</class>
<line num="6" type="method" name="getBalance" crap="1" count="2"/>
<line num="6" type="method" name="getBalance" visibility="public" complexity="1" crap="1" count="2"/>
<line num="8" type="stmt" count="2"/>
<line num="11" type="method" name="setBalance" crap="6" count="0"/>
<line num="11" type="method" name="setBalance" visibility="protected" complexity="2" crap="6" count="0"/>
<line num="13" type="stmt" count="0"/>
<line num="14" type="stmt" count="0"/>
<line num="15" type="stmt" count="0"/>
<line num="16" type="stmt" count="0"/>
<line num="18" type="stmt" count="0"/>
<line num="20" type="method" name="depositMoney" crap="1" count="2"/>
<line num="20" type="method" name="depositMoney" visibility="public" complexity="1" crap="1" count="2"/>
<line num="22" type="stmt" count="2"/>
<line num="24" type="stmt" count="1"/>
<line num="27" type="method" name="withdrawMoney" crap="1" count="2"/>
<line num="27" type="method" name="withdrawMoney" visibility="public" complexity="1" crap="1" count="2"/>
<line num="29" type="stmt" count="2"/>
<line num="31" type="stmt" count="1"/>
<metrics loc="33" ncloc="33" classes="1" methods="4" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="5" elements="14" coveredelements="8"/>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<crap_result>
<project>BankAccount</project>
<timestamp>%s</timestamp>
<stats>
<name>Method Crap Stats</name>
<methodCount>4</methodCount>
<crapMethodCount>0</crapMethodCount>
<crapLoad>0</crapLoad>
<totalCrap>9</totalCrap>
<crapMethodPercent>0</crapMethodPercent>
</stats>
<methods>
<method>
<package>global</package>
<className>BankAccount</className>
<methodName>getBalance</methodName>
<methodSignature>getBalance()</methodSignature>
<fullMethod>getBalance()</fullMethod>
<crap>1</crap>
<complexity>1</complexity>
<coverage>100</coverage>
<crapLoad>0</crapLoad>
</method>
<method>
<package>global</package>
<className>BankAccount</className>
<methodName>setBalance</methodName>
<methodSignature>setBalance($balance)</methodSignature>
<fullMethod>setBalance($balance)</fullMethod>
<crap>6</crap>
<complexity>2</complexity>
<coverage>0</coverage>
<crapLoad>0</crapLoad>
</method>
<method>
<package>global</package>
<className>BankAccount</className>
<methodName>depositMoney</methodName>
<methodSignature>depositMoney($balance)</methodSignature>
<fullMethod>depositMoney($balance)</fullMethod>
<crap>1</crap>
<complexity>1</complexity>
<coverage>100</coverage>
<crapLoad>0</crapLoad>
</method>
<method>
<package>global</package>
<className>BankAccount</className>
<methodName>withdrawMoney</methodName>
<methodSignature>withdrawMoney($balance)</methodSignature>
<fullMethod>withdrawMoney($balance)</fullMethod>
<crap>1</crap>
<complexity>1</complexity>
<coverage>100</coverage>
<crapLoad>0</crapLoad>
</method>
</methods>
</crap_result>

View File

@@ -0,0 +1,12 @@
Code Coverage Report:
%s
Summary:
Classes: 0.00% (0/1)
Methods: 75.00% (3/4)
Lines: 50.00% (5/10)
BankAccount
Methods: 75.00% ( 3/ 4) Lines: 50.00% ( 5/ 10)

View File

@@ -1,7 +1,9 @@
<?php
require_once 'BankAccount.php';
class BankAccountTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class BankAccountTest extends TestCase
{
protected $ba;

View File

@@ -1,5 +1,7 @@
<?php
class CoverageClassExtendedTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageClassExtendedTest extends TestCase
{
/**
* @covers CoveredClass<extended>

View File

@@ -1,5 +1,7 @@
<?php
class CoverageClassTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageClassTest extends TestCase
{
/**
* @covers CoveredClass

View File

@@ -1,5 +1,7 @@
<?php
class CoverageFunctionParenthesesTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageFunctionParenthesesTest extends TestCase
{
/**
* @covers ::globalFunction()

View File

@@ -1,5 +1,7 @@
<?php
class CoverageFunctionParenthesesWhitespaceTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageFunctionParenthesesWhitespaceTest extends TestCase
{
/**
* @covers ::globalFunction ( )

View File

@@ -1,5 +1,7 @@
<?php
class CoverageFunctionTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageFunctionTest extends TestCase
{
/**
* @covers ::globalFunction

View File

@@ -1,6 +1,7 @@
<?php
use PHPUnit\Framework\TestCase;
class CoverageMethodOneLineAnnotationTest extends PHPUnit_Framework_TestCase
class CoverageMethodOneLineAnnotationTest extends TestCase
{
/** @covers CoveredClass::publicMethod */
public function testSomething()

View File

@@ -1,5 +1,7 @@
<?php
class CoverageMethodParenthesesTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageMethodParenthesesTest extends TestCase
{
/**
* @covers CoveredClass::publicMethod()

View File

@@ -1,5 +1,7 @@
<?php
class CoverageMethodParenthesesWhitespaceTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageMethodParenthesesWhitespaceTest extends TestCase
{
/**
* @covers CoveredClass::publicMethod ( )

View File

@@ -1,5 +1,7 @@
<?php
class CoverageMethodTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageMethodTest extends TestCase
{
/**
* @covers CoveredClass::publicMethod

View File

@@ -1,5 +1,7 @@
<?php
class CoverageNoneTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageNoneTest extends TestCase
{
public function testSomething()
{

View File

@@ -1,5 +1,7 @@
<?php
class CoverageNotPrivateTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageNotPrivateTest extends TestCase
{
/**
* @covers CoveredClass::<!private>

View File

@@ -1,5 +1,7 @@
<?php
class CoverageNotProtectedTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageNotProtectedTest extends TestCase
{
/**
* @covers CoveredClass::<!protected>

View File

@@ -1,5 +1,7 @@
<?php
class CoverageNotPublicTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageNotPublicTest extends TestCase
{
/**
* @covers CoveredClass::<!public>

View File

@@ -1,5 +1,7 @@
<?php
class CoverageNothingTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageNothingTest extends TestCase
{
/**
* @covers CoveredClass::publicMethod

View File

@@ -1,5 +1,7 @@
<?php
class CoveragePrivateTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoveragePrivateTest extends TestCase
{
/**
* @covers CoveredClass::<private>

View File

@@ -1,5 +1,7 @@
<?php
class CoverageProtectedTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoverageProtectedTest extends TestCase
{
/**
* @covers CoveredClass::<protected>

View File

@@ -1,5 +1,7 @@
<?php
class CoveragePublicTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class CoveragePublicTest extends TestCase
{
/**
* @covers CoveredClass::<public>

View File

@@ -1,5 +1,4 @@
<?php
/**
* @coversDefaultClass \NamespaceOne
* @coversDefaultClass \AnotherDefault\Name\Space\Does\Not\Work

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoverageClassExtendedTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoverageClassExtendedTest extends TestCase
{
/**
* @covers Foo\CoveredClass<extended>

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoverageClassTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoverageClassTest extends TestCase
{
/**
* @covers Foo\CoveredClass

View File

@@ -1,8 +1,10 @@
<?php
use PHPUnit\Framework\TestCase;
/**
* @coversDefaultClass \Foo\CoveredClass
*/
class NamespaceCoverageCoversClassPublicTest extends PHPUnit_Framework_TestCase
class NamespaceCoverageCoversClassPublicTest extends TestCase
{
/**
* @covers ::publicMethod

View File

@@ -1,8 +1,10 @@
<?php
use PHPUnit\Framework\TestCase;
/**
* @coversDefaultClass \Foo\CoveredClass
*/
class NamespaceCoverageCoversClassTest extends PHPUnit_Framework_TestCase
class NamespaceCoverageCoversClassTest extends TestCase
{
/**
* @covers ::privateMethod

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoverageMethodTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoverageMethodTest extends TestCase
{
/**
* @covers Foo\CoveredClass::publicMethod

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoverageNotPrivateTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoverageNotPrivateTest extends TestCase
{
/**
* @covers Foo\CoveredClass::<!private>

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoverageNotProtectedTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoverageNotProtectedTest extends TestCase
{
/**
* @covers Foo\CoveredClass::<!protected>

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoverageNotPublicTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoverageNotPublicTest extends TestCase
{
/**
* @covers Foo\CoveredClass::<!public>

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoveragePrivateTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoveragePrivateTest extends TestCase
{
/**
* @covers Foo\CoveredClass::<private>

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoverageProtectedTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoverageProtectedTest extends TestCase
{
/**
* @covers Foo\CoveredClass::<protected>

View File

@@ -1,5 +1,7 @@
<?php
class NamespaceCoveragePublicTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NamespaceCoveragePublicTest extends TestCase
{
/**
* @covers Foo\CoveredClass::<public>

View File

@@ -1,5 +1,7 @@
<?php
class NotExistingCoveredElementTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class NotExistingCoveredElementTest extends TestCase
{
/**
* @covers NotExistingClass

View File

@@ -0,0 +1,245 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Code Coverage for %s/BankAccount.php</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li><a href="index.html">%s</a></li>
<li class="active">BankAccount.php</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<td>&nbsp;</td>
<td colspan="10"><div align="center"><strong>Code Coverage</strong></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
</tr>
</thead>
<tbody>
<tr>
<td class="danger">Total</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="75.00" aria-valuemin="0" aria-valuemax="100" style="width: 75.00%">
<span class="sr-only">75.00% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">75.00%</div></td>
<td class="warning small"><div align="right">3&nbsp;/&nbsp;4</div></td>
<td class="warning small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">5&nbsp;/&nbsp;10</div></td>
</tr>
<tr>
<td class="danger">BankAccount</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="75.00" aria-valuemin="0" aria-valuemax="100" style="width: 75.00%">
<span class="sr-only">75.00% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">75.00%</div></td>
<td class="warning small"><div align="right">3&nbsp;/&nbsp;4</div></td>
<td class="warning small">8.12</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">5&nbsp;/&nbsp;10</div></td>
</tr>
<tr>
<td class="success" colspan="4">&nbsp;<a href="#6"><abbr title="getBalance()">getBalance</abbr></a></td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
<td class="success small">1</td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
</tr>
<tr>
<td class="danger" colspan="4">&nbsp;<a href="#11"><abbr title="setBalance($balance)">setBalance</abbr></a></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
<td class="danger small">6</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;5</div></td>
</tr>
<tr>
<td class="success" colspan="4">&nbsp;<a href="#20"><abbr title="depositMoney($balance)">depositMoney</abbr></a></td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
<td class="success small">1</td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">2&nbsp;/&nbsp;2</div></td>
</tr>
<tr>
<td class="success" colspan="4">&nbsp;<a href="#27"><abbr title="withdrawMoney($balance)">withdrawMoney</abbr></a></td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
<td class="success small">1</td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">2&nbsp;/&nbsp;2</div></td>
</tr>
</tbody>
</table>
<table id="code" class="table table-borderless table-condensed">
<tbody>
<tr><td><div align="right"><a name="1"></a><a href="#1">1</a></div></td><td class="codeLine"><span class="default">&lt;?php</span></td></tr>
<tr><td><div align="right"><a name="2"></a><a href="#2">2</a></div></td><td class="codeLine"><span class="keyword">class</span><span class="default">&nbsp;</span><span class="default">BankAccount</span></td></tr>
<tr><td><div align="right"><a name="3"></a><a href="#3">3</a></div></td><td class="codeLine"><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="4"></a><a href="#4">4</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span class="default">&nbsp;</span><span class="default">$balance</span><span class="default">&nbsp;</span><span class="keyword">=</span><span class="default">&nbsp;</span><span class="default">0</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="5"></a><a href="#5">5</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="6"></a><a href="#6">6</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">getBalance</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="7"></a><a href="#7">7</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="2 tests cover line 8" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testBalanceIsInitiallyZero&lt;/li&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testDepositWithdrawMoney&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="8"></a><a href="#8">8</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span class="default">&nbsp;</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">balance</span><span class="keyword">;</span></td></tr>
<tr class="warning"><td><div align="right"><a name="9"></a><a href="#9">9</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="10"></a><a href="#10">10</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="11"></a><a href="#11">11</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">setBalance</span><span class="keyword">(</span><span class="default">$balance</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="12"></a><a href="#12">12</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="danger"><td><div align="right"><a name="13"></a><a href="#13">13</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span class="default">&nbsp;</span><span class="keyword">(</span><span class="default">$balance</span><span class="default">&nbsp;</span><span class="default">&gt;=</span><span class="default">&nbsp;</span><span class="default">0</span><span class="keyword">)</span><span class="default">&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="danger"><td><div align="right"><a name="14"></a><a href="#14">14</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">balance</span><span class="default">&nbsp;</span><span class="keyword">=</span><span class="default">&nbsp;</span><span class="default">$balance</span><span class="keyword">;</span></td></tr>
<tr class="danger"><td><div align="right"><a name="15"></a><a href="#15">15</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span><span class="default">&nbsp;</span><span class="keyword">else</span><span class="default">&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="danger"><td><div align="right"><a name="16"></a><a href="#16">16</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">throw</span><span class="default">&nbsp;</span><span class="keyword">new</span><span class="default">&nbsp;</span><span class="default">RuntimeException</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="17"></a><a href="#17">17</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr class="danger"><td><div align="right"><a name="18"></a><a href="#18">18</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="19"></a><a href="#19">19</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="20"></a><a href="#20">20</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">depositMoney</span><span class="keyword">(</span><span class="default">$balance</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="21"></a><a href="#21">21</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="2 tests cover line 22" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testBalanceCannotBecomeNegative2&lt;/li&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testDepositWithdrawMoney&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="22"></a><a href="#22">22</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">setBalance</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">getBalance</span><span class="keyword">(</span><span class="keyword">)</span><span class="default">&nbsp;</span><span class="keyword">+</span><span class="default">&nbsp;</span><span class="default">$balance</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="23"></a><a href="#23">23</a></div></td><td class="codeLine"></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 24" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testDepositWithdrawMoney&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="24"></a><a href="#24">24</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span class="default">&nbsp;</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">getBalance</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
<tr class="warning"><td><div align="right"><a name="25"></a><a href="#25">25</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="26"></a><a href="#26">26</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="27"></a><a href="#27">27</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">withdrawMoney</span><span class="keyword">(</span><span class="default">$balance</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="28"></a><a href="#28">28</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="2 tests cover line 29" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testBalanceCannotBecomeNegative&lt;/li&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testDepositWithdrawMoney&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="29"></a><a href="#29">29</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">setBalance</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">getBalance</span><span class="keyword">(</span><span class="keyword">)</span><span class="default">&nbsp;</span><span class="keyword">-</span><span class="default">&nbsp;</span><span class="default">$balance</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="30"></a><a href="#30">30</a></div></td><td class="codeLine"></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 31" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;BankAccountTest::testDepositWithdrawMoney&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="31"></a><a href="#31">31</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span class="default">&nbsp;</span><span class="default">$this</span><span class="default">-&gt;</span><span class="default">getBalance</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
<tr class="warning"><td><div align="right"><a name="32"></a><a href="#32">32</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="33"></a><a href="#33">33</a></div></td><td class="codeLine"><span class="keyword">}</span></td></tr>
</tbody>
</table>
<footer>
<hr/>
<h4>Legend</h4>
<p>
<span class="success"><strong>Executed</strong></span>
<span class="danger"><strong>Not Executed</strong></span>
<span class="warning"><strong>Dead Code</strong></span>
</p>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
<a title="Back to the top" id="toplink" href="#"><span class="glyphicon glyphicon-arrow-up"></span></a>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
<script src=".js/file.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,290 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard for %s</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/nv.d3.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li><a href="index.html">%s</a></li>
<li class="active">(Dashboard)</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Classes</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Coverage Distribution</h3>
<div id="classCoverageDistribution" style="height: 300px;">
<svg></svg>
</div>
</div>
<div class="col-md-6">
<h3>Complexity</h3>
<div id="classComplexity" style="height: 300px;">
<svg></svg>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Insufficient Coverage</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Class</th>
<th class="text-right">Coverage</th>
</tr>
</thead>
<tbody>
<tr><td><a href="BankAccount.php.html#2">BankAccount</a></td><td class="text-right">50%</td></tr>
</tbody>
</table>
</div>
</div>
<div class="col-md-6">
<h3>Project Risks</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Class</th>
<th class="text-right"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></th>
</tr>
</thead>
<tbody>
<tr><td><a href="BankAccount.php.html#2">BankAccount</a></td><td class="text-right">8</td></tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Methods</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Coverage Distribution</h3>
<div id="methodCoverageDistribution" style="height: 300px;">
<svg></svg>
</div>
</div>
<div class="col-md-6">
<h3>Complexity</h3>
<div id="methodComplexity" style="height: 300px;">
<svg></svg>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Insufficient Coverage</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Method</th>
<th class="text-right">Coverage</th>
</tr>
</thead>
<tbody>
<tr><td><a href="BankAccount.php.html#11"><abbr title="BankAccount::setBalance">setBalance</abbr></a></td><td class="text-right">0%</td></tr>
</tbody>
</table>
</div>
</div>
<div class="col-md-6">
<h3>Project Risks</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Method</th>
<th class="text-right"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></th>
</tr>
</thead>
<tbody>
<tr><td><a href="BankAccount.php.html#11"><abbr title="BankAccount::setBalance">setBalance</abbr></a></td><td class="text-right">6</td></tr>
</tbody>
</table>
</div>
</div>
</div>
<footer>
<hr/>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
<script src=".js/d3.min.js" type="text/javascript"></script>
<script src=".js/nv.d3.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
nv.addGraph(function() {
var chart = nv.models.multiBarChart();
chart.tooltips(false)
.showControls(false)
.showLegend(false)
.reduceXTicks(false)
.staggerLabels(true)
.yAxis.tickFormat(d3.format('d'));
d3.select('#classCoverageDistribution svg')
.datum(getCoverageDistributionData([0,0,0,0,0,0,1,0,0,0,0,0], "Class Coverage"))
.transition().duration(500).call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
nv.addGraph(function() {
var chart = nv.models.multiBarChart();
chart.tooltips(false)
.showControls(false)
.showLegend(false)
.reduceXTicks(false)
.staggerLabels(true)
.yAxis.tickFormat(d3.format('d'));
d3.select('#methodCoverageDistribution svg')
.datum(getCoverageDistributionData([1,0,0,0,0,0,0,0,0,0,0,3], "Method Coverage"))
.transition().duration(500).call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
function getCoverageDistributionData(data, label) {
var labels = [
'0%',
'0-10%',
'10-20%',
'20-30%',
'30-40%',
'40-50%',
'50-60%',
'60-70%',
'70-80%',
'80-90%',
'90-100%',
'100%'
];
var values = [];
$.each(labels, function(key) {
values.push({x: labels[key], y: data[key]});
});
return [
{
key: label,
values: values,
color: "#4572A7"
}
];
}
nv.addGraph(function() {
var chart = nv.models.scatterChart()
.showDistX(true)
.showDistY(true)
.showLegend(false)
.forceX([0, 100]);
chart.tooltipContent(function(graph) {
return '<p>' + graph.point.class + '</p>';
});
chart.xAxis.axisLabel('Code Coverage (in percent)');
chart.yAxis.axisLabel('Cyclomatic Complexity');
d3.select('#classComplexity svg')
.datum(getComplexityData([[50,5,"<a href=\"BankAccount.php.html#2\">BankAccount<\/a>"]], 'Class Complexity'))
.transition()
.duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
nv.addGraph(function() {
var chart = nv.models.scatterChart()
.showDistX(true)
.showDistY(true)
.showLegend(false)
.forceX([0, 100]);
chart.tooltipContent(function(graph) {
return '<p>' + graph.point.class + '</p>';
});
chart.xAxis.axisLabel('Code Coverage (in percent)');
chart.yAxis.axisLabel('Method Complexity');
d3.select('#methodComplexity svg')
.datum(getComplexityData([[100,1,"<a href=\"BankAccount.php.html#6\">BankAccount::getBalance<\/a>"],[0,2,"<a href=\"BankAccount.php.html#11\">BankAccount::setBalance<\/a>"],[100,1,"<a href=\"BankAccount.php.html#20\">BankAccount::depositMoney<\/a>"],[100,1,"<a href=\"BankAccount.php.html#27\">BankAccount::withdrawMoney<\/a>"]], 'Method Complexity'))
.transition()
.duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
function getComplexityData(data, label) {
var values = [];
$.each(data, function(key) {
var value = Math.round(data[key][0]*100) / 100;
values.push({
x: value,
y: data[key][1],
class: data[key][2],
size: 0.05,
shape: 'diamond'
});
});
return [
{
key: label,
values: values,
color: "#4572A7"
}
];
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Code Coverage for %s</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li class="active">%s</li>
<li>(<a href="dashboard.html">Dashboard</a>)</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<td>&nbsp;</td>
<td colspan="9"><div align="center"><strong>Code Coverage</strong></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
<td colspan="3"><div align="center"><strong>Functions and Methods</strong></div></td>
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
</tr>
</thead>
<tbody>
<tr>
<td class="danger">Total</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">5&nbsp;/&nbsp;10</div></td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="75.00" aria-valuemin="0" aria-valuemax="100" style="width: 75.00%">
<span class="sr-only">75.00% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">75.00%</div></td>
<td class="warning small"><div align="right">3&nbsp;/&nbsp;4</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
</tr>
<tr>
<td class="danger"><span class="glyphicon glyphicon-file"></span> <a href="BankAccount.php.html">BankAccount.php</a></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">5&nbsp;/&nbsp;10</div></td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="75.00" aria-valuemin="0" aria-valuemax="100" style="width: 75.00%">
<span class="sr-only">75.00% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">75.00%</div></td>
<td class="warning small"><div align="right">3&nbsp;/&nbsp;4</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
</tr>
</tbody>
</table>
<footer>
<hr/>
<h4>Legend</h4>
<p>
<span class="danger"><strong>Low</strong>: 0% to 50%</span>
<span class="warning"><strong>Medium</strong>: 50% to 90%</span>
<span class="success"><strong>High</strong>: 90% to 100%</span>
</p>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,288 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard for %s</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/nv.d3.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li><a href="index.html">%s</a></li>
<li class="active">(Dashboard)</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Classes</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Coverage Distribution</h3>
<div id="classCoverageDistribution" style="height: 300px;">
<svg></svg>
</div>
</div>
<div class="col-md-6">
<h3>Complexity</h3>
<div id="classComplexity" style="height: 300px;">
<svg></svg>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Insufficient Coverage</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Class</th>
<th class="text-right">Coverage</th>
</tr>
</thead>
<tbody>
<tr><td><a href="source_with_class_and_anonymous_function.php.html#3">CoveredClassWithAnonymousFunctionInStaticMethod</a></td><td class="text-right">87%</td></tr>
</tbody>
</table>
</div>
</div>
<div class="col-md-6">
<h3>Project Risks</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Class</th>
<th class="text-right"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Methods</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Coverage Distribution</h3>
<div id="methodCoverageDistribution" style="height: 300px;">
<svg></svg>
</div>
</div>
<div class="col-md-6">
<h3>Complexity</h3>
<div id="methodComplexity" style="height: 300px;">
<svg></svg>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Insufficient Coverage</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Method</th>
<th class="text-right">Coverage</th>
</tr>
</thead>
<tbody>
<tr><td><a href="source_with_class_and_anonymous_function.php.html#5"><abbr title="CoveredClassWithAnonymousFunctionInStaticMethod::runAnonymous">runAnonymous</abbr></a></td><td class="text-right">66%</td></tr>
</tbody>
</table>
</div>
</div>
<div class="col-md-6">
<h3>Project Risks</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Method</th>
<th class="text-right"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<footer>
<hr/>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
<script src=".js/d3.min.js" type="text/javascript"></script>
<script src=".js/nv.d3.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
nv.addGraph(function() {
var chart = nv.models.multiBarChart();
chart.tooltips(false)
.showControls(false)
.showLegend(false)
.reduceXTicks(false)
.staggerLabels(true)
.yAxis.tickFormat(d3.format('d'));
d3.select('#classCoverageDistribution svg')
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,0,0,1,0,0], "Class Coverage"))
.transition().duration(500).call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
nv.addGraph(function() {
var chart = nv.models.multiBarChart();
chart.tooltips(false)
.showControls(false)
.showLegend(false)
.reduceXTicks(false)
.staggerLabels(true)
.yAxis.tickFormat(d3.format('d'));
d3.select('#methodCoverageDistribution svg')
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,1,0,0,0,1], "Method Coverage"))
.transition().duration(500).call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
function getCoverageDistributionData(data, label) {
var labels = [
'0%',
'0-10%',
'10-20%',
'20-30%',
'30-40%',
'40-50%',
'50-60%',
'60-70%',
'70-80%',
'80-90%',
'90-100%',
'100%'
];
var values = [];
$.each(labels, function(key) {
values.push({x: labels[key], y: data[key]});
});
return [
{
key: label,
values: values,
color: "#4572A7"
}
];
}
nv.addGraph(function() {
var chart = nv.models.scatterChart()
.showDistX(true)
.showDistY(true)
.showLegend(false)
.forceX([0, 100]);
chart.tooltipContent(function(graph) {
return '<p>' + graph.point.class + '</p>';
});
chart.xAxis.axisLabel('Code Coverage (in percent)');
chart.yAxis.axisLabel('Cyclomatic Complexity');
d3.select('#classComplexity svg')
.datum(getComplexityData([[87.5,2,"<a href=\"source_with_class_and_anonymous_function.php.html#3\">CoveredClassWithAnonymousFunctionInStaticMethod<\/a>"]], 'Class Complexity'))
.transition()
.duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
nv.addGraph(function() {
var chart = nv.models.scatterChart()
.showDistX(true)
.showDistY(true)
.showLegend(false)
.forceX([0, 100]);
chart.tooltipContent(function(graph) {
return '<p>' + graph.point.class + '</p>';
});
chart.xAxis.axisLabel('Code Coverage (in percent)');
chart.yAxis.axisLabel('Method Complexity');
d3.select('#methodComplexity svg')
.datum(getComplexityData([[66.666666666667,1,"<a href=\"source_with_class_and_anonymous_function.php.html#5\">CoveredClassWithAnonymousFunctionInStaticMethod::runAnonymous<\/a>"],[100,1,"<a href=\"source_with_class_and_anonymous_function.php.html#11\">CoveredClassWithAnonymousFunctionInStaticMethod::anonymousFunction:11#41<\/a>"]], 'Method Complexity'))
.transition()
.duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
function getComplexityData(data, label) {
var values = [];
$.each(data, function(key) {
var value = Math.round(data[key][0]*100) / 100;
values.push({
x: value,
y: data[key][1],
class: data[key][2],
size: 0.05,
shape: 'diamond'
});
});
return [
{
key: label,
values: values,
color: "#4572A7"
}
];
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Code Coverage for %s</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li class="active">%s</li>
<li>(<a href="dashboard.html">Dashboard</a>)</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<td>&nbsp;</td>
<td colspan="9"><div align="center"><strong>Code Coverage</strong></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
<td colspan="3"><div align="center"><strong>Functions and Methods</strong></div></td>
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
</tr>
</thead>
<tbody>
<tr>
<td class="warning">Total</td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="87.50" aria-valuemin="0" aria-valuemax="100" style="width: 87.50%">
<span class="sr-only">87.50% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">87.50%</div></td>
<td class="warning small"><div align="right">7&nbsp;/&nbsp;8</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">1&nbsp;/&nbsp;2</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
</tr>
<tr>
<td class="warning"><span class="glyphicon glyphicon-file"></span> <a href="source_with_class_and_anonymous_function.php.html">source_with_class_and_anonymous_function.php</a></td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="87.50" aria-valuemin="0" aria-valuemax="100" style="width: 87.50%">
<span class="sr-only">87.50% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">87.50%</div></td>
<td class="warning small"><div align="right">7&nbsp;/&nbsp;8</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">1&nbsp;/&nbsp;2</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
</tr>
</tbody>
</table>
<footer>
<hr/>
<h4>Legend</h4>
<p>
<span class="danger"><strong>Low</strong>: 0% to 50%</span>
<span class="warning"><strong>Medium</strong>: 50% to 90%</span>
<span class="success"><strong>High</strong>: 90% to 100%</span>
</p>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Code Coverage for %s/source_with_class_and_anonymous_function.php</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li><a href="index.html">%s</a></li>
<li class="active">source_with_class_and_anonymous_function.php</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<td>&nbsp;</td>
<td colspan="10"><div align="center"><strong>Code Coverage</strong></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
</tr>
</thead>
<tbody>
<tr>
<td class="danger">Total</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">1&nbsp;/&nbsp;2</div></td>
<td class="danger small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="87.50" aria-valuemin="0" aria-valuemax="100" style="width: 87.50%">
<span class="sr-only">87.50% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">87.50%</div></td>
<td class="warning small"><div align="right">7&nbsp;/&nbsp;8</div></td>
</tr>
<tr>
<td class="danger">CoveredClassWithAnonymousFunctionInStaticMethod</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">1&nbsp;/&nbsp;2</div></td>
<td class="danger small">2.01</td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="87.50" aria-valuemin="0" aria-valuemax="100" style="width: 87.50%">
<span class="sr-only">87.50% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">87.50%</div></td>
<td class="warning small"><div align="right">7&nbsp;/&nbsp;8</div></td>
</tr>
<tr>
<td class="danger" colspan="4">&nbsp;<a href="#5"><abbr title="runAnonymous()">runAnonymous</abbr></a></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
<span class="sr-only">0.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">0.00%</div></td>
<td class="danger small"><div align="right">0&nbsp;/&nbsp;1</div></td>
<td class="danger small">1.04</td>
<td class="warning big"> <div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="66.67" aria-valuemin="0" aria-valuemax="100" style="width: 66.67%">
<span class="sr-only">66.67% covered (warning)</span>
</div>
</div>
</td>
<td class="warning small"><div align="right">66.67%</div></td>
<td class="warning small"><div align="right">2&nbsp;/&nbsp;3</div></td>
</tr>
<tr>
<td class="success" colspan="4">&nbsp;<a href="#11"><abbr title="anonymousFunction (&amp;$val, $key)">anonymousFunction:11#41</abbr></a></td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
<td class="success small">1</td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">2&nbsp;/&nbsp;2</div></td>
</tr>
</tbody>
</table>
<table id="code" class="table table-borderless table-condensed">
<tbody>
<tr><td><div align="right"><a name="1"></a><a href="#1">1</a></div></td><td class="codeLine"><span class="default">&lt;?php</span></td></tr>
<tr><td><div align="right"><a name="2"></a><a href="#2">2</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="3"></a><a href="#3">3</a></div></td><td class="codeLine"><span class="keyword">class</span><span class="default">&nbsp;</span><span class="default">CoveredClassWithAnonymousFunctionInStaticMethod</span></td></tr>
<tr><td><div align="right"><a name="4"></a><a href="#4">4</a></div></td><td class="codeLine"><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="5"></a><a href="#5">5</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span class="default">&nbsp;</span><span class="keyword">static</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">runAnonymous</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="6"></a><a href="#6">6</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 7" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;ClassWithAnonymousFunction&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="7"></a><a href="#7">7</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">$filter</span><span class="default">&nbsp;</span><span class="keyword">=</span><span class="default">&nbsp;</span><span class="keyword">[</span><span class="default">'abc124'</span><span class="keyword">,</span><span class="default">&nbsp;</span><span class="default">'abc123'</span><span class="keyword">,</span><span class="default">&nbsp;</span><span class="default">'123'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="8"></a><a href="#8">8</a></div></td><td class="codeLine"></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 9" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;ClassWithAnonymousFunction&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="9"></a><a href="#9">9</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">array_walk</span><span class="keyword">(</span></td></tr>
<tr class="danger"><td><div align="right"><a name="10"></a><a href="#10">10</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">$filter</span><span class="keyword">,</span></td></tr>
<tr><td><div align="right"><a name="11"></a><a href="#11">11</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="keyword">(</span><span class="keyword">&amp;</span><span class="default">$val</span><span class="keyword">,</span><span class="default">&nbsp;</span><span class="default">$key</span><span class="keyword">)</span><span class="default">&nbsp;</span><span class="keyword">{</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 12" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;ClassWithAnonymousFunction&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="12"></a><a href="#12">12</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">$val</span><span class="default">&nbsp;</span><span class="keyword">=</span><span class="default">&nbsp;</span><span class="default">preg_replace</span><span class="keyword">(</span><span class="default">'|[^0-9]|'</span><span class="keyword">,</span><span class="default">&nbsp;</span><span class="default">''</span><span class="keyword">,</span><span class="default">&nbsp;</span><span class="default">$val</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 13" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;ClassWithAnonymousFunction&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="13"></a><a href="#13">13</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 14" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;ClassWithAnonymousFunction&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="14"></a><a href="#14">14</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="15"></a><a href="#15">15</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="16"></a><a href="#16">16</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Should&nbsp;be&nbsp;covered</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 17" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;ClassWithAnonymousFunction&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="17"></a><a href="#17">17</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">$extravar</span><span class="default">&nbsp;</span><span class="keyword">=</span><span class="default">&nbsp;</span><span class="default">true</span><span class="keyword">;</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 18" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;ClassWithAnonymousFunction&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="18"></a><a href="#18">18</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="19"></a><a href="#19">19</a></div></td><td class="codeLine"><span class="keyword">}</span></td></tr>
</tbody>
</table>
<footer>
<hr/>
<h4>Legend</h4>
<p>
<span class="success"><strong>Executed</strong></span>
<span class="danger"><strong>Not Executed</strong></span>
<span class="warning"><strong>Dead Code</strong></span>
</p>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
<a title="Back to the top" id="toplink" href="#"><span class="glyphicon glyphicon-arrow-up"></span></a>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
<script src=".js/file.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,286 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard for %s</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/nv.d3.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li><a href="index.html">%s</a></li>
<li class="active">(Dashboard)</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Classes</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Coverage Distribution</h3>
<div id="classCoverageDistribution" style="height: 300px;">
<svg></svg>
</div>
</div>
<div class="col-md-6">
<h3>Complexity</h3>
<div id="classComplexity" style="height: 300px;">
<svg></svg>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Insufficient Coverage</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Class</th>
<th class="text-right">Coverage</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div class="col-md-6">
<h3>Project Risks</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Class</th>
<th class="text-right"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Methods</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Coverage Distribution</h3>
<div id="methodCoverageDistribution" style="height: 300px;">
<svg></svg>
</div>
</div>
<div class="col-md-6">
<h3>Complexity</h3>
<div id="methodComplexity" style="height: 300px;">
<svg></svg>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Insufficient Coverage</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Method</th>
<th class="text-right">Coverage</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div class="col-md-6">
<h3>Project Risks</h3>
<div class="scrollbox">
<table class="table">
<thead>
<tr>
<th>Method</th>
<th class="text-right"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<footer>
<hr/>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
<script src=".js/d3.min.js" type="text/javascript"></script>
<script src=".js/nv.d3.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
nv.addGraph(function() {
var chart = nv.models.multiBarChart();
chart.tooltips(false)
.showControls(false)
.showLegend(false)
.reduceXTicks(false)
.staggerLabels(true)
.yAxis.tickFormat(d3.format('d'));
d3.select('#classCoverageDistribution svg')
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,0,0,0,0,2], "Class Coverage"))
.transition().duration(500).call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
nv.addGraph(function() {
var chart = nv.models.multiBarChart();
chart.tooltips(false)
.showControls(false)
.showLegend(false)
.reduceXTicks(false)
.staggerLabels(true)
.yAxis.tickFormat(d3.format('d'));
d3.select('#methodCoverageDistribution svg')
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,0,0,0,0,2], "Method Coverage"))
.transition().duration(500).call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
function getCoverageDistributionData(data, label) {
var labels = [
'0%',
'0-10%',
'10-20%',
'20-30%',
'30-40%',
'40-50%',
'50-60%',
'60-70%',
'70-80%',
'80-90%',
'90-100%',
'100%'
];
var values = [];
$.each(labels, function(key) {
values.push({x: labels[key], y: data[key]});
});
return [
{
key: label,
values: values,
color: "#4572A7"
}
];
}
nv.addGraph(function() {
var chart = nv.models.scatterChart()
.showDistX(true)
.showDistY(true)
.showLegend(false)
.forceX([0, 100]);
chart.tooltipContent(function(graph) {
return '<p>' + graph.point.class + '</p>';
});
chart.xAxis.axisLabel('Code Coverage (in percent)');
chart.yAxis.axisLabel('Cyclomatic Complexity');
d3.select('#classComplexity svg')
.datum(getComplexityData([[100,1,"<a href=\"source_with_ignore.php.html#11\">Foo<\/a>"],[100,1,"<a href=\"source_with_ignore.php.html#18\">Bar<\/a>"]], 'Class Complexity'))
.transition()
.duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
nv.addGraph(function() {
var chart = nv.models.scatterChart()
.showDistX(true)
.showDistY(true)
.showLegend(false)
.forceX([0, 100]);
chart.tooltipContent(function(graph) {
return '<p>' + graph.point.class + '</p>';
});
chart.xAxis.axisLabel('Code Coverage (in percent)');
chart.yAxis.axisLabel('Method Complexity');
d3.select('#methodComplexity svg')
.datum(getComplexityData([[100,1,"<a href=\"source_with_ignore.php.html#13\">Foo::bar<\/a>"],[100,1,"<a href=\"source_with_ignore.php.html#23\">Bar::foo<\/a>"]], 'Method Complexity'))
.transition()
.duration(500)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
function getComplexityData(data, label) {
var values = [];
$.each(data, function(key) {
var value = Math.round(data[key][0]*100) / 100;
values.push({
x: value,
y: data[key][1],
class: data[key][2],
size: 0.05,
shape: 'diamond'
});
});
return [
{
key: label,
values: values,
color: "#4572A7"
}
];
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Code Coverage for %s</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li class="active">%s</li>
<li>(<a href="dashboard.html">Dashboard</a>)</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<td>&nbsp;</td>
<td colspan="9"><div align="center"><strong>Code Coverage</strong></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
<td colspan="3"><div align="center"><strong>Functions and Methods</strong></div></td>
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
</tr>
</thead>
<tbody>
<tr>
<td class="danger">Total</td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">1&nbsp;/&nbsp;2</div></td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
</tr>
<tr>
<td class="danger"><span class="glyphicon glyphicon-file"></span> <a href="source_with_ignore.php.html">source_with_ignore.php</a></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">1&nbsp;/&nbsp;2</div></td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
</tr>
</tbody>
</table>
<footer>
<hr/>
<h4>Legend</h4>
<p>
<span class="danger"><strong>Low</strong>: 0% to 50%</span>
<span class="warning"><strong>Medium</strong>: 50% to 90%</span>
<span class="success"><strong>High</strong>: 90% to 100%</span>
</p>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,192 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Code Coverage for %s</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href=".css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href=".css/style.css" rel="stylesheet" type="text/css">
<!--[if lt IE 9]>
<script src=".js/html5shiv.min.js"></script>
<script src=".js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<div class="container">
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li><a href="index.html">%s</a></li>
<li class="active">source_with_ignore.php</li>
</ol>
</div>
</div>
</div>
</header>
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<td>&nbsp;</td>
<td colspan="10"><div align="center"><strong>Code Coverage</strong></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
</tr>
</thead>
<tbody>
<tr>
<td class="">Total</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class="success big"> <div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
<span class="sr-only">100.00% covered (success)</span>
</div>
</div>
</td>
<td class="success small"><div align="right">100.00%</div></td>
<td class="success small"><div align="right">1&nbsp;/&nbsp;1</div></td>
<td class="success small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
<td class="danger big"> <div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="50.00" aria-valuemin="0" aria-valuemax="100" style="width: 50.00%">
<span class="sr-only">50.00% covered (danger)</span>
</div>
</div>
</td>
<td class="danger small"><div align="right">50.00%</div></td>
<td class="danger small"><div align="right">1&nbsp;/&nbsp;2</div></td>
</tr>
<tr>
<td class="" colspan="4"><a href="#28"><abbr title="baz()">baz</abbr></a></td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class=" small">1</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
</tr>
<tr>
<td class="">Foo</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class=" small">1</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
</tr>
<tr>
<td class="" colspan="4">&nbsp;<a href="#13"><abbr title="bar()">bar</abbr></a></td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class=" small">1</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
</tr>
<tr>
<td class="">Bar</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class=" small">1</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
</tr>
<tr>
<td class="" colspan="4">&nbsp;<a href="#23"><abbr title="foo()">foo</abbr></a></td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
<td class=" small">1</td>
<td class=" big"></td>
<td class=" small"><div align="right">n/a</div></td>
<td class=" small"><div align="right">0&nbsp;/&nbsp;0</div></td>
</tr>
</tbody>
</table>
<table id="code" class="table table-borderless table-condensed">
<tbody>
<tr><td><div align="right"><a name="1"></a><a href="#1">1</a></div></td><td class="codeLine"><span class="default">&lt;?php</span></td></tr>
<tr class="covered-by-large-tests popin" data-title="1 test covers line 2" data-content="&lt;ul&gt;&lt;li class=&quot;covered-by-large-tests&quot;&gt;FileWithIgnoredLines&lt;/li&gt;&lt;/ul&gt;" data-placement="bottom" data-html="true"><td><div align="right"><a name="2"></a><a href="#2">2</a></div></td><td class="codeLine"><span class="keyword">if</span><span class="default">&nbsp;</span><span class="keyword">(</span><span class="default">$neverHappens</span><span class="keyword">)</span><span class="default">&nbsp;</span><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="3"></a><a href="#3">3</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;@codeCoverageIgnoreStart</span></td></tr>
<tr><td><div align="right"><a name="4"></a><a href="#4">4</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">print</span><span class="default">&nbsp;</span><span class="default">'*'</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="5"></a><a href="#5">5</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;@codeCoverageIgnoreEnd</span></td></tr>
<tr class="danger"><td><div align="right"><a name="6"></a><a href="#6">6</a></div></td><td class="codeLine"><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="7"></a><a href="#7">7</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="8"></a><a href="#8">8</a></div></td><td class="codeLine"><span class="comment">/**</span></td></tr>
<tr><td><div align="right"><a name="9"></a><a href="#9">9</a></div></td><td class="codeLine"><span class="comment">&nbsp;*&nbsp;@codeCoverageIgnore</span></td></tr>
<tr><td><div align="right"><a name="10"></a><a href="#10">10</a></div></td><td class="codeLine"><span class="comment">&nbsp;*/</span></td></tr>
<tr><td><div align="right"><a name="11"></a><a href="#11">11</a></div></td><td class="codeLine"><span class="keyword">class</span><span class="default">&nbsp;</span><span class="default">Foo</span></td></tr>
<tr><td><div align="right"><a name="12"></a><a href="#12">12</a></div></td><td class="codeLine"><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="13"></a><a href="#13">13</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">bar</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="14"></a><a href="#14">14</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="15"></a><a href="#15">15</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="16"></a><a href="#16">16</a></div></td><td class="codeLine"><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="17"></a><a href="#17">17</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="18"></a><a href="#18">18</a></div></td><td class="codeLine"><span class="keyword">class</span><span class="default">&nbsp;</span><span class="default">Bar</span></td></tr>
<tr><td><div align="right"><a name="19"></a><a href="#19">19</a></div></td><td class="codeLine"><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="20"></a><a href="#20">20</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/**</span></td></tr>
<tr><td><div align="right"><a name="21"></a><a href="#21">21</a></div></td><td class="codeLine"><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@codeCoverageIgnore</span></td></tr>
<tr><td><div align="right"><a name="22"></a><a href="#22">22</a></div></td><td class="codeLine"><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></td></tr>
<tr><td><div align="right"><a name="23"></a><a href="#23">23</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">foo</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="24"></a><a href="#24">24</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="25"></a><a href="#25">25</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="26"></a><a href="#26">26</a></div></td><td class="codeLine"><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="27"></a><a href="#27">27</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="28"></a><a href="#28">28</a></div></td><td class="codeLine"><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">baz</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
<tr><td><div align="right"><a name="29"></a><a href="#29">29</a></div></td><td class="codeLine"><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="30"></a><a href="#30">30</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="default">print</span><span class="default">&nbsp;</span><span class="default">'*'</span><span class="keyword">;</span><span class="default">&nbsp;</span><span class="comment">//&nbsp;@codeCoverageIgnore</span></td></tr>
<tr><td><div align="right"><a name="31"></a><a href="#31">31</a></div></td><td class="codeLine"><span class="keyword">}</span></td></tr>
<tr><td><div align="right"><a name="32"></a><a href="#32">32</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="33"></a><a href="#33">33</a></div></td><td class="codeLine"><span class="keyword">interface</span><span class="default">&nbsp;</span><span class="default">Bor</span></td></tr>
<tr><td><div align="right"><a name="34"></a><a href="#34">34</a></div></td><td class="codeLine"><span class="keyword">{</span></td></tr>
<tr><td><div align="right"><a name="35"></a><a href="#35">35</a></div></td><td class="codeLine"><span class="default">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span class="default">&nbsp;</span><span class="keyword">function</span><span class="default">&nbsp;</span><span class="default">foo</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
<tr><td><div align="right"><a name="36"></a><a href="#36">36</a></div></td><td class="codeLine"></td></tr>
<tr><td><div align="right"><a name="37"></a><a href="#37">37</a></div></td><td class="codeLine"><span class="keyword">}</span></td></tr>
</tbody>
</table>
<footer>
<hr/>
<h4>Legend</h4>
<p>
<span class="success"><strong>Executed</strong></span>
<span class="danger"><strong>Not Executed</strong></span>
<span class="warning"><strong>Dead Code</strong></span>
</p>
<p>
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage %s</a> using <a href="%s" target="_top">%s</a> at %s.</small>
</p>
<a title="Back to the top" id="toplink" href="#"><span class="glyphicon glyphicon-arrow-up"></span></a>
</footer>
</div>
<script src=".js/jquery.min.js" type="text/javascript"></script>
<script src=".js/bootstrap.min.js" type="text/javascript"></script>
<script src=".js/holder.min.js" type="text/javascript"></script>
<script src=".js/file.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,262 @@
<?xml version="1.0"?>
<phpunit xmlns="http://schema.phpunit.de/coverage/1.0">
<file name="BankAccount.php" path="/">
<totals>
<lines total="33" comments="0" code="33" executable="10" executed="5" percent="50.00"/>
<methods count="4" tested="3" percent="75.00"/>
<functions count="0" tested="0" percent="0"/>
<classes count="1" tested="0" percent="0.00"/>
<traits count="0" tested="0" percent="0"/>
</totals>
<class name="BankAccount" start="2" executable="10" executed="5" crap="8.12">
<package full="" name="" sub="" category=""/>
<namespace name=""/>
<method name="getBalance" signature="getBalance()" start="6" end="9" crap="1" executable="1" executed="1" coverage="100"/>
<method name="setBalance" signature="setBalance($balance)" start="11" end="18" crap="6" executable="5" executed="0" coverage="0"/>
<method name="depositMoney" signature="depositMoney($balance)" start="20" end="25" crap="1" executable="2" executed="2" coverage="100"/>
<method name="withdrawMoney" signature="withdrawMoney($balance)" start="27" end="32" crap="1" executable="2" executed="2" coverage="100"/>
</class>
<coverage>
<line nr="8">
<covered by="BankAccountTest::testBalanceIsInitiallyZero"/>
<covered by="BankAccountTest::testDepositWithdrawMoney"/>
</line>
<line nr="22">
<covered by="BankAccountTest::testBalanceCannotBecomeNegative2"/>
<covered by="BankAccountTest::testDepositWithdrawMoney"/>
</line>
<line nr="24">
<covered by="BankAccountTest::testDepositWithdrawMoney"/>
</line>
<line nr="29">
<covered by="BankAccountTest::testBalanceCannotBecomeNegative"/>
<covered by="BankAccountTest::testDepositWithdrawMoney"/>
</line>
<line nr="31">
<covered by="BankAccountTest::testDepositWithdrawMoney"/>
</line>
</coverage>
<source>
<line no="1">
<token name="T_OPEN_TAG">&lt;?php</token>
</line>
<line no="2">
<token name="T_CLASS">class</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">BankAccount</token>
</line>
<line no="3">
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="4">
<token name="T_WHITESPACE"> </token>
<token name="T_PROTECTED">protected</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$balance</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_LNUMBER">0</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="5"/>
<line no="6">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">getBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="7">
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="8">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">balance</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="9">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="10"/>
<line no="11">
<token name="T_WHITESPACE"> </token>
<token name="T_PROTECTED">protected</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">setBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_VARIABLE">$balance</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="12">
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="13">
<token name="T_WHITESPACE"> </token>
<token name="T_IF">if</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_VARIABLE">$balance</token>
<token name="T_WHITESPACE"> </token>
<token name="T_IS_GREATER_OR_EQUAL">&gt;=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_LNUMBER">0</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="14">
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">balance</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$balance</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="15">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
<token name="T_WHITESPACE"> </token>
<token name="T_ELSE">else</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="16">
<token name="T_WHITESPACE"> </token>
<token name="T_THROW">throw</token>
<token name="T_WHITESPACE"> </token>
<token name="T_NEW">new</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">RuntimeException</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="17">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="18">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="19"/>
<line no="20">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">depositMoney</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_VARIABLE">$balance</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="21">
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="22">
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">setBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">getBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_PLUS">+</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$balance</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="23"/>
<line no="24">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">getBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="25">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="26"/>
<line no="27">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">withdrawMoney</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_VARIABLE">$balance</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="28">
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="29">
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">setBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">getBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_MINUS">-</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$balance</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="30"/>
<line no="31">
<token name="T_WHITESPACE"> </token>
<token name="T_RETURN">return</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$this</token>
<token name="T_OBJECT_OPERATOR">-&gt;</token>
<token name="T_STRING">getBalance</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="32">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="33">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="34"/>
</source>
</file>
</phpunit>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0"?>
<phpunit xmlns="http://schema.phpunit.de/coverage/1.0">
<build time="%s" phpunit="%s" coverage="%s">
<runtime name="%s" version="%s" url="%s"/>
<driver name="%s" version="%s"/>
</build>
<project source="%s">
<tests>
<test name="BankAccountTest::testBalanceIsInitiallyZero" size="unknown" result="0" status="PASSED"/>
<test name="BankAccountTest::testBalanceCannotBecomeNegative" size="unknown" result="0" status="PASSED"/>
<test name="BankAccountTest::testBalanceCannotBecomeNegative2" size="unknown" result="0" status="PASSED"/>
<test name="BankAccountTest::testDepositWithdrawMoney" size="unknown" result="0" status="PASSED"/>
</tests>
<directory name="%s">
<totals>
<lines total="33" comments="0" code="33" executable="10" executed="5" percent="50.00"/>
<methods count="4" tested="3" percent="75.00"/>
<functions count="0" tested="0" percent="0"/>
<classes count="1" tested="0" percent="0.00"/>
<traits count="0" tested="0" percent="0"/>
</totals>
<file name="BankAccount.php" href="BankAccount.php.xml">
<totals>
<lines total="33" comments="0" code="33" executable="10" executed="5" percent="50.00"/>
<methods count="4" tested="3" percent="75.00"/>
<functions count="0" tested="0" percent="0"/>
<classes count="1" tested="0" percent="0.00"/>
<traits count="0" tested="0" percent="0"/>
</totals>
</file>
</directory>
</project>
</phpunit>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0"?>
<phpunit xmlns="http://schema.phpunit.de/coverage/1.0">
<build time="%s" phpunit="%s" coverage="%s">
<runtime name="%s" version="%s" url="%s"/>
<driver name="%s" version="%s"/>
</build>
<project source="%s">
<tests>
<test name="ClassWithAnonymousFunction" size="unknown" result="0" status="PASSED"/>
</tests>
<directory name="%s">
<totals>
<lines total="19" comments="2" code="17" executable="8" executed="7" percent="87.50"/>
<methods count="2" tested="1" percent="50.00"/>
<functions count="0" tested="0" percent="0"/>
<classes count="1" tested="0" percent="0.00"/>
<traits count="0" tested="0" percent="0"/>
</totals>
<file name="source_with_class_and_anonymous_function.php" href="source_with_class_and_anonymous_function.php.xml">
<totals>
<lines total="19" comments="2" code="17" executable="8" executed="7" percent="87.50"/>
<methods count="2" tested="1" percent="50.00"/>
<functions count="0" tested="0" percent="0"/>
<classes count="1" tested="0" percent="0.00"/>
<traits count="0" tested="0" percent="0"/>
</totals>
</file>
</directory>
</project>
</phpunit>

View File

@@ -0,0 +1,162 @@
<?xml version="1.0"?>
<phpunit xmlns="http://schema.phpunit.de/coverage/1.0">
<file name="source_with_class_and_anonymous_function.php" path="/">
<totals>
<lines total="19" comments="2" code="17" executable="8" executed="7" percent="87.50"/>
<methods count="2" tested="1" percent="50.00"/>
<functions count="0" tested="0" percent="0"/>
<classes count="1" tested="0" percent="0.00"/>
<traits count="0" tested="0" percent="0"/>
</totals>
<class name="CoveredClassWithAnonymousFunctionInStaticMethod" start="3" executable="8" executed="7" crap="2.01">
<package full="" name="" sub="" category=""/>
<namespace name=""/>
<method name="runAnonymous" signature="runAnonymous()" start="5" end="18" crap="1.04" executable="3" executed="2" coverage="66.666666666667"/>
<method name="anonymousFunction:11#41" signature="anonymousFunction (&amp;$val, $key)" start="11" end="13" crap="1" executable="2" executed="2" coverage="100"/>
</class>
<coverage>
<line nr="7">
<covered by="ClassWithAnonymousFunction"/>
</line>
<line nr="9">
<covered by="ClassWithAnonymousFunction"/>
</line>
<line nr="12">
<covered by="ClassWithAnonymousFunction"/>
</line>
<line nr="13">
<covered by="ClassWithAnonymousFunction"/>
</line>
<line nr="14">
<covered by="ClassWithAnonymousFunction"/>
</line>
<line nr="17">
<covered by="ClassWithAnonymousFunction"/>
</line>
<line nr="18">
<covered by="ClassWithAnonymousFunction"/>
</line>
</coverage>
<source>
<line no="1">
<token name="T_OPEN_TAG">&lt;?php</token>
</line>
<line no="2"/>
<line no="3">
<token name="T_CLASS">class</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">CoveredClassWithAnonymousFunctionInStaticMethod</token>
</line>
<line no="4">
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="5">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STATIC">static</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">runAnonymous</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="6">
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="7">
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$filter</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_SQUARE">[</token>
<token name="T_CONSTANT_ENCAPSED_STRING">'abc124'</token>
<token name="T_COMMA">,</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'abc123'</token>
<token name="T_COMMA">,</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'123'</token>
<token name="T_CLOSE_SQUARE">]</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="8"/>
<line no="9">
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">array_walk</token>
<token name="T_OPEN_BRACKET">(</token>
</line>
<line no="10">
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$filter</token>
<token name="T_COMMA">,</token>
</line>
<line no="11">
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_AMPERSAND">&amp;</token>
<token name="T_VARIABLE">$val</token>
<token name="T_COMMA">,</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$key</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="12">
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$val</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">preg_replace</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CONSTANT_ENCAPSED_STRING">'|[^0-9]|'</token>
<token name="T_COMMA">,</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">''</token>
<token name="T_COMMA">,</token>
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$val</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="13">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="14">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="15"/>
<line no="16">
<token name="T_WHITESPACE"> </token>
<token name="T_COMMENT">// Should be covered</token>
</line>
<line no="17">
<token name="T_WHITESPACE"> </token>
<token name="T_VARIABLE">$extravar</token>
<token name="T_WHITESPACE"> </token>
<token name="T_EQUAL">=</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">true</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="18">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="19">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="20"/>
</source>
</file>
</phpunit>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0"?>
<phpunit xmlns="http://schema.phpunit.de/coverage/1.0">
<build time="%s" phpunit="%s" coverage="%s">
<runtime name="%s" version="%s" url="%s"/>
<driver name="%s" version="%s"/>
</build>
<project source="%s">
<tests>
<test name="FileWithIgnoredLines" size="unknown" result="0" status="PASSED"/>
</tests>
<directory name="%s">
<totals>
<lines total="37" comments="12" code="25" executable="2" executed="1" percent="50.00"/>
<methods count="0" tested="0" percent="0"/>
<functions count="1" tested="1" percent="100.00"/>
<classes count="0" tested="0" percent="0"/>
<traits count="0" tested="0" percent="0"/>
</totals>
<file name="source_with_ignore.php" href="source_with_ignore.php.xml">
<totals>
<lines total="37" comments="12" code="25" executable="2" executed="1" percent="50.00"/>
<methods count="0" tested="0" percent="0"/>
<functions count="1" tested="1" percent="100.00"/>
<classes count="0" tested="0" percent="0"/>
<traits count="0" tested="0" percent="0"/>
</totals>
</file>
</directory>
</project>
</phpunit>

View File

@@ -0,0 +1,187 @@
<?xml version="1.0"?>
<phpunit xmlns="http://schema.phpunit.de/coverage/1.0">
<file name="source_with_ignore.php" path="/">
<totals>
<lines total="37" comments="12" code="25" executable="2" executed="1" percent="50.00"/>
<methods count="0" tested="0" percent="0"/>
<functions count="1" tested="1" percent="100.00"/>
<classes count="0" tested="0" percent="0"/>
<traits count="0" tested="0" percent="0"/>
</totals>
<class name="Foo" start="11" executable="0" executed="0" crap="1">
<package full="" name="" sub="" category=""/>
<namespace name=""/>
<method name="bar" signature="bar()" start="13" end="15" crap="1" executable="0" executed="0" coverage="100"/>
</class>
<class name="Bar" start="18" executable="0" executed="0" crap="1">
<package full="" name="" sub="" category=""/>
<namespace name=""/>
<method name="foo" signature="foo()" start="23" end="25" crap="1" executable="0" executed="0" coverage="100"/>
</class>
<function name="baz" signature="baz()" start="28" crap="1" executable="0" executed="0" coverage="100"/>
<coverage>
<line nr="2">
<covered by="FileWithIgnoredLines"/>
</line>
</coverage>
<source>
<line no="1">
<token name="T_OPEN_TAG">&lt;?php</token>
</line>
<line no="2">
<token name="T_IF">if</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_VARIABLE">$neverHappens</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="3">
<token name="T_WHITESPACE"> </token>
<token name="T_COMMENT">// @codeCoverageIgnoreStart</token>
</line>
<line no="4">
<token name="T_WHITESPACE"> </token>
<token name="T_PRINT">print</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'*'</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="5">
<token name="T_WHITESPACE"> </token>
<token name="T_COMMENT">// @codeCoverageIgnoreEnd</token>
</line>
<line no="6">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="7"/>
<line no="8">
<token name="T_DOC_COMMENT">/**</token>
</line>
<line no="9">
<token name="T_DOC_COMMENT"> * @codeCoverageIgnore</token>
</line>
<line no="10">
<token name="T_DOC_COMMENT"> */</token>
</line>
<line no="11">
<token name="T_CLASS">class</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">Foo</token>
</line>
<line no="12">
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="13">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">bar</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="14">
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="15">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="16">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="17"/>
<line no="18">
<token name="T_CLASS">class</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">Bar</token>
</line>
<line no="19">
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="20">
<token name="T_WHITESPACE"> </token>
<token name="T_DOC_COMMENT">/**</token>
</line>
<line no="21">
<token name="T_DOC_COMMENT"> * @codeCoverageIgnore</token>
</line>
<line no="22">
<token name="T_DOC_COMMENT"> */</token>
</line>
<line no="23">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">foo</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="24">
<token name="T_WHITESPACE"> </token>
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="25">
<token name="T_WHITESPACE"> </token>
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="26">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="27"/>
<line no="28">
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">baz</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
</line>
<line no="29">
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="30">
<token name="T_WHITESPACE"> </token>
<token name="T_PRINT">print</token>
<token name="T_WHITESPACE"> </token>
<token name="T_CONSTANT_ENCAPSED_STRING">'*'</token>
<token name="T_SEMICOLON">;</token>
<token name="T_WHITESPACE"> </token>
<token name="T_COMMENT">// @codeCoverageIgnore</token>
</line>
<line no="31">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="32"/>
<line no="33">
<token name="T_INTERFACE">interface</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">Bor</token>
</line>
<line no="34">
<token name="T_OPEN_CURLY">{</token>
</line>
<line no="35">
<token name="T_WHITESPACE"> </token>
<token name="T_PUBLIC">public</token>
<token name="T_WHITESPACE"> </token>
<token name="T_FUNCTION">function</token>
<token name="T_WHITESPACE"> </token>
<token name="T_STRING">foo</token>
<token name="T_OPEN_BRACKET">(</token>
<token name="T_CLOSE_BRACKET">)</token>
<token name="T_SEMICOLON">;</token>
</line>
<line no="36"/>
<line no="37">
<token name="T_CLOSE_CURLY">}</token>
</line>
<line no="38"/>
</source>
</file>
</phpunit>

View File

@@ -3,13 +3,13 @@
<project timestamp="%i">
<file name="%s/source_with_class_and_anonymous_function.php">
<class name="CoveredClassWithAnonymousFunctionInStaticMethod" namespace="global">
<metrics methods="2" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="4" elements="7" coveredelements="5"/>
<metrics complexity="2" methods="2" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="4" elements="7" coveredelements="5"/>
</class>
<line num="5" type="method" name="runAnonymous" crap="1.04" count="1"/>
<line num="5" type="method" name="runAnonymous" visibility="public" complexity="1" crap="1.04" count="1"/>
<line num="7" type="stmt" count="1"/>
<line num="9" type="stmt" count="1"/>
<line num="10" type="stmt" count="0"/>
<line num="11" type="method" name="anonymous function" crap="1" count="1"/>
<line num="11" type="method" name="anonymousFunction:11#41" complexity="1" crap="1" count="1"/>
<line num="12" type="stmt" count="1"/>
<line num="13" type="stmt" count="1"/>
<line num="14" type="stmt" count="1"/>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<crap_result>
<project>CoverageForClassWithAnonymousFunction</project>
<timestamp>%s</timestamp>
<stats>
<name>Method Crap Stats</name>
<methodCount>2</methodCount>
<crapMethodCount>0</crapMethodCount>
<crapLoad>0</crapLoad>
<totalCrap>2.04</totalCrap>
<crapMethodPercent>0</crapMethodPercent>
</stats>
<methods>
<method>
<package>global</package>
<className>CoveredClassWithAnonymousFunctionInStaticMethod</className>
<methodName>runAnonymous</methodName>
<methodSignature>runAnonymous()</methodSignature>
<fullMethod>runAnonymous()</fullMethod>
<crap>1.04</crap>
<complexity>1</complexity>
<coverage>66.67</coverage>
<crapLoad>0</crapLoad>
</method>
<method>
<package>global</package>
<className>CoveredClassWithAnonymousFunctionInStaticMethod</className>
<methodName>anonymousFunction:11#41</methodName>
<methodSignature>anonymousFunction (&amp;$val, $key)</methodSignature>
<fullMethod>anonymousFunction (&amp;$val, $key)</fullMethod>
<crap>1</crap>
<complexity>1</complexity>
<coverage>100</coverage>
<crapLoad>0</crapLoad>
</method>
</methods>
</crap_result>

View File

@@ -0,0 +1,12 @@
Code Coverage Report:
%s
Summary:
Classes: 0.00% (0/1)
Methods: 50.00% (1/2)
Lines: 87.50% (7/8)
CoveredClassWithAnonymousFunctionInStaticMethod
Methods: 50.00% ( 1/ 2) Lines: 80.00% ( 4/ 5)

View File

@@ -3,15 +3,15 @@
<project timestamp="%i">
<file name="%s/source_with_ignore.php">
<class name="Foo" namespace="global">
<metrics methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
<metrics complexity="1" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</class>
<class name="Bar" namespace="global">
<metrics methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
<metrics complexity="1" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</class>
<line num="2" type="stmt" count="1"/>
<line num="6" type="stmt" count="0"/>
<metrics loc="37" ncloc="25" classes="2" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="1" elements="2" coveredelements="1"/>
<metrics loc="37" ncloc="25" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="1" elements="2" coveredelements="1"/>
</file>
<metrics files="1" loc="37" ncloc="25" classes="2" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="1" elements="2" coveredelements="1"/>
<metrics files="1" loc="37" ncloc="25" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="1" elements="2" coveredelements="1"/>
</project>
</coverage>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<crap_result>
<project>CoverageForFileWithIgnoredLines</project>
<timestamp>%s</timestamp>
<stats>
<name>Method Crap Stats</name>
<methodCount>2</methodCount>
<crapMethodCount>0</crapMethodCount>
<crapLoad>0</crapLoad>
<totalCrap>2</totalCrap>
<crapMethodPercent>0</crapMethodPercent>
</stats>
<methods>
<method>
<package>global</package>
<className>Foo</className>
<methodName>bar</methodName>
<methodSignature>bar()</methodSignature>
<fullMethod>bar()</fullMethod>
<crap>1</crap>
<complexity>1</complexity>
<coverage>100</coverage>
<crapLoad>0</crapLoad>
</method>
<method>
<package>global</package>
<className>Bar</className>
<methodName>foo</methodName>
<methodSignature>foo()</methodSignature>
<fullMethod>foo()</fullMethod>
<crap>1</crap>
<complexity>1</complexity>
<coverage>100</coverage>
<crapLoad>0</crapLoad>
</method>
</methods>
</crap_result>

View File

@@ -0,0 +1,10 @@
Code Coverage Report:%w
%s
%w
Summary:%w
Classes: (0/0)
Methods: (0/0)
Lines: 50.00% (1/2)

View File

@@ -4,7 +4,7 @@ class CoveredClassWithAnonymousFunctionInStaticMethod
{
public static function runAnonymous()
{
$filter = array('abc124', 'abc123', '123');
$filter = ['abc124', 'abc123', '123'];
array_walk(
$filter,

View File

@@ -1,7 +1,7 @@
<?php
/** Docblock */
interface Foo
interface FooInterface
{
public function bar();
}

View File

@@ -0,0 +1,5 @@
<?php
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/TestCase.php';
define('TEST_FILES_PATH', __DIR__ . '/_files/');

View File

@@ -1,6 +1,6 @@
<?php
/*
* This file is part of the PHP_CodeCoverage package.
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
@@ -8,28 +8,18 @@
* file that was distributed with this source code.
*/
if (!defined('TEST_FILES_PATH')) {
define(
'TEST_FILES_PATH',
dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR .
'_files' . DIRECTORY_SEPARATOR
);
}
namespace SebastianBergmann\CodeCoverage\Report;
require_once TEST_FILES_PATH . '../TestCase.php';
use SebastianBergmann\CodeCoverage\TestCase;
use SebastianBergmann\CodeCoverage\Node\Builder;
/**
* Tests for the PHP_CodeCoverage_Report_Factory class.
*
* @since Class available since Release 1.1.0
*/
class PHP_CodeCoverage_Report_FactoryTest extends PHP_CodeCoverage_TestCase
class BuilderTest extends TestCase
{
protected $factory;
protected function setUp()
{
$this->factory = new PHP_CodeCoverage_Report_Factory;
$this->factory = new Builder;
}
public function testSomething()
@@ -51,15 +41,15 @@ class PHP_CodeCoverage_Report_FactoryTest extends PHP_CodeCoverage_TestCase
$this->assertEquals(0, $root->getNumFunctions());
$this->assertEquals(0, $root->getNumTestedFunctions());
$this->assertNull($root->getParent());
$this->assertEquals(array(), $root->getDirectories());
$this->assertEquals([], $root->getDirectories());
#$this->assertEquals(array(), $root->getFiles());
#$this->assertEquals(array(), $root->getChildNodes());
$this->assertEquals(
array(
'BankAccount' => array(
'methods' => array(
'getBalance' => array(
[
'BankAccount' => [
'methods' => [
'getBalance' => [
'signature' => 'getBalance()',
'startLine' => 6,
'endLine' => 9,
@@ -69,9 +59,10 @@ class PHP_CodeCoverage_Report_FactoryTest extends PHP_CodeCoverage_TestCase
'coverage' => 100,
'crap' => '1',
'link' => 'BankAccount.php.html#6',
'methodName' => 'getBalance'
),
'setBalance' => array(
'methodName' => 'getBalance',
'visibility' => 'public',
],
'setBalance' => [
'signature' => 'setBalance($balance)',
'startLine' => 11,
'endLine' => 18,
@@ -81,9 +72,10 @@ class PHP_CodeCoverage_Report_FactoryTest extends PHP_CodeCoverage_TestCase
'coverage' => 0,
'crap' => 6,
'link' => 'BankAccount.php.html#11',
'methodName' => 'setBalance'
),
'depositMoney' => array(
'methodName' => 'setBalance',
'visibility' => 'protected',
],
'depositMoney' => [
'signature' => 'depositMoney($balance)',
'startLine' => 20,
'endLine' => 25,
@@ -93,9 +85,10 @@ class PHP_CodeCoverage_Report_FactoryTest extends PHP_CodeCoverage_TestCase
'coverage' => 100,
'crap' => '1',
'link' => 'BankAccount.php.html#20',
'methodName' => 'depositMoney'
),
'withdrawMoney' => array(
'methodName' => 'depositMoney',
'visibility' => 'public',
],
'withdrawMoney' => [
'signature' => 'withdrawMoney($balance)',
'startLine' => 27,
'endLine' => 32,
@@ -105,72 +98,69 @@ class PHP_CodeCoverage_Report_FactoryTest extends PHP_CodeCoverage_TestCase
'coverage' => 100,
'crap' => '1',
'link' => 'BankAccount.php.html#27',
'methodName' => 'withdrawMoney'
),
),
'methodName' => 'withdrawMoney',
'visibility' => 'public',
],
],
'startLine' => 2,
'executableLines' => 10,
'executedLines' => 5,
'ccn' => 5,
'coverage' => 50,
'crap' => '8.12',
'package' => array(
'package' => [
'namespace' => '',
'fullPackage' => '',
'category' => '',
'package' => '',
'subpackage' => ''
),
],
'link' => 'BankAccount.php.html#2',
'className' => 'BankAccount'
)
),
]
],
$root->getClasses()
);
$this->assertEquals(array(), $root->getFunctions());
$this->assertEquals([], $root->getFunctions());
}
/**
* @covers PHP_CodeCoverage_Report_Factory::buildDirectoryStructure
*/
public function testBuildDirectoryStructure()
{
$method = new ReflectionMethod(
'PHP_CodeCoverage_Report_Factory',
$method = new \ReflectionMethod(
Builder::class,
'buildDirectoryStructure'
);
$method->setAccessible(true);
$this->assertEquals(
array(
'src' => array(
'Money.php/f' => array(),
'MoneyBag.php/f' => array()
)
),
[
'src' => [
'Money.php/f' => [],
'MoneyBag.php/f' => []
]
],
$method->invoke(
$this->factory,
array('src/Money.php' => array(), 'src/MoneyBag.php' => array())
['src/Money.php' => [], 'src/MoneyBag.php' => []]
)
);
}
/**
* @covers PHP_CodeCoverage_Report_Factory::reducePaths
* @dataProvider reducePathsProvider
*/
public function testReducePaths($reducedPaths, $commonPath, $paths)
{
$method = new ReflectionMethod(
'PHP_CodeCoverage_Report_Factory',
$method = new \ReflectionMethod(
Builder::class,
'reducePaths'
);
$method->setAccessible(true);
$_commonPath = $method->invokeArgs($this->factory, array(&$paths));
$_commonPath = $method->invokeArgs($this->factory, [&$paths]);
$this->assertEquals($reducedPaths, $paths);
$this->assertEquals($commonPath, $_commonPath);
@@ -178,45 +168,45 @@ class PHP_CodeCoverage_Report_FactoryTest extends PHP_CodeCoverage_TestCase
public function reducePathsProvider()
{
return array(
array(
array(
'Money.php' => array(),
'MoneyBag.php' => array()
),
return [
[
[
'Money.php' => [],
'MoneyBag.php' => []
],
'/home/sb/Money',
array(
'/home/sb/Money/Money.php' => array(),
'/home/sb/Money/MoneyBag.php' => array()
)
),
array(
array(
'Money.php' => array()
),
[
'/home/sb/Money/Money.php' => [],
'/home/sb/Money/MoneyBag.php' => []
]
],
[
[
'Money.php' => []
],
'/home/sb/Money/',
array(
'/home/sb/Money/Money.php' => array()
)
),
array(
array(),
[
'/home/sb/Money/Money.php' => []
]
],
[
[],
'.',
array()
),
array(
array(
'Money.php' => array(),
'MoneyBag.php' => array(),
'Cash.phar/Cash.php' => array(),
),
[]
],
[
[
'Money.php' => [],
'MoneyBag.php' => [],
'Cash.phar/Cash.php' => [],
],
'/home/sb/Money',
array(
'/home/sb/Money/Money.php' => array(),
'/home/sb/Money/MoneyBag.php' => array(),
'phar:///home/sb/Money/Cash.phar/Cash.php' => array(),
),
),
);
[
'/home/sb/Money/Money.php' => [],
'/home/sb/Money/MoneyBag.php' => [],
'phar:///home/sb/Money/Cash.phar/Cash.php' => [],
],
],
];
}
}

View File

@@ -1,6 +1,6 @@
<?php
/*
* This file is part of the PHP_CodeCoverage package.
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
@@ -8,29 +8,18 @@
* file that was distributed with this source code.
*/
if (!defined('TEST_FILES_PATH')) {
define(
'TEST_FILES_PATH',
dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR .
'_files' . DIRECTORY_SEPARATOR
);
}
namespace SebastianBergmann\CodeCoverage\Report;
require_once TEST_FILES_PATH . '../TestCase.php';
use SebastianBergmann\CodeCoverage\TestCase;
/**
* Tests for the PHP_CodeCoverage_Report_Clover class.
*
* @since Class available since Release 1.0.0
* @covers SebastianBergmann\CodeCoverage\Report\Clover
*/
class PHP_CodeCoverage_Report_CloverTest extends PHP_CodeCoverage_TestCase
class CloverTest extends TestCase
{
/**
* @covers PHP_CodeCoverage_Report_Clover
*/
public function testCloverForBankAccountTest()
{
$clover = new PHP_CodeCoverage_Report_Clover;
$clover = new Clover;
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'BankAccount-clover.xml',
@@ -38,12 +27,9 @@ class PHP_CodeCoverage_Report_CloverTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage_Report_Clover
*/
public function testCloverForFileWithIgnoredLines()
{
$clover = new PHP_CodeCoverage_Report_Clover;
$clover = new Clover;
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'ignored-lines-clover.xml',
@@ -51,12 +37,9 @@ class PHP_CodeCoverage_Report_CloverTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage_Report_Clover
*/
public function testCloverForClassWithAnonymousFunction()
{
$clover = new PHP_CodeCoverage_Report_Clover;
$clover = new Clover;
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'class-with-anonymous-function-clover.xml',

View File

@@ -1,6 +1,6 @@
<?php
/*
* This file is part of the PHP_CodeCoverage package.
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
@@ -8,65 +8,93 @@
* file that was distributed with this source code.
*/
if (!defined('TEST_FILES_PATH')) {
define(
'TEST_FILES_PATH',
dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
'_files' . DIRECTORY_SEPARATOR
);
}
namespace SebastianBergmann\CodeCoverage;
require_once TEST_FILES_PATH . '../TestCase.php';
require_once TEST_FILES_PATH . 'BankAccount.php';
require_once TEST_FILES_PATH . 'BankAccountTest.php';
use SebastianBergmann\CodeCoverage\Driver\PHPDBG;
use SebastianBergmann\CodeCoverage\Driver\Xdebug;
/**
* Tests for the PHP_CodeCoverage class.
*
* @since Class available since Release 1.0.0
* @covers SebastianBergmann\CodeCoverage\CodeCoverage
*/
class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
class CodeCoverageTest extends TestCase
{
/**
* @var PHP_CodeCoverage
* @var CodeCoverage
*/
private $coverage;
protected function setUp()
{
$this->coverage = new PHP_CodeCoverage;
$this->coverage = new CodeCoverage;
}
/**
* @covers PHP_CodeCoverage::__construct
* @covers PHP_CodeCoverage::filter
*/
public function testConstructor()
public function testCanBeConstructedForXdebugWithoutGivenFilterObject()
{
if (PHP_SAPI == 'phpdbg') {
$this->markTestSkipped('Requires PHP CLI and Xdebug');
}
$this->assertAttributeInstanceOf(
'PHP_CodeCoverage_Driver_Xdebug',
Xdebug::class,
'driver',
$this->coverage
);
$this->assertAttributeInstanceOf(
'PHP_CodeCoverage_Filter',
Filter::class,
'filter',
$this->coverage
);
}
/**
* @covers PHP_CodeCoverage::__construct
* @covers PHP_CodeCoverage::filter
*/
public function testConstructor2()
public function testCanBeConstructedForXdebugWithGivenFilterObject()
{
$filter = new PHP_CodeCoverage_Filter;
$coverage = new PHP_CodeCoverage(null, $filter);
if (PHP_SAPI == 'phpdbg') {
$this->markTestSkipped('Requires PHP CLI and Xdebug');
}
$filter = new Filter;
$coverage = new CodeCoverage(null, $filter);
$this->assertAttributeInstanceOf(
'PHP_CodeCoverage_Driver_Xdebug',
Xdebug::class,
'driver',
$coverage
);
$this->assertSame($filter, $coverage->filter());
}
public function testCanBeConstructedForPhpdbgWithoutGivenFilterObject()
{
if (PHP_SAPI != 'phpdbg') {
$this->markTestSkipped('Requires PHPDBG');
}
$this->assertAttributeInstanceOf(
PHPDBG::class,
'driver',
$this->coverage
);
$this->assertAttributeInstanceOf(
Filter::class,
'filter',
$this->coverage
);
}
public function testCanBeConstructedForPhpdbgWithGivenFilterObject()
{
if (PHP_SAPI != 'phpdbg') {
$this->markTestSkipped('Requires PHPDBG');
}
$filter = new Filter;
$coverage = new CodeCoverage(null, $filter);
$this->assertAttributeInstanceOf(
PHPDBG::class,
'driver',
$coverage
);
@@ -75,53 +103,45 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
}
/**
* @covers PHP_CodeCoverage::start
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testStartThrowsExceptionForInvalidArgument()
public function testCannotStartWithInvalidArgument()
{
$this->coverage->start(null, array(), null);
$this->coverage->start(null, null);
}
/**
* @covers PHP_CodeCoverage::stop
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testStopThrowsExceptionForInvalidArgument()
public function testCannotStopWithInvalidFirstArgument()
{
$this->coverage->stop(null);
}
/**
* @covers PHP_CodeCoverage::stop
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testStopThrowsExceptionForInvalidArgument2()
public function testCannotStopWithInvalidSecondArgument()
{
$this->coverage->stop(true, null);
}
/**
* @covers PHP_CodeCoverage::append
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testAppendThrowsExceptionForInvalidArgument()
public function testCannotAppendWithInvalidArgument()
{
$this->coverage->append(array(), null);
$this->coverage->append([], null);
}
/**
* @covers PHP_CodeCoverage::setCacheTokens
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetCacheTokensThrowsExceptionForInvalidArgument()
{
$this->coverage->setCacheTokens(null);
}
/**
* @covers PHP_CodeCoverage::setCacheTokens
*/
public function testSetCacheTokens()
{
$this->coverage->setCacheTokens(true);
@@ -129,17 +149,13 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
}
/**
* @covers PHP_CodeCoverage::setCheckForUnintentionallyCoveredCode
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetCheckForUnintentionallyCoveredCodeThrowsExceptionForInvalidArgument()
{
$this->coverage->setCheckForUnintentionallyCoveredCode(null);
}
/**
* @covers PHP_CodeCoverage::setCheckForUnintentionallyCoveredCode
*/
public function testSetCheckForUnintentionallyCoveredCode()
{
$this->coverage->setCheckForUnintentionallyCoveredCode(true);
@@ -151,17 +167,31 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
}
/**
* @covers PHP_CodeCoverage::setForceCoversAnnotation
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetForceCoversAnnotationThrowsExceptionForInvalidArgument()
{
$this->coverage->setForceCoversAnnotation(null);
}
public function testSetCheckForMissingCoversAnnotation()
{
$this->coverage->setCheckForMissingCoversAnnotation(true);
$this->assertAttributeEquals(
true,
'checkForMissingCoversAnnotation',
$this->coverage
);
}
/**
* @covers PHP_CodeCoverage::setForceCoversAnnotation
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetCheckForMissingCoversAnnotationThrowsExceptionForInvalidArgument()
{
$this->coverage->setCheckForMissingCoversAnnotation(null);
}
public function testSetForceCoversAnnotation()
{
$this->coverage->setForceCoversAnnotation(true);
@@ -173,17 +203,31 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
}
/**
* @covers PHP_CodeCoverage::setAddUncoveredFilesFromWhitelist
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetCheckForUnexecutedCoveredCodeThrowsExceptionForInvalidArgument()
{
$this->coverage->setCheckForUnexecutedCoveredCode(null);
}
public function testSetCheckForUnexecutedCoveredCode()
{
$this->coverage->setCheckForUnexecutedCoveredCode(true);
$this->assertAttributeEquals(
true,
'checkForUnexecutedCoveredCode',
$this->coverage
);
}
/**
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetAddUncoveredFilesFromWhitelistThrowsExceptionForInvalidArgument()
{
$this->coverage->setAddUncoveredFilesFromWhitelist(null);
}
/**
* @covers PHP_CodeCoverage::setAddUncoveredFilesFromWhitelist
*/
public function testSetAddUncoveredFilesFromWhitelist()
{
$this->coverage->setAddUncoveredFilesFromWhitelist(true);
@@ -195,17 +239,13 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
}
/**
* @covers PHP_CodeCoverage::setProcessUncoveredFilesFromWhitelist
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetProcessUncoveredFilesFromWhitelistThrowsExceptionForInvalidArgument()
{
$this->coverage->setProcessUncoveredFilesFromWhitelist(null);
}
/**
* @covers PHP_CodeCoverage::setProcessUncoveredFilesFromWhitelist
*/
public function testSetProcessUncoveredFilesFromWhitelist()
{
$this->coverage->setProcessUncoveredFilesFromWhitelist(true);
@@ -216,49 +256,33 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage::setMapTestClassNameToCoveredClassName
*/
public function testSetMapTestClassNameToCoveredClassName()
public function testSetIgnoreDeprecatedCode()
{
$this->coverage->setMapTestClassNameToCoveredClassName(true);
$this->coverage->setIgnoreDeprecatedCode(true);
$this->assertAttributeEquals(
true,
'mapTestClassNameToCoveredClassName',
'ignoreDeprecatedCode',
$this->coverage
);
}
/**
* @covers PHP_CodeCoverage::setMapTestClassNameToCoveredClassName
* @expectedException PHP_CodeCoverage_Exception
* @expectedException SebastianBergmann\CodeCoverage\Exception
*/
public function testSetMapTestClassNameToCoveredClassNameThrowsExceptionForInvalidArgument()
public function testSetIgnoreDeprecatedCodeThrowsExceptionForInvalidArgument()
{
$this->coverage->setMapTestClassNameToCoveredClassName(null);
$this->coverage->setIgnoreDeprecatedCode(null);
}
/**
* @covers PHP_CodeCoverage::clear
*/
public function testClear()
{
$this->coverage->clear();
$this->assertAttributeEquals(null, 'currentId', $this->coverage);
$this->assertAttributeEquals(array(), 'data', $this->coverage);
$this->assertAttributeEquals(array(), 'tests', $this->coverage);
$this->assertAttributeEquals([], 'data', $this->coverage);
$this->assertAttributeEquals([], 'tests', $this->coverage);
}
/**
* @covers PHP_CodeCoverage::start
* @covers PHP_CodeCoverage::stop
* @covers PHP_CodeCoverage::append
* @covers PHP_CodeCoverage::applyListsFilter
* @covers PHP_CodeCoverage::initializeFilesThatAreSeenTheFirstTime
* @covers PHP_CodeCoverage::applyCoversAnnotationFilter
* @covers PHP_CodeCoverage::getTests
*/
public function testCollect()
{
$coverage = $this->getCoverageForBankAccount();
@@ -268,27 +292,17 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
$coverage->getData()
);
if (version_compare(PHPUnit_Runner_Version::id(), '4.7', '>=')) {
$size = 'unknown';
} else {
$size = 'small';
}
$this->assertEquals(
array(
'BankAccountTest::testBalanceIsInitiallyZero' => array('size' => $size, 'status' => null),
'BankAccountTest::testBalanceCannotBecomeNegative' => array('size' => $size, 'status' => null),
'BankAccountTest::testBalanceCannotBecomeNegative2' => array('size' => $size, 'status' => null),
'BankAccountTest::testDepositWithdrawMoney' => array('size' => $size, 'status' => null)
),
[
'BankAccountTest::testBalanceIsInitiallyZero' => ['size' => 'unknown', 'status' => null],
'BankAccountTest::testBalanceCannotBecomeNegative' => ['size' => 'unknown', 'status' => null],
'BankAccountTest::testBalanceCannotBecomeNegative2' => ['size' => 'unknown', 'status' => null],
'BankAccountTest::testDepositWithdrawMoney' => ['size' => 'unknown', 'status' => null]
],
$coverage->getTests()
);
}
/**
* @covers PHP_CodeCoverage::getData
* @covers PHP_CodeCoverage::merge
*/
public function testMerge()
{
$coverage = $this->getCoverageForBankAccountForFirstTwoTests();
@@ -300,15 +314,11 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage::getData
* @covers PHP_CodeCoverage::merge
*/
public function testMerge2()
{
$coverage = new PHP_CodeCoverage(
$this->getMock('PHP_CodeCoverage_Driver_Xdebug'),
new PHP_CodeCoverage_Filter
$coverage = new CodeCoverage(
$this->createMock(Xdebug::class),
new Filter
);
$coverage->merge($this->getCoverageForBankAccount());
@@ -319,13 +329,10 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage::getLinesToBeIgnored
*/
public function testGetLinesToBeIgnored()
{
$this->assertEquals(
array(
[
1,
3,
4,
@@ -360,7 +367,7 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
36,
37,
38
),
],
$this->getLinesToBeIgnored()->invoke(
$this->coverage,
TEST_FILES_PATH . 'source_with_ignore.php'
@@ -368,13 +375,10 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage::getLinesToBeIgnored
*/
public function testGetLinesToBeIgnored2()
{
$this->assertEquals(
array(1, 5),
[1, 5],
$this->getLinesToBeIgnored()->invoke(
$this->coverage,
TEST_FILES_PATH . 'source_without_ignore.php'
@@ -382,13 +386,10 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage::getLinesToBeIgnored
*/
public function testGetLinesToBeIgnored3()
{
$this->assertEquals(
array(
[
1,
2,
3,
@@ -400,7 +401,7 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
16,
19,
20
),
],
$this->getLinesToBeIgnored()->invoke(
$this->coverage,
TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php'
@@ -408,13 +409,10 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
);
}
/**
* @covers PHP_CodeCoverage::getLinesToBeIgnored
*/
public function testGetLinesToBeIgnoredOneLineAnnotations()
{
$this->assertEquals(
array(
[
1,
2,
3,
@@ -426,8 +424,6 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
9,
10,
11,
12,
13,
14,
15,
16,
@@ -446,7 +442,7 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
33,
34,
37
),
],
$this->getLinesToBeIgnored()->invoke(
$this->coverage,
TEST_FILES_PATH . 'source_with_oneline_annotations.php'
@@ -455,12 +451,12 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
}
/**
* @return ReflectionMethod
* @return \ReflectionMethod
*/
private function getLinesToBeIgnored()
{
$getLinesToBeIgnored = new ReflectionMethod(
'PHP_CodeCoverage',
$getLinesToBeIgnored = new \ReflectionMethod(
'SebastianBergmann\CodeCoverage\CodeCoverage',
'getLinesToBeIgnored'
);
@@ -469,19 +465,96 @@ class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
return $getLinesToBeIgnored;
}
/**
* @covers PHP_CodeCoverage::getLinesToBeIgnored
*/
public function testGetLinesToBeIgnoredWhenIgnoreIsDisabled()
{
$this->coverage->setDisableIgnoredLines(true);
$this->assertEquals(
array(),
[
7,
11,
12,
13,
16,
17,
18,
19,
20,
21,
22,
23,
26,
27,
32,
33,
34,
35,
36,
37
],
$this->getLinesToBeIgnored()->invoke(
$this->coverage,
TEST_FILES_PATH . 'source_with_ignore.php'
)
);
}
/**
* @expectedException SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException
*/
public function testAppendThrowsExceptionIfCoveredCodeWasNotExecuted()
{
$this->coverage->filter()->addDirectoryToWhitelist(TEST_FILES_PATH);
$this->coverage->setCheckForUnexecutedCoveredCode(true);
$data = [
TEST_FILES_PATH . 'BankAccount.php' => [
29 => -1,
31 => -1
]
];
$linesToBeCovered = [
TEST_FILES_PATH . 'BankAccount.php' => [
22,
24
]
];
$linesToBeUsed = [];
$this->coverage->append($data, 'File1.php', true, $linesToBeCovered, $linesToBeUsed);
}
/**
* @expectedException SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException
*/
public function testAppendThrowsExceptionIfUsedCodeWasNotExecuted()
{
$this->coverage->filter()->addDirectoryToWhitelist(TEST_FILES_PATH);
$this->coverage->setCheckForUnexecutedCoveredCode(true);
$data = [
TEST_FILES_PATH . 'BankAccount.php' => [
29 => -1,
31 => -1
]
];
$linesToBeCovered = [
TEST_FILES_PATH . 'BankAccount.php' => [
29,
31
]
];
$linesToBeUsed = [
TEST_FILES_PATH . 'BankAccount.php' => [
22,
24
]
];
$this->coverage->append($data, 'File1.php', true, $linesToBeCovered, $linesToBeUsed);
}
}

View File

@@ -0,0 +1,49 @@
<?php
/*
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeCoverage\Report;
use SebastianBergmann\CodeCoverage\TestCase;
/**
* @covers SebastianBergmann\CodeCoverage\Report\Crap4j
*/
class Crap4jTest extends TestCase
{
public function testForBankAccountTest()
{
$crap4j = new Crap4j;
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'BankAccount-crap4j.xml',
$crap4j->process($this->getCoverageForBankAccount(), null, 'BankAccount')
);
}
public function testForFileWithIgnoredLines()
{
$crap4j = new Crap4j;
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'ignored-lines-crap4j.xml',
$crap4j->process($this->getCoverageForFileWithIgnoredLines(), null, 'CoverageForFileWithIgnoredLines')
);
}
public function testForClassWithAnonymousFunction()
{
$crap4j = new Crap4j;
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'class-with-anonymous-function-crap4j.xml',
$crap4j->process($this->getCoverageForClassWithAnonymousFunction(), null, 'CoverageForClassWithAnonymousFunction')
);
}
}

View File

@@ -1,6 +1,6 @@
<?php
/*
* This file is part of the PHP_CodeCoverage package.
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
@@ -8,29 +8,27 @@
* file that was distributed with this source code.
*/
if (!defined('TEST_FILES_PATH')) {
define(
'TEST_FILES_PATH',
dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR .
'_files' . DIRECTORY_SEPARATOR
);
}
namespace SebastianBergmann\CodeCoverage;
/**
* Tests for the PHP_CodeCoverage_Filter class.
*
* @since Class available since Release 1.0.0
*/
class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
use PHPUnit\Framework\TestCase;
class FilterTest extends TestCase
{
protected $filter;
protected $files;
/**
* @var Filter
*/
private $filter;
/**
* @var array
*/
private $files = [];
protected function setUp()
{
$this->filter = unserialize('O:23:"PHP_CodeCoverage_Filter":0:{}');
$this->filter = unserialize('O:37:"SebastianBergmann\CodeCoverage\Filter":0:{}');
$this->files = array(
$this->files = [
TEST_FILES_PATH . 'BankAccount.php',
TEST_FILES_PATH . 'BankAccountTest.php',
TEST_FILES_PATH . 'CoverageClassExtendedTest.php',
@@ -72,112 +70,38 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
TEST_FILES_PATH . 'source_with_oneline_annotations.php',
TEST_FILES_PATH . 'source_without_ignore.php',
TEST_FILES_PATH . 'source_without_namespace.php'
);
];
}
/**
* @covers PHP_CodeCoverage_Filter::addFileToBlacklist
* @covers PHP_CodeCoverage_Filter::getBlacklist
*/
public function testAddingAFileToTheBlacklistWorks()
{
$this->filter->addFileToBlacklist($this->files[0]);
$this->assertEquals(
array($this->files[0]),
$this->filter->getBlacklist()
);
}
/**
* @covers PHP_CodeCoverage_Filter::removeFileFromBlacklist
* @covers PHP_CodeCoverage_Filter::getBlacklist
*/
public function testRemovingAFileFromTheBlacklistWorks()
{
$this->filter->addFileToBlacklist($this->files[0]);
$this->filter->removeFileFromBlacklist($this->files[0]);
$this->assertEquals(array(), $this->filter->getBlacklist());
}
/**
* @covers PHP_CodeCoverage_Filter::addDirectoryToBlacklist
* @covers PHP_CodeCoverage_Filter::getBlacklist
* @depends testAddingAFileToTheBlacklistWorks
*/
public function testAddingADirectoryToTheBlacklistWorks()
{
$this->filter->addDirectoryToBlacklist(TEST_FILES_PATH);
$blacklist = $this->filter->getBlacklist();
sort($blacklist);
$this->assertEquals($this->files, $blacklist);
}
/**
* @covers PHP_CodeCoverage_Filter::addFilesToBlacklist
* @covers PHP_CodeCoverage_Filter::getBlacklist
*/
public function testAddingFilesToTheBlacklistWorks()
{
$facade = new File_Iterator_Facade;
$files = $facade->getFilesAsArray(
TEST_FILES_PATH,
$suffixes = '.php'
);
$this->filter->addFilesToBlacklist($files);
$blacklist = $this->filter->getBlacklist();
sort($blacklist);
$this->assertEquals($this->files, $blacklist);
}
/**
* @covers PHP_CodeCoverage_Filter::removeDirectoryFromBlacklist
* @covers PHP_CodeCoverage_Filter::getBlacklist
* @depends testAddingADirectoryToTheBlacklistWorks
*/
public function testRemovingADirectoryFromTheBlacklistWorks()
{
$this->filter->addDirectoryToBlacklist(TEST_FILES_PATH);
$this->filter->removeDirectoryFromBlacklist(TEST_FILES_PATH);
$this->assertEquals(array(), $this->filter->getBlacklist());
}
/**
* @covers PHP_CodeCoverage_Filter::addFileToWhitelist
* @covers PHP_CodeCoverage_Filter::getWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::addFileToWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::getWhitelist
*/
public function testAddingAFileToTheWhitelistWorks()
{
$this->filter->addFileToWhitelist($this->files[0]);
$this->assertEquals(
array($this->files[0]),
[$this->files[0]],
$this->filter->getWhitelist()
);
}
/**
* @covers PHP_CodeCoverage_Filter::removeFileFromWhitelist
* @covers PHP_CodeCoverage_Filter::getWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::removeFileFromWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::getWhitelist
*/
public function testRemovingAFileFromTheWhitelistWorks()
{
$this->filter->addFileToWhitelist($this->files[0]);
$this->filter->removeFileFromWhitelist($this->files[0]);
$this->assertEquals(array(), $this->filter->getWhitelist());
$this->assertEquals([], $this->filter->getWhitelist());
}
/**
* @covers PHP_CodeCoverage_Filter::addDirectoryToWhitelist
* @covers PHP_CodeCoverage_Filter::getWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::addDirectoryToWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::getWhitelist
* @depends testAddingAFileToTheWhitelistWorks
*/
public function testAddingADirectoryToTheWhitelistWorks()
@@ -191,13 +115,14 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
}
/**
* @covers PHP_CodeCoverage_Filter::addFilesToWhitelist
* @covers PHP_CodeCoverage_Filter::getBlacklist
* @covers SebastianBergmann\CodeCoverage\Filter::addFilesToWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::getWhitelist
*/
public function testAddingFilesToTheWhitelistWorks()
{
$facade = new File_Iterator_Facade;
$files = $facade->getFilesAsArray(
$facade = new \File_Iterator_Facade;
$files = $facade->getFilesAsArray(
TEST_FILES_PATH,
$suffixes = '.php'
);
@@ -211,8 +136,8 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
}
/**
* @covers PHP_CodeCoverage_Filter::removeDirectoryFromWhitelist
* @covers PHP_CodeCoverage_Filter::getWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::removeDirectoryFromWhitelist
* @covers SebastianBergmann\CodeCoverage\Filter::getWhitelist
* @depends testAddingADirectoryToTheWhitelistWorks
*/
public function testRemovingADirectoryFromTheWhitelistWorks()
@@ -220,11 +145,11 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
$this->filter->addDirectoryToWhitelist(TEST_FILES_PATH);
$this->filter->removeDirectoryFromWhitelist(TEST_FILES_PATH);
$this->assertEquals(array(), $this->filter->getWhitelist());
$this->assertEquals([], $this->filter->getWhitelist());
}
/**
* @covers PHP_CodeCoverage_Filter::isFile
* @covers SebastianBergmann\CodeCoverage\Filter::isFile
*/
public function testIsFile()
{
@@ -238,16 +163,7 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
}
/**
* @covers PHP_CodeCoverage_Filter::isFiltered
*/
public function testBlacklistedFileIsFiltered()
{
$this->filter->addFileToBlacklist($this->files[0]);
$this->assertTrue($this->filter->isFiltered($this->files[0]));
}
/**
* @covers PHP_CodeCoverage_Filter::isFiltered
* @covers SebastianBergmann\CodeCoverage\Filter::isFiltered
*/
public function testWhitelistedFileIsNotFiltered()
{
@@ -256,7 +172,7 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
}
/**
* @covers PHP_CodeCoverage_Filter::isFiltered
* @covers SebastianBergmann\CodeCoverage\Filter::isFiltered
*/
public function testNotWhitelistedFileIsFiltered()
{
@@ -265,8 +181,8 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
}
/**
* @covers PHP_CodeCoverage_Filter::isFiltered
* @covers PHP_CodeCoverage_Filter::isFile
* @covers SebastianBergmann\CodeCoverage\Filter::isFiltered
* @covers SebastianBergmann\CodeCoverage\Filter::isFile
*/
public function testNonFilesAreFiltered()
{
@@ -276,6 +192,5 @@ class PHP_CodeCoverage_FilterTest extends PHPUnit_Framework_TestCase
$this->assertTrue($this->filter->isFiltered('runtime-created function'));
$this->assertTrue($this->filter->isFiltered('assert code'));
$this->assertTrue($this->filter->isFiltered('regexp code'));
$this->assertFalse($this->filter->isFiltered(__FILE__));
}
}

View File

@@ -0,0 +1,103 @@
<?php
/*
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeCoverage\Report\Html;
use SebastianBergmann\CodeCoverage\TestCase;
class HTMLTest extends TestCase
{
private static $TEST_REPORT_PATH_SOURCE;
public static function setUpBeforeClass()
{
parent::setUpBeforeClass();
self::$TEST_REPORT_PATH_SOURCE = TEST_FILES_PATH . 'Report' . DIRECTORY_SEPARATOR . 'HTML';
}
protected function tearDown()
{
parent::tearDown();
$tmpFilesIterator = new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator(self::$TEST_TMP_PATH, \RecursiveDirectoryIterator::SKIP_DOTS),
\RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($tmpFilesIterator as $path => $fileInfo) {
/* @var \SplFileInfo $fileInfo */
$pathname = $fileInfo->getPathname();
$fileInfo->isDir() ? rmdir($pathname) : unlink($pathname);
}
}
public function testForBankAccountTest()
{
$expectedFilesPath = self::$TEST_REPORT_PATH_SOURCE . DIRECTORY_SEPARATOR . 'CoverageForBankAccount';
$report = new Facade;
$report->process($this->getCoverageForBankAccount(), self::$TEST_TMP_PATH);
$this->assertFilesEquals($expectedFilesPath, self::$TEST_TMP_PATH);
}
public function testForFileWithIgnoredLines()
{
$expectedFilesPath = self::$TEST_REPORT_PATH_SOURCE . DIRECTORY_SEPARATOR . 'CoverageForFileWithIgnoredLines';
$report = new Facade;
$report->process($this->getCoverageForFileWithIgnoredLines(), self::$TEST_TMP_PATH);
$this->assertFilesEquals($expectedFilesPath, self::$TEST_TMP_PATH);
}
public function testForClassWithAnonymousFunction()
{
$expectedFilesPath =
self::$TEST_REPORT_PATH_SOURCE . DIRECTORY_SEPARATOR . 'CoverageForClassWithAnonymousFunction';
$report = new Facade;
$report->process($this->getCoverageForClassWithAnonymousFunction(), self::$TEST_TMP_PATH);
$this->assertFilesEquals($expectedFilesPath, self::$TEST_TMP_PATH);
}
/**
* @param string $expectedFilesPath
* @param string $actualFilesPath
*/
private function assertFilesEquals($expectedFilesPath, $actualFilesPath)
{
$expectedFilesIterator = new \FilesystemIterator($expectedFilesPath);
$actualFilesIterator = new \RegexIterator(new \FilesystemIterator($actualFilesPath), '/.html/');
$this->assertEquals(
iterator_count($expectedFilesIterator),
iterator_count($actualFilesIterator),
'Generated files and expected files not match'
);
foreach ($expectedFilesIterator as $path => $fileInfo) {
/* @var \SplFileInfo $fileInfo */
$filename = $fileInfo->getFilename();
$actualFile = $actualFilesPath . DIRECTORY_SEPARATOR . $filename;
$this->assertFileExists($actualFile);
$this->assertStringMatchesFormatFile(
$fileInfo->getPathname(),
str_replace(PHP_EOL, "\n", file_get_contents($actualFile)),
"${filename} not match"
);
}
}
}

View File

@@ -0,0 +1,49 @@
<?php
/*
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeCoverage\Report;
use SebastianBergmann\CodeCoverage\TestCase;
/**
* @covers SebastianBergmann\CodeCoverage\Report\Text
*/
class TextTest extends TestCase
{
public function testTextForBankAccountTest()
{
$text = new Text(50, 90, false, false);
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'BankAccount-text.txt',
str_replace(PHP_EOL, "\n", $text->process($this->getCoverageForBankAccount()))
);
}
public function testTextForFileWithIgnoredLines()
{
$text = new Text(50, 90, false, false);
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'ignored-lines-text.txt',
str_replace(PHP_EOL, "\n", $text->process($this->getCoverageForFileWithIgnoredLines()))
);
}
public function testTextForClassWithAnonymousFunction()
{
$text = new Text(50, 90, false, false);
$this->assertStringMatchesFormatFile(
TEST_FILES_PATH . 'class-with-anonymous-function-text.txt',
str_replace(PHP_EOL, "\n", $text->process($this->getCoverageForClassWithAnonymousFunction()))
);
}
}

View File

@@ -0,0 +1,29 @@
<?php
/*
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeCoverage;
use PHPUnit\Framework\TestCase;
/**
* @covers SebastianBergmann\CodeCoverage\Util
*/
class UtilTest extends TestCase
{
public function testPercent()
{
$this->assertEquals(100, Util::percent(100, 0));
$this->assertEquals(100, Util::percent(100, 100));
$this->assertEquals(
'100.00%',
Util::percent(100, 100, true)
);
}
}

View File

@@ -0,0 +1,98 @@
<?php
/*
* This file is part of the php-code-coverage package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeCoverage\Report\Xml;
use SebastianBergmann\CodeCoverage\TestCase;
class XMLTest extends TestCase
{
private static $TEST_REPORT_PATH_SOURCE;
public static function setUpBeforeClass()
{
parent::setUpBeforeClass();
self::$TEST_REPORT_PATH_SOURCE = TEST_FILES_PATH . 'Report' . DIRECTORY_SEPARATOR . 'XML';
}
protected function tearDown()
{
parent::tearDown();
$tmpFilesIterator = new \FilesystemIterator(self::$TEST_TMP_PATH);
foreach ($tmpFilesIterator as $path => $fileInfo) {
/* @var \SplFileInfo $fileInfo */
unlink($fileInfo->getPathname());
}
}
public function testForBankAccountTest()
{
$expectedFilesPath = self::$TEST_REPORT_PATH_SOURCE . DIRECTORY_SEPARATOR . 'CoverageForBankAccount';
$xml = new Facade('1.0.0');
$xml->process($this->getCoverageForBankAccount(), self::$TEST_TMP_PATH);
$this->assertFilesEquals($expectedFilesPath, self::$TEST_TMP_PATH);
}
public function testForFileWithIgnoredLines()
{
$expectedFilesPath = self::$TEST_REPORT_PATH_SOURCE . DIRECTORY_SEPARATOR . 'CoverageForFileWithIgnoredLines';
$xml = new Facade('1.0.0');
$xml->process($this->getCoverageForFileWithIgnoredLines(), self::$TEST_TMP_PATH);
$this->assertFilesEquals($expectedFilesPath, self::$TEST_TMP_PATH);
}
public function testForClassWithAnonymousFunction()
{
$expectedFilesPath = self::$TEST_REPORT_PATH_SOURCE . DIRECTORY_SEPARATOR . 'CoverageForClassWithAnonymousFunction';
$xml = new Facade('1.0.0');
$xml->process($this->getCoverageForClassWithAnonymousFunction(), self::$TEST_TMP_PATH);
$this->assertFilesEquals($expectedFilesPath, self::$TEST_TMP_PATH);
}
/**
* @param string $expectedFilesPath
* @param string $actualFilesPath
*/
private function assertFilesEquals($expectedFilesPath, $actualFilesPath)
{
$expectedFilesIterator = new \FilesystemIterator($expectedFilesPath);
$actualFilesIterator = new \FilesystemIterator($actualFilesPath);
$this->assertEquals(
iterator_count($expectedFilesIterator),
iterator_count($actualFilesIterator),
'Generated files and expected files not match'
);
foreach ($expectedFilesIterator as $path => $fileInfo) {
/* @var \SplFileInfo $fileInfo */
$filename = $fileInfo->getFilename();
$actualFile = $actualFilesPath . DIRECTORY_SEPARATOR . $filename;
$this->assertFileExists($actualFile);
$this->assertStringMatchesFormatFile(
$fileInfo->getPathname(),
file_get_contents($actualFile),
"${filename} not match"
);
}
}
}