Skip to content

Commit 55dccc6

Browse files
Pass code coverage static analysis cache configuration to PHP processes that run TestCase tests in isolation
1 parent d572081 commit 55dccc6

File tree

3 files changed

+42
-23
lines changed

3 files changed

+42
-23
lines changed

src/Framework/TestCase.php

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -805,30 +805,39 @@ public function run(TestResult $result = null): TestResult
805805
$phar = '\'\'';
806806
}
807807

808-
$codeCoverage = $result->getCodeCoverage();
809-
$codeCoverageFilter = null;
810-
$driverMethod = 'forLineCoverage';
808+
$codeCoverage = $result->getCodeCoverage();
809+
$codeCoverageFilter = null;
810+
$cachesStaticAnalysis = 'false';
811+
$codeCoverageCacheDirectory = null;
812+
$driverMethod = 'forLineCoverage';
811813

812814
if ($codeCoverage) {
813815
$codeCoverageFilter = $codeCoverage->filter();
814816

815817
if ($codeCoverage->collectsBranchAndPathCoverage()) {
816818
$driverMethod = 'forLineAndPathCoverage';
817819
}
820+
821+
if ($codeCoverage->cachesStaticAnalysis()) {
822+
$cachesStaticAnalysis = 'true';
823+
$codeCoverageCacheDirectory = $codeCoverage->cacheDirectory();
824+
}
818825
}
819826

820-
$data = var_export(serialize($this->data), true);
821-
$dataName = var_export($this->dataName, true);
822-
$dependencyInput = var_export(serialize($this->dependencyInput), true);
823-
$includePath = var_export(get_include_path(), true);
824-
$codeCoverageFilter = var_export(serialize($codeCoverageFilter), true);
827+
$data = var_export(serialize($this->data), true);
828+
$dataName = var_export($this->dataName, true);
829+
$dependencyInput = var_export(serialize($this->dependencyInput), true);
830+
$includePath = var_export(get_include_path(), true);
831+
$codeCoverageFilter = var_export(serialize($codeCoverageFilter), true);
832+
$codeCoverageCacheDirectory = var_export(serialize($codeCoverageCacheDirectory), true);
825833
// must do these fixes because TestCaseMethod.tpl has unserialize('{data}') in it, and we can't break BC
826834
// the lines above used to use addcslashes() rather than var_export(), which breaks null byte escape sequences
827-
$data = "'." . $data . ".'";
828-
$dataName = "'.(" . $dataName . ").'";
829-
$dependencyInput = "'." . $dependencyInput . ".'";
830-
$includePath = "'." . $includePath . ".'";
831-
$codeCoverageFilter = "'." . $codeCoverageFilter . ".'";
835+
$data = "'." . $data . ".'";
836+
$dataName = "'.(" . $dataName . ").'";
837+
$dependencyInput = "'." . $dependencyInput . ".'";
838+
$includePath = "'." . $includePath . ".'";
839+
$codeCoverageFilter = "'." . $codeCoverageFilter . ".'";
840+
$codeCoverageCacheDirectory = "'." . $codeCoverageCacheDirectory . ".'";
832841

833842
$configurationFilePath = $GLOBALS['__PHPUNIT_CONFIGURATION_FILE'] ?? '';
834843

@@ -838,6 +847,8 @@ public function run(TestResult $result = null): TestResult
838847
'filename' => $class->getFileName(),
839848
'className' => $class->getName(),
840849
'collectCodeCoverageInformation' => $coverage,
850+
'cachesStaticAnalysis' => $cachesStaticAnalysis,
851+
'codeCoverageCacheDirectory' => $codeCoverageCacheDirectory,
841852
'driverMethod' => $driverMethod,
842853
'data' => $data,
843854
'dataName' => $dataName,

src/Util/PHP/Template/TestCaseClass.tpl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@ function __phpunit_run_isolated_test()
3838
if ({collectCodeCoverageInformation}) {
3939
$filter = unserialize('{codeCoverageFilter}');
4040
41-
$result->setCodeCoverage(
42-
new CodeCoverage(
43-
Driver::{driverMethod}($filter),
44-
$filter
45-
)
41+
$codeCoverage = new CodeCoverage(
42+
Driver::{driverMethod}($filter),
43+
$filter
4644
);
45+
46+
if ({cachesStaticAnalysis}) {
47+
$codeCoverage->cacheStaticAnalysis(unserialize('{codeCoverageCacheDirectory}'));
48+
}
49+
50+
$result->setCodeCoverage($codeCoverage);
4751
}
4852

4953
$result->beStrictAboutTestsThatDoNotTestAnything({isStrictAboutTestsThatDoNotTestAnything});

src/Util/PHP/Template/TestCaseMethod.tpl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,16 @@ function __phpunit_run_isolated_test()
3939
if ({collectCodeCoverageInformation}) {
4040
$filter = unserialize('{codeCoverageFilter}');
4141
42-
$result->setCodeCoverage(
43-
new CodeCoverage(
44-
Driver::{driverMethod}($filter),
45-
$filter
46-
)
42+
$codeCoverage = new CodeCoverage(
43+
Driver::{driverMethod}($filter),
44+
$filter
4745
);
46+
47+
if ({cachesStaticAnalysis}) {
48+
$codeCoverage->cacheStaticAnalysis(unserialize('{codeCoverageCacheDirectory}'));
49+
}
50+
51+
$result->setCodeCoverage($codeCoverage);
4852
}
4953

5054
$result->beStrictAboutTestsThatDoNotTestAnything({isStrictAboutTestsThatDoNotTestAnything});

0 commit comments

Comments
 (0)