Exemplo n.º 1
0
 private function processFile(PHP_CodeCoverage_Report_Node_File $file, PHP_CodeCoverage_Report_XML_Directory $context)
 {
     $fileObject = $context->addFile($file->getName(), $file->getId() . '.xml');
     $this->setTotals($file, $fileObject->getTotals());
     $fileReport = new PHP_CodeCoverage_Report_XML_File_Report($file->getName());
     $this->setTotals($file, $fileReport->getTotals());
     foreach ($file->getClassesAndTraits() as $unit) {
         $this->processUnit($unit, $fileReport);
     }
     foreach ($file->getFunctions() as $function) {
         $this->processFunction($function, $fileReport);
     }
     foreach ($file->getCoverageData() as $line => $tests) {
         if (!is_array($tests) || count($tests) == 0) {
             continue;
         }
         $coverage = $fileReport->getLineCoverage($line);
         foreach ($tests as $test) {
             $coverage->addTest($test);
         }
         $coverage->finalize();
     }
     $this->initTargetDirectory($this->target . dirname($file->getId()) . '/');
     $fileDom = $fileReport->asDom();
     $fileDom->formatOutput = true;
     $fileDom->preserveWhiteSpace = false;
     $fileDom->save($this->target . $file->getId() . '.xml');
 }
Exemplo n.º 2
0
 /**
  * @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;
 }
Exemplo n.º 3
0
 /**
  * @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);
 }
Exemplo n.º 4
0
 /**
  * @param  PHP_CodeCoverage_Report_Node_File $node
  *
  * @return string
  */
 protected function renderSource(PHP_CodeCoverage_Report_Node_File $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;
 }