SebastianBergmann\CodeCoverage\Report\Html\File::renderSource PHP Method

renderSource() protected method

protected renderSource ( File $node ) : string
$node SebastianBergmann\CodeCoverage\Node\File
return string
    protected function renderSource(FileNode $node)
    {
        $coverageData = $node->getCoverageData();
        $testData = $node->getTestData();
        $codeLines = $this->loadFile($node->getPath());
        $lines = '';
        $i = 1;
        foreach ($codeLines as $line) {
            $trClass = '';
            $popoverContent = '';
            $popoverTitle = '';
            if (array_key_exists($i, $coverageData)) {
                $numTests = count($coverageData[$i]);
                if ($coverageData[$i] === null) {
                    $trClass = ' class="warning"';
                } elseif ($numTests == 0) {
                    $trClass = ' class="danger"';
                } else {
                    $lineCss = 'covered-by-large-tests';
                    $popoverContent = '<ul>';
                    if ($numTests > 1) {
                        $popoverTitle = $numTests . ' tests cover line ' . $i;
                    } else {
                        $popoverTitle = '1 test covers line ' . $i;
                    }
                    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';
                        }
                        switch ($testData[$test]['status']) {
                            case 0:
                                switch ($testData[$test]['size']) {
                                    case 'small':
                                        $testCSS = ' class="covered-by-small-tests"';
                                        break;
                                    case 'medium':
                                        $testCSS = ' class="covered-by-medium-tests"';
                                        break;
                                    default:
                                        $testCSS = ' class="covered-by-large-tests"';
                                        break;
                                }
                                break;
                            case 1:
                            case 2:
                                $testCSS = ' class="warning"';
                                break;
                            case 3:
                                $testCSS = ' class="danger"';
                                break;
                            case 4:
                                $testCSS = ' class="danger"';
                                break;
                            default:
                                $testCSS = '';
                        }
                        $popoverContent .= sprintf('<li%s>%s</li>', $testCSS, htmlspecialchars($test));
                    }
                    $popoverContent .= '</ul>';
                    $trClass = ' class="' . $lineCss . ' popin"';
                }
            }
            if (!empty($popoverTitle)) {
                $popover = sprintf(' data-title="%s" data-content="%s" data-placement="bottom" data-html="true"', $popoverTitle, htmlspecialchars($popoverContent));
            } else {
                $popover = '';
            }
            $lines .= sprintf('     <tr%s%s><td><div align="right"><a name="%d"></a><a href="#%d">%d</a></div></td><td class="codeLine">%s</td></tr>' . "\n", $trClass, $popover, $i, $i, $i, $line);
            $i++;
        }
        return $lines;
    }