From 59752708f26704cbe7e4a18b72055b2347b2c554 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 21 May 2019 19:37:32 +0800 Subject: [PATCH] Fix #3697 Respect @coversNothing at coverage driver start --- src/Framework/TestResult.php | 6 +++++ ...OverridesCoversNothingSameDocblockTest.php | 24 +++++++++++++++++++ tests/_files/CoverageNothingClassTest.php | 22 +++++++++++++++++ ...Test.php => CoverageNothingMethodTest.php} | 3 +-- tests/unit/Framework/TestResultTest.php | 12 ++++++---- tests/unit/Util/TestTest.php | 10 ++++++-- 6 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 tests/_files/CoverageCoversOverridesCoversNothingSameDocblockTest.php create mode 100644 tests/_files/CoverageNothingClassTest.php rename tests/_files/{CoverageNothingTest.php => CoverageNothingMethodTest.php} (83%) diff --git a/src/Framework/TestResult.php b/src/Framework/TestResult.php index d8436a7edf0..4a7cc35f4cb 100644 --- a/src/Framework/TestResult.php +++ b/src/Framework/TestResult.php @@ -203,6 +203,12 @@ public static function isAnyCoverageRequired(TestCase $test): bool return true; } + // If there are no explicit covers, and the test method is + // marked as covers nothing, all coverage can be skipped + if (isset($annotations['method']['coversNothing'])) { + return false; + } + // If there are no explicit covers, and the test class is // marked as covers nothing, all coverage can be skipped if (isset($annotations['class']['coversNothing'])) { diff --git a/tests/_files/CoverageCoversOverridesCoversNothingSameDocblockTest.php b/tests/_files/CoverageCoversOverridesCoversNothingSameDocblockTest.php new file mode 100644 index 00000000000..02148b03e60 --- /dev/null +++ b/tests/_files/CoverageCoversOverridesCoversNothingSameDocblockTest.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +class CoverageCoversOverridesCoversNothingSameDocblockTest extends TestCase +{ + /** + * @covers CoveredClass::publicMethod + * @coversNothing + */ + public function testSomething(): void + { + error_log("CoerageNothingTest"); + $o = new CoveredClass; + $o->publicMethod(); + } +} diff --git a/tests/_files/CoverageNothingClassTest.php b/tests/_files/CoverageNothingClassTest.php new file mode 100644 index 00000000000..a6c134e4b46 --- /dev/null +++ b/tests/_files/CoverageNothingClassTest.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +/** + * @coversNothing + */ +class CoverageNothingClassTest extends TestCase +{ + public function testSomething(): void + { + $o = new CoveredClass; + $o->publicMethod(); + } +} diff --git a/tests/_files/CoverageNothingTest.php b/tests/_files/CoverageNothingMethodTest.php similarity index 83% rename from tests/_files/CoverageNothingTest.php rename to tests/_files/CoverageNothingMethodTest.php index cdb6efb41bc..0b5fab11b61 100644 --- a/tests/_files/CoverageNothingTest.php +++ b/tests/_files/CoverageNothingMethodTest.php @@ -9,10 +9,9 @@ */ use PHPUnit\Framework\TestCase; -class CoverageNothingTest extends TestCase +class CoverageNothingMethodTest extends TestCase { /** - * @covers CoveredClass::publicMethod * @coversNothing */ public function testSomething(): void diff --git a/tests/unit/Framework/TestResultTest.php b/tests/unit/Framework/TestResultTest.php index 7c56d21f824..6b86c6021fb 100644 --- a/tests/unit/Framework/TestResultTest.php +++ b/tests/unit/Framework/TestResultTest.php @@ -18,17 +18,19 @@ public function testCanSkipCoverage($testCase, $expectedCanSkip): void { require_once TEST_FILES_PATH . $testCase . '.php'; - $test = new $testCase; - $canSkipCoverage = TestResult::isAnyCoverageRequired($test); - $this->assertEquals($expectedCanSkip, $canSkipCoverage); + $test = new $testCase('testSomething'); + $coverageRequired = TestResult::isAnyCoverageRequired($test); + $this->assertEquals($expectedCanSkip, !$coverageRequired); } public function canSkipCoverageProvider(): array { return [ - ['CoverageClassTest', true], - ['CoverageNothingTest', true], + ['CoverageClassTest', false], + ['CoverageCoversOverridesCoversNothingSameDocblockTest', false], ['CoverageCoversOverridesCoversNothingTest', false], + ['CoverageNothingClassTest', true], + ['CoverageNothingMethodTest', true], ]; } } diff --git a/tests/unit/Util/TestTest.php b/tests/unit/Util/TestTest.php index 4e182ec94d8..b43c0a0f018 100644 --- a/tests/unit/Util/TestTest.php +++ b/tests/unit/Util/TestTest.php @@ -1067,7 +1067,9 @@ public function testGetLinesToBeCovered($test, $lines): void $expected = [TEST_FILES_PATH . 'CoveredClass.php' => $lines]; } elseif ($test === 'CoverageNoneTest') { $expected = []; - } elseif ($test === 'CoverageNothingTest') { + } elseif ($test === 'CoverageNothingMethodTest') { + $expected = false; + } elseif ($test === 'CoverageNothingClassTest') { $expected = false; } elseif ($test === 'CoverageFunctionTest') { $expected = [ @@ -1290,7 +1292,11 @@ public function getLinesToBeCoveredProvider(): array \range(31, 35), ], [ - 'CoverageNothingTest', + 'CoverageNothingClassTest', + false, + ], + [ + 'CoverageNothingMethodTest', false, ], [