| 
<?php/*
 * This file is part of the php-code-coverage package.
 *
 * (c) Sebastian Bergmann <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * 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 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 [
 [
 TEST_FILES_PATH . 'BankAccount.php' => [
 8  => 1,
 9  => -2,
 13 => -1,
 14 => -1,
 15 => -1,
 16 => -1,
 18 => -1,
 22 => -1,
 24 => -1,
 25 => -2,
 29 => -1,
 31 => -1,
 32 => -2
 ]
 ],
 [
 TEST_FILES_PATH . 'BankAccount.php' => [
 8  => 1,
 13 => 1,
 16 => 1,
 29 => 1,
 ]
 ],
 [
 TEST_FILES_PATH . 'BankAccount.php' => [
 8  => 1,
 13 => 1,
 16 => 1,
 22 => 1,
 ]
 ],
 [
 TEST_FILES_PATH . 'BankAccount.php' => [
 8  => 1,
 13 => 1,
 14 => 1,
 15 => 1,
 18 => 1,
 22 => 1,
 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->expects($this->any())
 ->method('stop')
 ->will($this->onConsecutiveCalls(
 $data[0],
 $data[1],
 $data[2],
 $data[3]
 ));
 
 $filter = new Filter;
 $filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
 
 $coverage = new CodeCoverage($stub, $filter);
 
 $coverage->start(
 new \BankAccountTest('testBalanceIsInitiallyZero'),
 true
 );
 
 $coverage->stop(
 true,
 [TEST_FILES_PATH . 'BankAccount.php' => range(6, 9)]
 );
 
 $coverage->start(
 new \BankAccountTest('testBalanceCannotBecomeNegative')
 );
 
 $coverage->stop(
 true,
 [TEST_FILES_PATH . 'BankAccount.php' => range(27, 32)]
 );
 
 $coverage->start(
 new \BankAccountTest('testBalanceCannotBecomeNegative2')
 );
 
 $coverage->stop(
 true,
 [TEST_FILES_PATH . 'BankAccount.php' => range(20, 25)]
 );
 
 $coverage->start(
 new \BankAccountTest('testDepositWithdrawMoney')
 );
 
 $coverage->stop(
 true,
 [
 TEST_FILES_PATH . 'BankAccount.php' => array_merge(
 range(6, 9),
 range(20, 25),
 range(27, 32)
 )
 ]
 );
 
 return $coverage;
 }
 
 protected function getCoverageForBankAccountForFirstTwoTests()
 {
 $data = $this->getXdebugDataForBankAccount();
 
 $stub = $this->createMock(Xdebug::class);
 
 $stub->expects($this->any())
 ->method('stop')
 ->will($this->onConsecutiveCalls(
 $data[0],
 $data[1]
 ));
 
 $filter = new Filter;
 $filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
 
 $coverage = new CodeCoverage($stub, $filter);
 
 $coverage->start(
 new \BankAccountTest('testBalanceIsInitiallyZero'),
 true
 );
 
 $coverage->stop(
 true,
 [TEST_FILES_PATH . 'BankAccount.php' => range(6, 9)]
 );
 
 $coverage->start(
 new \BankAccountTest('testBalanceCannotBecomeNegative')
 );
 
 $coverage->stop(
 true,
 [TEST_FILES_PATH . 'BankAccount.php' => range(27, 32)]
 );
 
 return $coverage;
 }
 
 protected function getCoverageForBankAccountForLastTwoTests()
 {
 $data = $this->getXdebugDataForBankAccount();
 
 $stub = $this->createMock(Xdebug::class);
 
 $stub->expects($this->any())
 ->method('stop')
 ->will($this->onConsecutiveCalls(
 $data[2],
 $data[3]
 ));
 
 $filter = new Filter;
 $filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
 
 $coverage = new CodeCoverage($stub, $filter);
 
 $coverage->start(
 new \BankAccountTest('testBalanceCannotBecomeNegative2')
 );
 
 $coverage->stop(
 true,
 [TEST_FILES_PATH . 'BankAccount.php' => range(20, 25)]
 );
 
 $coverage->start(
 new \BankAccountTest('testDepositWithdrawMoney')
 );
 
 $coverage->stop(
 true,
 [
 TEST_FILES_PATH . 'BankAccount.php' => array_merge(
 range(6, 9),
 range(20, 25),
 range(27, 32)
 )
 ]
 );
 
 return $coverage;
 }
 
 protected function getExpectedDataArrayForBankAccount()
 {
 return [
 TEST_FILES_PATH . 'BankAccount.php' => [
 8 => [
 0 => 'BankAccountTest::testBalanceIsInitiallyZero',
 1 => 'BankAccountTest::testDepositWithdrawMoney'
 ],
 9  => null,
 13 => [],
 14 => [],
 15 => [],
 16 => [],
 18 => [],
 22 => [
 0 => 'BankAccountTest::testBalanceCannotBecomeNegative2',
 1 => 'BankAccountTest::testDepositWithdrawMoney'
 ],
 24 => [
 0 => 'BankAccountTest::testDepositWithdrawMoney',
 ],
 25 => null,
 29 => [
 0 => 'BankAccountTest::testBalanceCannotBecomeNegative',
 1 => 'BankAccountTest::testDepositWithdrawMoney'
 ],
 31 => [
 0 => 'BankAccountTest::testDepositWithdrawMoney'
 ],
 32 => null
 ]
 ];
 }
 
 protected function getCoverageForFileWithIgnoredLines()
 {
 $filter = new Filter;
 $filter->addFileToWhitelist(TEST_FILES_PATH . 'source_with_ignore.php');
 
 $coverage = new CodeCoverage(
 $this->setUpXdebugStubForFileWithIgnoredLines(),
 $filter
 );
 
 $coverage->start('FileWithIgnoredLines', true);
 $coverage->stop();
 
 return $coverage;
 }
 
 protected function setUpXdebugStubForFileWithIgnoredLines()
 {
 $stub = $this->createMock(Xdebug::class);
 
 $stub->expects($this->any())
 ->method('stop')
 ->will($this->returnValue(
 [
 TEST_FILES_PATH . 'source_with_ignore.php' => [
 2 => 1,
 4 => -1,
 6 => -1,
 7 => 1
 ]
 ]
 ));
 
 return $stub;
 }
 
 protected function getCoverageForClassWithAnonymousFunction()
 {
 $filter = new Filter;
 $filter->addFileToWhitelist(TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php');
 
 $coverage = new CodeCoverage(
 $this->setUpXdebugStubForClassWithAnonymousFunction(),
 $filter
 );
 
 $coverage->start('ClassWithAnonymousFunction', true);
 $coverage->stop();
 
 return $coverage;
 }
 
 protected function setUpXdebugStubForClassWithAnonymousFunction()
 {
 $stub = $this->createMock(Xdebug::class);
 
 $stub->expects($this->any())
 ->method('stop')
 ->will($this->returnValue(
 [
 TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php' => [
 7  => 1,
 9  => 1,
 10 => -1,
 11 => 1,
 12 => 1,
 13 => 1,
 14 => 1,
 17 => 1,
 18 => 1
 ]
 ]
 ));
 
 return $stub;
 }
 }
 
 |