91 lines
3.3 KiB
PHP
91 lines
3.3 KiB
PHP
<?php
|
|
/*
|
|
* This file is part of PHPUnit.
|
|
*
|
|
* (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 PHPUnit\Framework;
|
|
|
|
class TestResultTest extends TestCase
|
|
{
|
|
public function testRemoveListenerRemovesOnlyExpectedListener(): void
|
|
{
|
|
$result = new TestResult;
|
|
$firstListener = $this->getMockBuilder(TestListener::class)->getMock();
|
|
$secondListener = $this->getMockBuilder(TestListener::class)->getMock();
|
|
$thirdListener = $this->getMockBuilder(TestListener::class)->getMock();
|
|
$result->addListener($firstListener);
|
|
$result->addListener($secondListener);
|
|
$result->addListener($thirdListener);
|
|
$result->addListener($firstListener);
|
|
$this->assertAttributeEquals(
|
|
[$firstListener, $secondListener, $thirdListener, $firstListener],
|
|
'listeners',
|
|
$result
|
|
);
|
|
$result->removeListener($firstListener);
|
|
$this->assertAttributeEquals(
|
|
[1 => $secondListener, 2 => $thirdListener],
|
|
'listeners',
|
|
$result
|
|
);
|
|
}
|
|
|
|
public function testAddErrorOfTypeIncompleteTest(): void
|
|
{
|
|
$time = 17;
|
|
$throwable = new IncompleteTestError;
|
|
$result = new TestResult;
|
|
$test = $this->getMockBuilder(Test::class)->getMock();
|
|
$listener = $this->getMockBuilder(TestListener::class)->getMock();
|
|
|
|
$listener->expects($this->exactly(2))
|
|
->method('addIncompleteTest')
|
|
->with($test, $throwable, $time);
|
|
$result->addListener($listener);
|
|
//No Stop
|
|
$result->stopOnIncomplete(false);
|
|
$result->addError($test, $throwable, $time);
|
|
$this->assertAttributeEquals($time, 'time', $result);
|
|
$this->assertAttributeCount(1, 'notImplemented', $result);
|
|
$this->assertAttributeEquals(false, 'stop', $result);
|
|
//Stop
|
|
$result->stopOnIncomplete(true);
|
|
$result->addError($test, $throwable, $time);
|
|
$this->assertAttributeEquals(2 * $time, 'time', $result);
|
|
$this->assertAttributeCount(2, 'notImplemented', $result);
|
|
$this->assertAttributeEquals(true, 'stop', $result);
|
|
//Final checks
|
|
$this->assertAttributeEquals(true, 'lastTestFailed', $result);
|
|
$this->assertAttributeContainsOnly(TestFailure::class, 'notImplemented', $result);
|
|
}
|
|
|
|
public function canSkipCoverageProvider(): array
|
|
{
|
|
return [
|
|
['CoverageClassTest', false],
|
|
['CoverageClassWithoutAnnotationsTest', false],
|
|
['CoverageCoversOverridesCoversNothingTest', false],
|
|
['CoverageClassNothingTest', true],
|
|
['CoverageMethodNothingTest', true],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider canSkipCoverageProvider
|
|
*/
|
|
public function testCanSkipCoverage($testCase, $expectedCanSkip): void
|
|
{
|
|
require_once TEST_FILES_PATH . $testCase . '.php';
|
|
|
|
$test = new $testCase('testSomething');
|
|
$coverageRequired = TestResult::isAnyCoverageRequired($test);
|
|
$canSkipCoverage = !$coverageRequired;
|
|
|
|
$this->assertEquals($expectedCanSkip, $canSkipCoverage);
|
|
}
|
|
}
|