Skip to content

Commit

Permalink
Merge [993].
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianbergmann committed Aug 7, 2007
1 parent 08e6064 commit fe66a36
Show file tree
Hide file tree
Showing 7 changed files with 200 additions and 5 deletions.
9 changes: 8 additions & 1 deletion PHPUnit/TextUI/Command.php
Expand Up @@ -166,6 +166,7 @@ protected static function handleArguments()

if (extension_loaded('xdebug')) {
$longOptions[] = 'coverage-xml=';
$longOptions[] = 'log-metrics=';
$longOptions[] = 'log-pmd=';
$longOptions[] = 'report=';
}
Expand Down Expand Up @@ -259,6 +260,11 @@ protected static function handleArguments()
}
break;

case '--log-metrics': {
$arguments['metricsXML'] = $option[1];
}
break;

case '--repeat': {
$arguments['repeat'] = (int)$option[1];
}
Expand Down Expand Up @@ -443,7 +449,8 @@ public static function showHelp()
" --log-xml <file> Log test execution in XML format to file.\n";

if (extension_loaded('xdebug')) {
print " --log-pmd <file> Write violations report in PMD XML format.\n";
print " --log-metrics <file> Write metrics report in XML format.\n" .
" --log-pmd <file> Write violations report in PMD XML format.\n";
}

print "\n";
Expand Down
20 changes: 19 additions & 1 deletion PHPUnit/TextUI/TestRunner.php
Expand Up @@ -61,6 +61,7 @@
require_once 'PHPUnit/Util/Log/Database.php';
require_once 'PHPUnit/Util/Log/GraphViz.php';
require_once 'PHPUnit/Util/Log/JSON.php';
require_once 'PHPUnit/Util/Log/Metrics.php';
require_once 'PHPUnit/Util/Log/TAP.php';
require_once 'PHPUnit/Util/Log/PMD.php';
require_once 'PHPUnit/Util/Log/XML.php';
Expand Down Expand Up @@ -231,7 +232,7 @@ public function doRun(PHPUnit_Framework_Test $suite, array $arguments = array())
}
}

if ((isset($arguments['coverageXML']) || isset($arguments['pmdXML'])) && extension_loaded('xdebug')) {
if ((isset($arguments['coverageXML']) || isset($arguments['metricsXML']) || isset($arguments['pmdXML'])) && extension_loaded('xdebug')) {
$result->collectCodeCoverageInformation(TRUE);
}

Expand Down Expand Up @@ -330,6 +331,17 @@ public function doRun(PHPUnit_Framework_Test $suite, array $arguments = array())
$this->printer->write("\n");
}

if (isset($arguments['metricsXML']) && extension_loaded('tokenizer') && extension_loaded('xdebug')) {
$this->printer->write("\nWriting metrics report XML file, this may take a moment.");

$writer = new PHPUnit_Util_Log_Metrics(
$arguments['metricsXML']
);

$writer->process($result);
$this->printer->write("\n");
}

if (isset($arguments['pmdXML']) && extension_loaded('tokenizer') && extension_loaded('xdebug')) {
$this->printer->write("\nWriting violations report XML file, this may take a moment.");

Expand All @@ -352,6 +364,12 @@ public function doRun(PHPUnit_Framework_Test $suite, array $arguments = array())

$writer->process($result);

$writer = new PHPUnit_Util_Log_Metrics(
$arguments['reportDirectory'] . '/metrics.xml'
);

$writer->process($result);

$writer = new PHPUnit_Util_Log_PMD(
$arguments['reportDirectory'] . '/pmd.xml'
);
Expand Down
167 changes: 167 additions & 0 deletions PHPUnit/Util/Log/Metrics.php
@@ -0,0 +1,167 @@
<?php
/**
* PHPUnit
*
* Copyright (c) 2002-2007, Sebastian Bergmann <sb@sebastian-bergmann.de>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* * Neither the name of Sebastian Bergmann nor the names of his
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @category Testing
* @package PHPUnit
* @author Sebastian Bergmann <sb@sebastian-bergmann.de>
* @copyright 2002-2007 Sebastian Bergmann <sb@sebastian-bergmann.de>
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @version SVN: $Id$
* @link http://www.phpunit.de/
* @since File available since Release 3.2.0
*/

require_once 'PHPUnit/Runner/Version.php';
require_once 'PHPUnit/Util/Metrics/Project.php';
require_once 'PHPUnit/Util/Class.php';
require_once 'PHPUnit/Util/CodeCoverage.php';
require_once 'PHPUnit/Util/Filter.php';
require_once 'PHPUnit/Util/Printer.php';

PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');

/**
* Generates an XML logfile with software metrics information.
*
* @category Testing
* @package PHPUnit
* @author Sebastian Bergmann <sb@sebastian-bergmann.de>
* @copyright 2002-2007 Sebastian Bergmann <sb@sebastian-bergmann.de>
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @version Release: @package_version@
* @link http://www.phpunit.de/
* @since Class available since Release 3.2.0
*/
class PHPUnit_Util_Log_Metrics extends PHPUnit_Util_Printer
{
/**
* @param PHPUnit_Framework_TestResult $result
* @access public
*/
public function process(PHPUnit_Framework_TestResult $result)
{
$codeCoverage = $result->getCodeCoverageInformation();
$summary = PHPUnit_Util_CodeCoverage::getSummary($codeCoverage);
$files = array_keys($summary);
$projectMetrics = new PHPUnit_Util_Metrics_Project($files, $summary);

$document = new DOMDocument('1.0', 'UTF-8');
$document->formatOutput = TRUE;

$metrics = $document->createElement('metrics');
$metrics->setAttribute('files', count($projectMetrics->getFiles()));
$metrics->setAttribute('functions', count($projectMetrics->getFunctions()));
$metrics->setAttribute('cls', $projectMetrics->getCLS());
$metrics->setAttribute('clsa', $projectMetrics->getCLSa());
$metrics->setAttribute('clsc', $projectMetrics->getCLSc());
$metrics->setAttribute('roots', $projectMetrics->getRoots());
$metrics->setAttribute('leafs', $projectMetrics->getLeafs());
$metrics->setAttribute('interfs', $projectMetrics->getInterfs());
$metrics->setAttribute('maxdit', $projectMetrics->getMaxDit());

$document->appendChild($metrics);

foreach ($projectMetrics->getFiles() as $fileName => $fileMetrics) {
$xmlFile = $document->createElement('file');

$xmlFile->setAttribute('name', $fileName);
$xmlFile->setAttribute('classes', count($fileMetrics->getClasses()));
$xmlFile->setAttribute('functions', count($fileMetrics->getFunctions()));
$xmlFile->setAttribute('loc', $fileMetrics->getLoc());
$xmlFile->setAttribute('cloc', $fileMetrics->getCloc());
$xmlFile->setAttribute('ncloc', $fileMetrics->getNcloc());
$xmlFile->setAttribute('locExecutable', $fileMetrics->getLocExecutable());
$xmlFile->setAttribute('locExecuted', $fileMetrics->getLocExecuted());
$xmlFile->setAttribute('coverage', $fileMetrics->getCoverage());

foreach ($fileMetrics->getClasses() as $className => $classMetrics) {
if (!$classMetrics->getClass()->implementsInterface('PHPUnit_Framework_Test')) {
$xmlClass = $document->createElement('class');

$xmlClass->setAttribute('name', $classMetrics->getClass()->getName());
$xmlClass->setAttribute('loc', $classMetrics->getLoc());
$xmlClass->setAttribute('locExecutable', $classMetrics->getLocExecutable());
$xmlClass->setAttribute('locExecuted', $classMetrics->getLocExecuted());
$xmlClass->setAttribute('aif', $classMetrics->getAIF());
$xmlClass->setAttribute('ahf', $classMetrics->getAHF());
$xmlClass->setAttribute('csz', $classMetrics->getCSZ());
$xmlClass->setAttribute('cis', $classMetrics->getCIS());
$xmlClass->setAttribute('coverage', $classMetrics->getCoverage());
$xmlClass->setAttribute('dit', $classMetrics->getDIT());
$xmlClass->setAttribute('impl', $classMetrics->getIMPL());
$xmlClass->setAttribute('mif', $classMetrics->getMIF());
$xmlClass->setAttribute('mhf', $classMetrics->getMHF());
$xmlClass->setAttribute('noc', $classMetrics->getNOC());
$xmlClass->setAttribute('pf', $classMetrics->getPF());
$xmlClass->setAttribute('vars', $classMetrics->getVARS());
$xmlClass->setAttribute('varsnp', $classMetrics->getVARSnp());
$xmlClass->setAttribute('varsi', $classMetrics->getVARSi());
$xmlClass->setAttribute('wmc', $classMetrics->getWMC());
$xmlClass->setAttribute('wmcnp', $classMetrics->getWMCnp());
$xmlClass->setAttribute('wmci', $classMetrics->getWMCi());

foreach ($classMetrics->getMethods() as $methodName => $methodMetrics) {
$xmlMethod = $document->createElement('method');

$xmlMethod->setAttribute('name', $methodMetrics->getMethod()->getName());
$xmlMethod->setAttribute('loc', $methodMetrics->getLoc());
$xmlMethod->setAttribute('locExecutable', $methodMetrics->getLocExecutable());
$xmlMethod->setAttribute('locExecuted', $methodMetrics->getLocExecuted());
$xmlMethod->setAttribute('coverage', $methodMetrics->getCoverage());
$xmlMethod->setAttribute('ccn', $methodMetrics->getCCN());
$xmlMethod->setAttribute('crap', $methodMetrics->getCrapIndex());

$xmlClass->appendChild($xmlMethod);
}

$xmlFile->appendChild($xmlClass);
}
}

foreach ($fileMetrics->getFunctions() as $functionName => $functionMetrics) {
$xmlFunction = $document->createElement('function');

$xmlFile->appendChild($xmlFunction);
}

$metrics->appendChild($xmlFile);
}

$this->write($document->saveXML());
$this->flush();
}
}
?>
2 changes: 1 addition & 1 deletion PHPUnit/Util/Report/Template/coverage_directory.html
Expand Up @@ -76,7 +76,7 @@
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://www.phpunit.de/">PHPUnit {phpunit_version}</a> and <a href="http://www.xdebug.org/">Xdebug {xdebug_version}</a>.</td></tr>
<tr><td class="versionInfo">Logfile: <a href="logfile.xml">XML</a> | <a href="coverage.xml">Code Coverage</a> | <a href="pmd.xml">PMD</a> | <a href="logfile.txt">Plain Text</a> | <a href="logfile.tap">TAP</a></td></tr>
<tr><td class="versionInfo">Logfile: <a href="logfile.xml">XML</a> | <a href="coverage.xml">Code Coverage</a> | <a href="metrics.xml">Metrics</a> | <a href="pmd.xml">PMD</a> | <a href="logfile.txt">Plain Text</a> | <a href="logfile.tap">TAP</a></td></tr>
</table>

<br/>
Expand Down
2 changes: 1 addition & 1 deletion PHPUnit/Util/Report/Template/coverage_file.html
Expand Up @@ -68,7 +68,7 @@
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://www.phpunit.de/">PHPUnit {phpunit_version}</a> and <a href="http://www.xdebug.org/">Xdebug {xdebug_version}</a>.</td></tr>
<tr><td class="versionInfo">Logfile: <a href="logfile.xml">XML</a> | <a href="coverage.xml">Code Coverage</a> | <a href="pmd.xml">PMD</a> | <a href="logfile.txt">Plain Text</a> | <a href="logfile.tap">TAP</a></td></tr>
<tr><td class="versionInfo">Logfile: <a href="logfile.xml">XML</a> | <a href="coverage.xml">Code Coverage</a> | <a href="metrics.xml">Metrics</a> | <a href="pmd.xml">PMD</a> | <a href="logfile.txt">Plain Text</a> | <a href="logfile.tap">TAP</a></td></tr>
</table>

<br />
Expand Down
2 changes: 1 addition & 1 deletion PHPUnit/Util/Report/Template/testsuite.html
Expand Up @@ -66,7 +66,7 @@
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://www.phpunit.de/">PHPUnit {phpunit_version}</a> and <a href="http://www.xdebug.org/">Xdebug {xdebug_version}</a>.</td></tr>
<tr><td class="versionInfo">Logfile: <a href="logfile.xml">XML</a> | <a href="coverage.xml">Code Coverage</a> | <a href="pmd.xml">PMD</a> | <a href="logfile.txt">Plain Text</a> | <a href="logfile.tap">TAP</a></td></tr>
<tr><td class="versionInfo">Logfile: <a href="logfile.xml">XML</a> | <a href="coverage.xml">Code Coverage</a> | <a href="metrics.xml">Metrics</a> | <a href="pmd.xml">PMD</a> | <a href="logfile.txt">Plain Text</a> | <a href="logfile.tap">TAP</a></td></tr>
</table>

<br/>
Expand Down
3 changes: 3 additions & 0 deletions package.xml
Expand Up @@ -561,6 +561,9 @@
<file baseinstalldir="/" name="JSON.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file baseinstalldir="/" name="Metrics.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file baseinstalldir="/" name="PEAR.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
Expand Down

0 comments on commit fe66a36

Please sign in to comment.