344 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			344 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?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 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;
 | 
						|
    }
 | 
						|
}
 |