/** * @param PHP_CodeCoverage_Report_Node_File $node * * @return string */ protected function renderSource(PHP_CodeCoverage_Report_Node_File $node) { $coverageData = $node->getCoverageData(); $ignoredLines = $node->getIgnoredLines(); $testData = $node->getTestData(); $codeLines = $this->loadFile($node->getPath()); $lines = ''; $i = 1; foreach ($codeLines as $line) { $numTests = ''; $trClass = ''; $popoverContent = ''; $popoverTitle = ''; if (!isset($ignoredLines[$i]) && array_key_exists($i, $coverageData)) { $numTests = count($coverageData[$i]); if ($coverageData[$i] === null) { $trClass = ' class="warning"'; } else { if ($numTests == 0) { $trClass = ' class="danger"'; } else { $trClass = ' class="success popin"'; $popoverContent = '<ul>'; if ($numTests > 1) { $popoverTitle = $numTests . ' tests cover line ' . $i; } else { $popoverTitle = '1 test covers line ' . $i; } foreach ($coverageData[$i] as $test) { switch ($testData[$test]) { case 0: $testCSS = ' class="success"'; 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>'; } } } 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, !$this->highlight ? htmlspecialchars($line) : $line); $i++; } return $lines; }
/** * @param PHP_CodeCoverage_Report_Node_File $node * @return string */ protected function renderSource(PHP_CodeCoverage_Report_Node_File $node) { if ($this->yui) { $yuiTemplate = new Text_Template($this->templatePath . 'yui_item.js'); } $coverageData = $node->getCoverageData(); $ignoredLines = $node->getIgnoredLines(); $testData = $node->getTestData(); list($codeLines, $fillup) = $this->loadFile($node->getPath()); $lines = ''; $yuiPanelJS = ''; $i = 1; foreach ($codeLines as $line) { $css = ''; if (!isset($ignoredLines[$i]) && isset($coverageData[$i])) { $count = ''; $numTests = count($coverageData[$i]); if ($coverageData[$i] === NULL) { $color = 'lineDeadCode'; $count = ' '; } else { if ($numTests == 0) { $color = 'lineNoCov'; $count = sprintf('%8d', 0); } else { $color = 'lineCov'; $count = sprintf('%8d', $numTests); if ($this->yui) { $buffer = ''; $testCSS = ''; foreach ($coverageData[$i] as $test) { switch ($testData[$test]) { case 0: $testCSS = ' class=\\"testPassed\\"'; break; case 1: case 2: $testCSS = ' class=\\"testIncomplete\\"'; break; case 3: $testCSS = ' class=\\"testFailure\\"'; break; case 4: $testCSS = ' class=\\"testError\\"'; break; default: $testCSS = ''; } $buffer .= sprintf('<li%s>%s</li>', $testCSS, addslashes(htmlspecialchars($test))); } if ($numTests > 1) { $header = $numTests . ' tests cover'; } else { $header = '1 test covers'; } $header .= ' line ' . $i; $yuiTemplate->setVar(array('line' => $i, 'header' => $header, 'tests' => $buffer), FALSE); $yuiPanelJS .= $yuiTemplate->render(); } } } $css = sprintf('<span class="%s"> %s : ', $color, $count); } $_fillup = array_shift($fillup); if ($_fillup > 0) { $line .= str_repeat(' ', $_fillup); } $lines .= sprintf('<span class="lineNum" id="container%d"><a name="%d"></a>' . '<a href="#%d" id="line%d">%8d</a> </span>%s%s%s' . "\n", $i, $i, $i, $i, $i, !empty($css) ? $css : ' : ', !$this->highlight ? htmlspecialchars($line) : $line, !empty($css) ? '</span>' : ''); $i++; } return array($lines, $yuiPanelJS); }