Esempio n. 1
0
    /**
     * @param PEAR2\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();
    }
Esempio n. 2
0
 /**
  * @param PEAR2\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();
 }