3 * This file is part of the php-code-coverage package.
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
11 namespace SebastianBergmann\CodeCoverage;
13 use SebastianBergmann\CodeCoverage\Driver\Driver;
14 use SebastianBergmann\CodeCoverage\Report\Xml\Coverage;
16 abstract class TestCase extends \PHPUnit\Framework\TestCase
18 protected static $TEST_TMP_PATH;
20 public static function setUpBeforeClass(): void
22 self::$TEST_TMP_PATH = TEST_FILES_PATH . 'tmp';
25 protected function getXdebugDataForBankAccount()
29 TEST_FILES_PATH . 'BankAccount.php' => [
46 TEST_FILES_PATH . 'BankAccount.php' => [
54 TEST_FILES_PATH . 'BankAccount.php' => [
62 TEST_FILES_PATH . 'BankAccount.php' => [
77 protected function getCoverageForBankAccount(): CodeCoverage
79 $data = $this->getXdebugDataForBankAccount();
81 $stub = $this->createMock(Driver::class);
83 $stub->expects($this->any())
85 ->will($this->onConsecutiveCalls(
93 $filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
95 $coverage = new CodeCoverage($stub, $filter);
98 new \BankAccountTest('testBalanceIsInitiallyZero'),
104 [TEST_FILES_PATH . 'BankAccount.php' => range(6, 9)]
108 new \BankAccountTest('testBalanceCannotBecomeNegative')
113 [TEST_FILES_PATH . 'BankAccount.php' => range(27, 32)]
117 new \BankAccountTest('testBalanceCannotBecomeNegative2')
122 [TEST_FILES_PATH . 'BankAccount.php' => range(20, 25)]
126 new \BankAccountTest('testDepositWithdrawMoney')
132 TEST_FILES_PATH . 'BankAccount.php' => array_merge(
143 protected function getCoverageForBankAccountForFirstTwoTests(): CodeCoverage
145 $data = $this->getXdebugDataForBankAccount();
147 $stub = $this->createMock(Driver::class);
149 $stub->expects($this->any())
151 ->will($this->onConsecutiveCalls(
156 $filter = new Filter;
157 $filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
159 $coverage = new CodeCoverage($stub, $filter);
162 new \BankAccountTest('testBalanceIsInitiallyZero'),
168 [TEST_FILES_PATH . 'BankAccount.php' => range(6, 9)]
172 new \BankAccountTest('testBalanceCannotBecomeNegative')
177 [TEST_FILES_PATH . 'BankAccount.php' => range(27, 32)]
183 protected function getCoverageForBankAccountForLastTwoTests()
185 $data = $this->getXdebugDataForBankAccount();
187 $stub = $this->createMock(Driver::class);
189 $stub->expects($this->any())
191 ->will($this->onConsecutiveCalls(
196 $filter = new Filter;
197 $filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php');
199 $coverage = new CodeCoverage($stub, $filter);
202 new \BankAccountTest('testBalanceCannotBecomeNegative2')
207 [TEST_FILES_PATH . 'BankAccount.php' => range(20, 25)]
211 new \BankAccountTest('testDepositWithdrawMoney')
217 TEST_FILES_PATH . 'BankAccount.php' => array_merge(
228 protected function getExpectedDataArrayForBankAccount(): array
231 TEST_FILES_PATH . 'BankAccount.php' => [
233 0 => 'BankAccountTest::testBalanceIsInitiallyZero',
234 1 => 'BankAccountTest::testDepositWithdrawMoney'
243 0 => 'BankAccountTest::testBalanceCannotBecomeNegative2',
244 1 => 'BankAccountTest::testDepositWithdrawMoney'
247 0 => 'BankAccountTest::testDepositWithdrawMoney',
251 0 => 'BankAccountTest::testBalanceCannotBecomeNegative',
252 1 => 'BankAccountTest::testDepositWithdrawMoney'
255 0 => 'BankAccountTest::testDepositWithdrawMoney'
262 protected function getExpectedDataArrayForBankAccountInReverseOrder(): array
265 TEST_FILES_PATH . 'BankAccount.php' => [
267 0 => 'BankAccountTest::testDepositWithdrawMoney',
268 1 => 'BankAccountTest::testBalanceIsInitiallyZero'
277 0 => 'BankAccountTest::testBalanceCannotBecomeNegative2',
278 1 => 'BankAccountTest::testDepositWithdrawMoney'
281 0 => 'BankAccountTest::testDepositWithdrawMoney',
285 0 => 'BankAccountTest::testDepositWithdrawMoney',
286 1 => 'BankAccountTest::testBalanceCannotBecomeNegative'
289 0 => 'BankAccountTest::testDepositWithdrawMoney'
296 protected function getCoverageForFileWithIgnoredLines(): CodeCoverage
298 $filter = new Filter;
299 $filter->addFileToWhitelist(TEST_FILES_PATH . 'source_with_ignore.php');
301 $coverage = new CodeCoverage(
302 $this->setUpXdebugStubForFileWithIgnoredLines(),
306 $coverage->start('FileWithIgnoredLines', true);
312 protected function setUpXdebugStubForFileWithIgnoredLines(): Driver
314 $stub = $this->createMock(Driver::class);
316 $stub->expects($this->any())
318 ->will($this->returnValue(
320 TEST_FILES_PATH . 'source_with_ignore.php' => [
332 protected function getCoverageForClassWithAnonymousFunction(): CodeCoverage
334 $filter = new Filter;
335 $filter->addFileToWhitelist(TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php');
337 $coverage = new CodeCoverage(
338 $this->setUpXdebugStubForClassWithAnonymousFunction(),
342 $coverage->start('ClassWithAnonymousFunction', true);
348 protected function setUpXdebugStubForClassWithAnonymousFunction(): Driver
350 $stub = $this->createMock(Driver::class);
352 $stub->expects($this->any())
354 ->will($this->returnValue(
356 TEST_FILES_PATH . 'source_with_class_and_anonymous_function.php' => [
373 protected function getCoverageForCrashParsing(): CodeCoverage
375 $filter = new Filter;
376 $filter->addFileToWhitelist(TEST_FILES_PATH . 'Crash.php');
378 // This is a file with invalid syntax, so it isn't executed.
379 return new CodeCoverage(
380 $this->setUpXdebugStubForCrashParsing(),
385 protected function setUpXdebugStubForCrashParsing(): Driver
387 $stub = $this->createMock(Driver::class);
389 $stub->expects($this->any())
391 ->will($this->returnValue([]));