2015-08-17 17:00:26 -07:00
< ? 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 (
2015-10-08 11:40:12 -07:00
'TEST_FILES_PATH' ,
dirname ( dirname ( __FILE__ )) . DIRECTORY_SEPARATOR .
'_files' . DIRECTORY_SEPARATOR
2015-08-17 17:00:26 -07:00
);
}
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 .
*
2015-10-08 11:40:12 -07:00
* @ since Class available since Release 1.0 . 0
2015-08-17 17:00:26 -07:00
*/
class PHP_CodeCoverageTest extends PHP_CodeCoverage_TestCase
{
2015-10-08 11:40:12 -07:00
/**
* @ var PHP_CodeCoverage
*/
2015-08-17 17:00:26 -07:00
private $coverage ;
protected function setUp ()
{
$this -> coverage = new PHP_CodeCoverage ;
}
/**
* @ covers PHP_CodeCoverage :: __construct
* @ covers PHP_CodeCoverage :: filter
*/
public function testConstructor ()
{
$this -> assertAttributeInstanceOf (
2015-10-08 11:40:12 -07:00
'PHP_CodeCoverage_Driver_Xdebug' ,
'driver' ,
$this -> coverage
2015-08-17 17:00:26 -07:00
);
$this -> assertAttributeInstanceOf (
2015-10-08 11:40:12 -07:00
'PHP_CodeCoverage_Filter' ,
'filter' ,
$this -> coverage
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: __construct
* @ covers PHP_CodeCoverage :: filter
*/
public function testConstructor2 ()
{
$filter = new PHP_CodeCoverage_Filter ;
$coverage = new PHP_CodeCoverage ( null , $filter );
$this -> assertAttributeInstanceOf (
2015-10-08 11:40:12 -07:00
'PHP_CodeCoverage_Driver_Xdebug' ,
'driver' ,
$coverage
2015-08-17 17:00:26 -07:00
);
$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 (
2015-10-08 11:40:12 -07:00
true ,
'checkForUnintentionallyCoveredCode' ,
$this -> coverage
2015-08-17 17:00:26 -07:00
);
}
/**
* @ 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 (
2015-10-08 11:40:12 -07:00
true ,
'forceCoversAnnotation' ,
$this -> coverage
2015-08-17 17:00:26 -07:00
);
}
/**
* @ 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 (
2015-10-08 11:40:12 -07:00
true ,
'addUncoveredFilesFromWhitelist' ,
$this -> coverage
2015-08-17 17:00:26 -07:00
);
}
/**
* @ 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 (
2015-10-08 11:40:12 -07:00
true ,
'processUncoveredFilesFromWhitelist' ,
$this -> coverage
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: setMapTestClassNameToCoveredClassName
*/
public function testSetMapTestClassNameToCoveredClassName ()
{
$this -> coverage -> setMapTestClassNameToCoveredClassName ( true );
$this -> assertAttributeEquals (
2015-10-08 11:40:12 -07:00
true ,
'mapTestClassNameToCoveredClassName' ,
$this -> coverage
2015-08-17 17:00:26 -07:00
);
}
/**
* @ 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 (
2015-10-08 11:40:12 -07:00
$this -> getExpectedDataArrayForBankAccount (),
$coverage -> getData ()
2015-08-17 17:00:26 -07:00
);
2015-10-08 11:40:12 -07:00
if ( version_compare ( PHPUnit_Runner_Version :: id (), '4.7' , '>=' )) {
$size = 'unknown' ;
} else {
$size = 'small' ;
}
2015-08-17 17:00:26 -07:00
$this -> assertEquals (
2015-10-08 11:40:12 -07:00
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 ()
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: getData
* @ covers PHP_CodeCoverage :: merge
*/
public function testMerge ()
{
$coverage = $this -> getCoverageForBankAccountForFirstTwoTests ();
$coverage -> merge ( $this -> getCoverageForBankAccountForLastTwoTests ());
$this -> assertEquals (
2015-10-08 11:40:12 -07:00
$this -> getExpectedDataArrayForBankAccount (),
$coverage -> getData ()
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: getData
* @ covers PHP_CodeCoverage :: merge
*/
public function testMerge2 ()
{
$coverage = new PHP_CodeCoverage (
2015-10-08 11:40:12 -07:00
$this -> getMock ( 'PHP_CodeCoverage_Driver_Xdebug' ),
new PHP_CodeCoverage_Filter
2015-08-17 17:00:26 -07:00
);
$coverage -> merge ( $this -> getCoverageForBankAccount ());
$this -> assertEquals (
2015-10-08 11:40:12 -07:00
$this -> getExpectedDataArrayForBankAccount (),
$coverage -> getData ()
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: getLinesToBeIgnored
*/
public function testGetLinesToBeIgnored ()
{
$this -> assertEquals (
2015-10-08 11:40:12 -07:00
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'
)
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: getLinesToBeIgnored
*/
public function testGetLinesToBeIgnored2 ()
{
$this -> assertEquals (
2015-10-08 11:40:12 -07:00
array ( 1 , 5 ),
$this -> getLinesToBeIgnored () -> invoke (
$this -> coverage ,
TEST_FILES_PATH . 'source_without_ignore.php'
)
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: getLinesToBeIgnored
*/
public function testGetLinesToBeIgnored3 ()
{
$this -> assertEquals (
2015-10-08 11:40:12 -07:00
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'
)
2015-08-17 17:00:26 -07:00
);
}
/**
* @ covers PHP_CodeCoverage :: getLinesToBeIgnored
*/
public function testGetLinesToBeIgnoredOneLineAnnotations ()
{
$this -> assertEquals (
2015-10-08 11:40:12 -07:00
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'
)
2015-08-17 17:00:26 -07:00
);
}
/**
* @ return ReflectionMethod
*/
private function getLinesToBeIgnored ()
{
$getLinesToBeIgnored = new ReflectionMethod (
2015-10-08 11:40:12 -07:00
'PHP_CodeCoverage' ,
'getLinesToBeIgnored'
2015-08-17 17:00:26 -07:00
);
$getLinesToBeIgnored -> setAccessible ( true );
return $getLinesToBeIgnored ;
}
2015-10-08 11:40:12 -07:00
/**
* @ 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'
)
);
}
2015-08-17 17:00:26 -07:00
}