You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
488 lines
13 KiB
488 lines
13 KiB
<?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.
|
|
*/
|
|
|
|
if (!defined('TEST_FILES_PATH')) {
|
|
define(
|
|
'TEST_FILES_PATH',
|
|
dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
|
|
'_files' . DIRECTORY_SEPARATOR
|
|
);
|
|
}
|
|
|
|
require_once TEST_FILES_PATH . '../TestCase.php';
|
|
require_once TEST_FILES_PATH . 'BankAccount.php';
|
|
require_once TEST_FILES_PATH . 'BankAccountTest.php';
|
|
|
|
/**
|
|
* Tests for the PHP_CodeCoverage class.
|
|
*
|
|
* @since Class available since Release 1.0.0
|
|
*/
|
|
class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
|
|
{
|
|
/**
|
|
* @var PHP_CodeCoverage
|
|
*/
|
|
private $coverage;
|
|
|
|
protected function setUp()
|
|
{
|
|
$this->coverage = new PHP_CodeCoverage;
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::__construct
|
|
* @covers PHP_CodeCoverage::filter
|
|
*/
|
|
public function testConstructor()
|
|
{
|
|
$this->assertAttributeInstanceOf(
|
|
'PHP_CodeCoverage_Driver_Xdebug',
|
|
'driver',
|
|
$this->coverage
|
|
);
|
|
|
|
$this->assertAttributeInstanceOf(
|
|
'PHP_CodeCoverage_Filter',
|
|
'filter',
|
|
$this->coverage
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::__construct
|
|
* @covers PHP_CodeCoverage::filter
|
|
*/
|
|
public function testConstructor2()
|
|
{
|
|
$filter = new PHP_CodeCoverage_Filter;
|
|
$coverage = new PHP_CodeCoverage(null, $filter);
|
|
|
|
$this->assertAttributeInstanceOf(
|
|
'PHP_CodeCoverage_Driver_Xdebug',
|
|
'driver',
|
|
$coverage
|
|
);
|
|
|
|
$this->assertSame($filter, $coverage->filter());
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::start
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testStartThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->start(null, array(), null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::stop
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testStopThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->stop(null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::stop
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testStopThrowsExceptionForInvalidArgument2()
|
|
{
|
|
$this->coverage->stop(true, null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::append
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testAppendThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->append(array(), null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setCacheTokens
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testSetCacheTokensThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->setCacheTokens(null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setCacheTokens
|
|
*/
|
|
public function testSetCacheTokens()
|
|
{
|
|
$this->coverage->setCacheTokens(true);
|
|
$this->assertAttributeEquals(true, 'cacheTokens', $this->coverage);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setCheckForUnintentionallyCoveredCode
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testSetCheckForUnintentionallyCoveredCodeThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->setCheckForUnintentionallyCoveredCode(null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setCheckForUnintentionallyCoveredCode
|
|
*/
|
|
public function testSetCheckForUnintentionallyCoveredCode()
|
|
{
|
|
$this->coverage->setCheckForUnintentionallyCoveredCode(true);
|
|
$this->assertAttributeEquals(
|
|
true,
|
|
'checkForUnintentionallyCoveredCode',
|
|
$this->coverage
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setForceCoversAnnotation
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testSetForceCoversAnnotationThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->setForceCoversAnnotation(null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setForceCoversAnnotation
|
|
*/
|
|
public function testSetForceCoversAnnotation()
|
|
{
|
|
$this->coverage->setForceCoversAnnotation(true);
|
|
$this->assertAttributeEquals(
|
|
true,
|
|
'forceCoversAnnotation',
|
|
$this->coverage
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setAddUncoveredFilesFromWhitelist
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testSetAddUncoveredFilesFromWhitelistThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->setAddUncoveredFilesFromWhitelist(null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setAddUncoveredFilesFromWhitelist
|
|
*/
|
|
public function testSetAddUncoveredFilesFromWhitelist()
|
|
{
|
|
$this->coverage->setAddUncoveredFilesFromWhitelist(true);
|
|
$this->assertAttributeEquals(
|
|
true,
|
|
'addUncoveredFilesFromWhitelist',
|
|
$this->coverage
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setProcessUncoveredFilesFromWhitelist
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testSetProcessUncoveredFilesFromWhitelistThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->setProcessUncoveredFilesFromWhitelist(null);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setProcessUncoveredFilesFromWhitelist
|
|
*/
|
|
public function testSetProcessUncoveredFilesFromWhitelist()
|
|
{
|
|
$this->coverage->setProcessUncoveredFilesFromWhitelist(true);
|
|
$this->assertAttributeEquals(
|
|
true,
|
|
'processUncoveredFilesFromWhitelist',
|
|
$this->coverage
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setMapTestClassNameToCoveredClassName
|
|
*/
|
|
public function testSetMapTestClassNameToCoveredClassName()
|
|
{
|
|
$this->coverage->setMapTestClassNameToCoveredClassName(true);
|
|
$this->assertAttributeEquals(
|
|
true,
|
|
'mapTestClassNameToCoveredClassName',
|
|
$this->coverage
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::setMapTestClassNameToCoveredClassName
|
|
* @expectedException PHP_CodeCoverage_Exception
|
|
*/
|
|
public function testSetMapTestClassNameToCoveredClassNameThrowsExceptionForInvalidArgument()
|
|
{
|
|
$this->coverage->setMapTestClassNameToCoveredClassName(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);
|
|
}
|
|
|
|
/**
|
|
* @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();
|
|
|
|
$this->assertEquals(
|
|
$this->getExpectedDataArrayForBankAccount(),
|
|
$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)
|
|
),
|
|
$coverage->getTests()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::getData
|
|
* @covers PHP_CodeCoverage::merge
|
|
*/
|
|
public function testMerge()
|
|
{
|
|
$coverage = $this->getCoverageForBankAccountForFirstTwoTests();
|
|
$coverage->merge($this->getCoverageForBankAccountForLastTwoTests());
|
|
|
|
$this->assertEquals(
|
|
$this->getExpectedDataArrayForBankAccount(),
|
|
$coverage->getData()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @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->merge($this->getCoverageForBankAccount());
|
|
|
|
$this->assertEquals(
|
|
$this->getExpectedDataArrayForBankAccount(),
|
|
$coverage->getData()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::getLinesToBeIgnored
|
|
*/
|
|
public function testGetLinesToBeIgnored()
|
|
{
|
|
$this->assertEquals(
|
|
array(
|
|
1,
|
|
3,
|
|
4,
|
|
5,
|
|
7,
|
|
8,
|
|
9,
|
|
10,
|
|
11,
|
|
12,
|
|
13,
|
|
14,
|
|
15,
|
|
16,
|
|
17,
|
|
18,
|
|
19,
|
|
20,
|
|
21,
|
|
22,
|
|
23,
|
|
24,
|
|
25,
|
|
26,
|
|
27,
|
|
28,
|
|
30,
|
|
32,
|
|
33,
|
|
34,
|
|
35,
|
|
36,
|
|
37,
|
|
38
|
|
),
|
|
$this->getLinesToBeIgnored()->invoke(
|
|
$this->coverage,
|
|
TEST_FILES_PATH . 'source_with_ignore.php'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::getLinesToBeIgnored
|
|
*/
|
|
public function testGetLinesToBeIgnored2()
|
|
{
|
|
$this->assertEquals(
|
|
array(1, 5),
|
|
$this->getLinesToBeIgnored()->invoke(
|
|
$this->coverage,
|
|
TEST_FILES_PATH . 'source_without_ignore.php'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::getLinesToBeIgnored
|
|
*/
|
|
public function testGetLinesToBeIgnored3()
|
|
{
|
|
$this->assertEquals(
|
|
array(
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
8,
|
|
11,
|
|
15,
|
|
16,
|
|
19,
|
|
20
|
|
),
|
|
$this->getLinesToBeIgnored()->invoke(
|
|
$this->coverage,
|
|
TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::getLinesToBeIgnored
|
|
*/
|
|
public function testGetLinesToBeIgnoredOneLineAnnotations()
|
|
{
|
|
$this->assertEquals(
|
|
array(
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
6,
|
|
7,
|
|
8,
|
|
9,
|
|
10,
|
|
11,
|
|
12,
|
|
13,
|
|
14,
|
|
15,
|
|
16,
|
|
18,
|
|
20,
|
|
21,
|
|
23,
|
|
24,
|
|
25,
|
|
27,
|
|
28,
|
|
29,
|
|
30,
|
|
31,
|
|
32,
|
|
33,
|
|
34,
|
|
37
|
|
),
|
|
$this->getLinesToBeIgnored()->invoke(
|
|
$this->coverage,
|
|
TEST_FILES_PATH . 'source_with_oneline_annotations.php'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return ReflectionMethod
|
|
*/
|
|
private function getLinesToBeIgnored()
|
|
{
|
|
$getLinesToBeIgnored = new ReflectionMethod(
|
|
'PHP_CodeCoverage',
|
|
'getLinesToBeIgnored'
|
|
);
|
|
|
|
$getLinesToBeIgnored->setAccessible(true);
|
|
|
|
return $getLinesToBeIgnored;
|
|
}
|
|
|
|
/**
|
|
* @covers PHP_CodeCoverage::getLinesToBeIgnored
|
|
*/
|
|
public function testGetLinesToBeIgnoredWhenIgnoreIsDisabled()
|
|
{
|
|
$this->coverage->setDisableIgnoredLines(true);
|
|
|
|
$this->assertEquals(
|
|
array(),
|
|
$this->getLinesToBeIgnored()->invoke(
|
|
$this->coverage,
|
|
TEST_FILES_PATH . 'source_with_ignore.php'
|
|
)
|
|
);
|
|
}
|
|
}
|