示例#1
0
文件: View.php 项目: peopleplan/Pyrus
 /**
  * @param Pyrus\Developer\CodeCoverage\SourceFile $source
  * @param string $istest path to test file this is covering, or false for aggregate
  */
 function render(SourceFile $source, $istest = false)
 {
     $output = new \XMLWriter();
     if (!$output->openUri('php://output')) {
         throw new Exception('Cannot render ' . $source->shortName() . ', opening XML failed');
     }
     $output->setIndent(false);
     $output->startElement('html');
     $output->text("\n ");
     $output->startElement('head');
     $output->text("\n  ");
     if ($istest) {
         $output->writeElement('title', 'Code Coverage for ' . $source->shortName() . ' in ' . str_replace($source->testpath() . DIRECTORY_SEPARATOR, '', $istest));
     } else {
         $output->writeElement('title', 'Code Coverage for ' . $source->shortName());
     }
     $output->text("\n  ");
     $output->startElement('link');
     $output->writeAttribute('href', 'cover.css');
     $output->writeAttribute('rel', 'stylesheet');
     $output->writeAttribute('type', 'text/css');
     $output->endElement();
     $output->text("\n  ");
     $output->endElement();
     $output->text("\n ");
     $output->startElement('body');
     $output->text("\n ");
     $this->logoutLink($output);
     if ($istest) {
         $output->writeElement('h2', 'Code Coverage for ' . $source->shortName() . ' in ' . str_replace($source->testpath() . DIRECTORY_SEPARATOR, '', $istest));
     } else {
         $output->writeElement('h2', 'Code Coverage for ' . $source->shortName());
     }
     $output->text("\n ");
     $output->writeElement('h3', 'Coverage: ' . $source->coveragePercentage() . '% (Covered lines / Executable lines)');
     $info = $source->coverageInfo();
     $sourceCode = $source->source();
     $total = count($sourceCode);
     $output->writeRaw('<p><strong>' . $total . '</strong> total lines, of which <strong>' . $info[1] . '</strong> are executable, <strong>' . $info[2] . '</strong> are dead and <strong>' . ($total - $info[2] - $info[1]) . '</strong> are non-executable lines</p>');
     $output->writeRaw('<p>Of those <strong>' . $info[1] . '</strong> executable lines there are <strong>' . $info[0] . '</strong> lines covered with tests and <strong>' . ($info[1] - $info[0]) . '</strong> lack coverage</p>');
     $output->text("\n ");
     $output->startElement('p');
     $output->startElement('a');
     $output->writeAttribute('href', $this->controller->getTOCLink());
     $output->text('Aggregate Code Coverage for all tests');
     $output->endElement();
     $output->endElement();
     $output->startElement('pre');
     foreach ($sourceCode as $num => $line) {
         $coverage = $source->coverage($num);
         $output->startElement('span');
         $output->writeAttribute('class', 'ln');
         $output->text(str_pad($num, 8, ' ', STR_PAD_LEFT));
         $output->endElement();
         if ($coverage === false) {
             $output->text(str_pad(': ', 13, ' ', STR_PAD_LEFT) . $line);
             continue;
         }
         $output->startElement('span');
         $cov = is_array($coverage) ? $coverage['coverage'] : $coverage;
         if ($cov === -2) {
             $output->writeAttribute('class', 'dead');
             $output->text('           ');
         } elseif ($cov < 1) {
             $output->writeAttribute('class', 'nc');
             $output->text('           ');
         } else {
             $output->writeAttribute('class', 'cv');
             if (!$istest) {
                 $output->startElement('a');
                 $output->writeAttribute('href', $this->getLineLink($source->name(), $num));
             }
             $text = is_string($coverage) ? $coverage : $coverage['link'];
             $output->text(str_pad($text, 10, ' ', STR_PAD_LEFT) . ' ');
             if (!$istest) {
                 $output->endElement();
             }
         }
         $output->text(': ' . $line);
         $output->endElement();
     }
     $output->endElement();
     $output->text("\n ");
     $output->endElement();
     $output->text("\n ");
     $output->endElement();
     $output->endDocument();
 }
示例#2
0
文件: View.php 项目: peopleplan/Pyrus
 /**
  * @param Pyrus\Developer\CodeCoverage\SourceFile $source
  * @param string $istest path to test file this is covering, or false for aggregate
  */
 function render(SourceFile $source, $istest = false)
 {
     $output = new \XMLWriter();
     if (!$output->openUri('php://output')) {
         throw new Exception('Cannot render ' . $source->shortName() . ', opening XML failed');
     }
     $output->setIndent(false);
     $output->startElement('html');
     $output->text("\n ");
     $output->startElement('head');
     $output->text("\n  ");
     if ($istest) {
         $output->writeElement('title', 'Code Coverage for ' . $source->shortName() . ' in ' . str_replace($source->testpath() . DIRECTORY_SEPARATOR, '', $istest));
     } else {
         $output->writeElement('title', 'Code Coverage for ' . $source->shortName());
     }
     $output->text("\n  ");
     $output->startElement('link');
     $output->writeAttribute('href', 'cover.css');
     $output->writeAttribute('rel', 'stylesheet');
     $output->writeAttribute('type', 'text/css');
     $output->endElement();
     $output->text("\n  ");
     $output->endElement();
     $output->text("\n ");
     $output->startElement('body');
     $output->text("\n ");
     $this->logoutLink($output);
     if ($istest) {
         $output->writeElement('h2', 'Code Coverage for ' . $source->shortName() . ' in ' . str_replace($source->testpath() . DIRECTORY_SEPARATOR, '', $istest));
     } else {
         $output->writeElement('h2', 'Code Coverage for ' . $source->shortName());
     }
     $output->text("\n ");
     $output->writeElement('h3', 'Coverage: ' . $source->coveragePercentage() . '%');
     $info = $source->coverageInfo();
     $output->writeElement('h3', 'Total lines: ' . $info[1] . ', Covered lines: ' . $info[0]);
     $output->text("\n ");
     $output->startElement('p');
     $output->startElement('a');
     $output->writeAttribute('href', $this->controller->getTOCLink());
     $output->text('Aggregate Code Coverage for all tests');
     $output->endElement();
     $output->endElement();
     $output->startElement('pre');
     foreach ($source->source() as $num => $line) {
         $coverage = $source->coverage($num);
         $output->startElement('span');
         $output->writeAttribute('class', 'ln');
         $output->text(str_pad($num, 8, ' ', STR_PAD_LEFT));
         $output->endElement();
         if ($coverage === false) {
             $output->text(str_pad(': ', 13, ' ', STR_PAD_LEFT) . $line);
             continue;
         }
         $output->startElement('span');
         if ($coverage < 1) {
             $output->writeAttribute('class', 'nc');
             $output->text('           ');
         } else {
             $output->writeAttribute('class', 'cv');
             if (!$istest) {
                 $output->startElement('a');
                 $output->writeAttribute('href', $this->getLineLink($source->name(), $num));
             }
             $output->text(str_pad($coverage, 10, ' ', STR_PAD_LEFT) . ' ');
             if (!$istest) {
                 $output->endElement();
             }
         }
         $output->text(': ' . $line);
         $output->endElement();
     }
     $output->endElement();
     $output->text("\n ");
     $output->endElement();
     $output->text("\n ");
     $output->endElement();
     $output->endDocument();
 }