Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. File.php

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\Html

Code

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();
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal