From dc73abb5d522f55236b8877ae296af43829f9ccd Mon Sep 17 00:00:00 2001 From: Dave Marshall Date: Wed, 15 Apr 2015 23:21:01 +0100 Subject: [PATCH] Respect coverage data's own filter when merging another source --- src/CodeCoverage.php | 2 +- tests/PHP/CodeCoverageTest.php | 19 +++++++++++++++++++ tests/TestCase.php | 4 ++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/CodeCoverage.php b/src/CodeCoverage.php index 0032c9f63..ce23d064c 100644 --- a/src/CodeCoverage.php +++ b/src/CodeCoverage.php @@ -349,7 +349,7 @@ public function merge(PHP_CodeCoverage $that) { foreach ($that->getData() as $file => $lines) { if (!isset($this->data[$file])) { - if (!$that->filter()->isFiltered($file)) { + if (!$that->filter()->isFiltered($file) && !$this->filter->isFiltered($file)) { $this->data[$file] = $lines; } diff --git a/tests/PHP/CodeCoverageTest.php b/tests/PHP/CodeCoverageTest.php index 62c96fb7b..57957b8d4 100644 --- a/tests/PHP/CodeCoverageTest.php +++ b/tests/PHP/CodeCoverageTest.php @@ -317,6 +317,25 @@ public function testMerge2() ); } + /** + * @covers PHP_CodeCoverage::getData + * @covers PHP_CodeCoverage::merge + */ + public function testMergeRespectsTargetFilter() + { + $filter = new PHP_CodeCoverage_Filter; + $filter->addFileToWhitelist(TEST_FILES_PATH . 'BankAccount.php'); + + $coverage = $this->getCoverageForBankAccount($filter); + + $coverage->merge($this->getCoverageForClassWithAnonymousFunction()); + + $this->assertEquals( + $this->getExpectedDataArrayForBankAccount(), + $coverage->getData() + ); + } + /** * @covers PHP_CodeCoverage::getLinesToBeIgnored */ diff --git a/tests/TestCase.php b/tests/TestCase.php index a095d5d06..0a779abfc 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -74,7 +74,7 @@ protected function getXdebugDataForBankAccount() ); } - protected function getCoverageForBankAccount() + protected function getCoverageForBankAccount(PHP_CodeCoverage_Filter $filter = null) { $data = $this->getXdebugDataForBankAccount(); @@ -88,7 +88,7 @@ protected function getCoverageForBankAccount() $data[3] )); - $coverage = new PHP_CodeCoverage($stub, new PHP_CodeCoverage_Filter); + $coverage = new PHP_CodeCoverage($stub, $filter ?: new PHP_CodeCoverage_Filter); $coverage->start( new BankAccountTest('testBalanceIsInitiallyZero'),