function File::renderSourceWithLineCoverage
1 call to File::renderSourceWithLineCoverage()
- File::render in vendor/
phpunit/ php-code-coverage/ src/ Report/ Html/ Renderer/ File.php
File
-
vendor/
phpunit/ php-code-coverage/ src/ Report/ Html/ Renderer/ File.php, line 499
Class
- File
- @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
Namespace
SebastianBergmann\CodeCoverage\Report\HtmlCode
private function renderSourceWithLineCoverage(FileNode $node) : string {
$linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}');
$singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}');
$coverageData = $node->lineCoverageData();
$testData = $node->testData();
$codeLines = $this->loadFile($node->pathAsString());
$lines = '';
$i = 1;
foreach ($codeLines as $line) {
$trClass = '';
$popoverContent = '';
$popoverTitle = '';
if (array_key_exists($i, $coverageData)) {
$numTests = $coverageData[$i] ? count($coverageData[$i]) : 0;
if ($coverageData[$i] === null) {
$trClass = 'warning';
}
elseif ($numTests === 0) {
$trClass = 'danger';
}
else {
if ($numTests > 1) {
$popoverTitle = $numTests . ' tests cover line ' . $i;
}
else {
$popoverTitle = '1 test covers line ' . $i;
}
$lineCss = 'covered-by-large-tests';
$popoverContent = '<ul>';
foreach ($coverageData[$i] as $test) {
if ($lineCss === 'covered-by-large-tests' && $testData[$test]['size'] === 'medium') {
$lineCss = 'covered-by-medium-tests';
}
elseif ($testData[$test]['size'] === 'small') {
$lineCss = 'covered-by-small-tests';
}
$popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]);
}
$popoverContent .= '</ul>';
$trClass = $lineCss . ' popin';
}
}
$popover = '';
if (!empty($popoverTitle)) {
$popover = sprintf(' data-title="%s" data-content="%s" data-placement="top" data-html="true"', $popoverTitle, htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags));
}
$lines .= $this->renderLine($singleLineTemplate, $i, $line, $trClass, $popover);
$i++;
}
$linesTemplate->setVar([
'lines' => $lines,
]);
return $linesTemplate->render();
}