diff --git a/PHP/CodeCoverage.php b/PHP/CodeCoverage.php index 7f051f297..041d01d93 100644 --- a/PHP/CodeCoverage.php +++ b/PHP/CodeCoverage.php @@ -620,7 +620,7 @@ protected function getLinesToBeCovered($className, $methodName) } $classShortcut = preg_match_all( - '(@coversDefaultClass\s+(?P.*?)\s*$)m', + '(@coversDefaultClass\s+(?P[^\s]++)\s*$)m', $class->getDocComment(), $matches ); @@ -639,7 +639,7 @@ protected function getLinesToBeCovered($className, $methodName) } $match = preg_match_all( - '(@covers\s+(?P.*?)\s*(\(\s*\))?\s*$)m', + '(@covers\s+(?P[^\s()]++)[\s()]*$)m', $docComment, $matches ); diff --git a/Tests/PHP/CodeCoverage/FilterTest.php b/Tests/PHP/CodeCoverage/FilterTest.php index f90e518f1..be8b71ee5 100644 --- a/Tests/PHP/CodeCoverage/FilterTest.php +++ b/Tests/PHP/CodeCoverage/FilterTest.php @@ -78,8 +78,12 @@ protected function setUp() TEST_FILES_PATH . 'BankAccountTest.php', TEST_FILES_PATH . 'CoverageClassExtendedTest.php', TEST_FILES_PATH . 'CoverageClassTest.php', + TEST_FILES_PATH . 'CoverageFunctionParenthesesTest.php', + TEST_FILES_PATH . 'CoverageFunctionParenthesesWhitespaceTest.php', TEST_FILES_PATH . 'CoverageFunctionTest.php', TEST_FILES_PATH . 'CoverageMethodOneLineAnnotationTest.php', + TEST_FILES_PATH . 'CoverageMethodParenthesesTest.php', + TEST_FILES_PATH . 'CoverageMethodParenthesesWhitespaceTest.php', TEST_FILES_PATH . 'CoverageMethodTest.php', TEST_FILES_PATH . 'CoverageNoneTest.php', TEST_FILES_PATH . 'CoverageNotPrivateTest.php', diff --git a/Tests/PHP/CodeCoverage/UtilTest.php b/Tests/PHP/CodeCoverage/UtilTest.php index ed6b0f7cb..de7402d30 100644 --- a/Tests/PHP/CodeCoverage/UtilTest.php +++ b/Tests/PHP/CodeCoverage/UtilTest.php @@ -55,8 +55,12 @@ require_once TEST_FILES_PATH . 'CoverageClassExtendedTest.php'; require_once TEST_FILES_PATH . 'CoverageClassTest.php'; require_once TEST_FILES_PATH . 'CoverageFunctionTest.php'; +require_once TEST_FILES_PATH . 'CoverageFunctionParenthesesTest.php'; +require_once TEST_FILES_PATH . 'CoverageFunctionParenthesesWhitespaceTest.php'; require_once TEST_FILES_PATH . 'CoverageMethodTest.php'; require_once TEST_FILES_PATH . 'CoverageMethodOneLineAnnotationTest.php'; +require_once TEST_FILES_PATH . 'CoverageMethodParenthesesTest.php'; +require_once TEST_FILES_PATH . 'CoverageMethodParenthesesWhitespaceTest.php'; require_once TEST_FILES_PATH . 'CoverageNoneTest.php'; require_once TEST_FILES_PATH . 'CoverageNotPrivateTest.php'; require_once TEST_FILES_PATH . 'CoverageNotProtectedTest.php'; diff --git a/Tests/PHP/CodeCoverageTest.php b/Tests/PHP/CodeCoverageTest.php index 582b0a836..228175166 100644 --- a/Tests/PHP/CodeCoverageTest.php +++ b/Tests/PHP/CodeCoverageTest.php @@ -234,13 +234,10 @@ public function testClear() } /** - * Add parenthesis to the covers annotation below in a couple of different ways to make sure it - * works as expected - * - * @covers PHP_CodeCoverage::start() - * @covers PHP_CodeCoverage::stop( ) - * @covers PHP_CodeCoverage::append () - * @covers PHP_CodeCoverage::applyListsFilter ( ) + * @covers PHP_CodeCoverage::start + * @covers PHP_CodeCoverage::stop + * @covers PHP_CodeCoverage::append + * @covers PHP_CodeCoverage::applyListsFilter * @covers PHP_CodeCoverage::initializeFilesThatAreSeenTheFirstTime * @covers PHP_CodeCoverage::applyCoversAnnotationFilter * @covers PHP_CodeCoverage::getTests @@ -399,6 +396,66 @@ public function testTwoCoversDefaultClassAnnoationsAreNotAllowed() ); } + /** + * @covers PHP_CodeCoverage::getLinesToBeCovered + */ + public function testFunctionParenthesesAreAllowed() + { + $this->assertSame( + array(TEST_FILES_PATH . 'CoveredFunction.php' => range(2, 4)), + $this->getLinesToBeCovered->invoke( + $this->coverage, + 'CoverageFunctionParenthesesTest', + 'testSomething' + ) + ); + } + + /** + * @covers PHP_CodeCoverage::getLinesToBeCovered + */ + public function testFunctionParenthesesAreAllowedWithWhitespace() + { + $this->assertSame( + array(TEST_FILES_PATH . 'CoveredFunction.php' => range(2, 4)), + $this->getLinesToBeCovered->invoke( + $this->coverage, + 'CoverageFunctionParenthesesWhitespaceTest', + 'testSomething' + ) + ); + } + + /** + * @covers PHP_CodeCoverage::getLinesToBeCovered + */ + public function testMethodParenthesesAreAllowed() + { + $this->assertSame( + array(TEST_FILES_PATH . 'CoveredClass.php' => range(31, 35)), + $this->getLinesToBeCovered->invoke( + $this->coverage, + 'CoverageMethodParenthesesTest', + 'testSomething' + ) + ); + } + + /** + * @covers PHP_CodeCoverage::getLinesToBeCovered + */ + public function testMethodParenthesesAreAllowedWithWhitespace() + { + $this->assertSame( + array(TEST_FILES_PATH . 'CoveredClass.php' => range(31, 35)), + $this->getLinesToBeCovered->invoke( + $this->coverage, + 'CoverageMethodParenthesesWhitespaceTest', + 'testSomething' + ) + ); + } + public function getLinesToBeCoveredProvider() { return array( diff --git a/Tests/_files/CoverageFunctionParenthesesTest.php b/Tests/_files/CoverageFunctionParenthesesTest.php new file mode 100644 index 000000000..33b5fe3de --- /dev/null +++ b/Tests/_files/CoverageFunctionParenthesesTest.php @@ -0,0 +1,11 @@ +publicMethod(); + } +} diff --git a/Tests/_files/CoverageMethodParenthesesWhitespaceTest.php b/Tests/_files/CoverageMethodParenthesesWhitespaceTest.php new file mode 100644 index 000000000..7f67f4b35 --- /dev/null +++ b/Tests/_files/CoverageMethodParenthesesWhitespaceTest.php @@ -0,0 +1,12 @@ +publicMethod(); + } +}