cssified reports, made everything look prettyish

This commit is contained in:
tmont 2009-06-30 07:17:35 +00:00
parent dafa6ebffa
commit 627c95ed81
8 changed files with 180 additions and 44 deletions

View File

@ -39,13 +39,20 @@
<target name="product" depends="init, set-revision-number" description="Generates Product.php (product meta information)">
<exec executable="php">
<arg line="${dir.tools}/productize.php"/>
<arg line="-n ${product.name}"/>
<arg line="-v ${product.version}.${product.revision}"/>
<arg line="-n"/>
<arg line="${product.name}"/>
<arg line="-v"/>
<arg line="${product.version}.${product.revision}"/>
<arg line="-a"/>
<arg line="${product.author}"/>
<arg line="-w ${product.website}"/>
<arg line="-p ${ant.project.name}"/>
<arg line="-o ${dir.src}/${ant.project.name}/util/Product.php"/>
<arg line="-e"/>
<arg line="${product.ezc}"/>
<arg line="-w"/>
<arg line="${product.website}"/>
<arg line="-p"/>
<arg line="${ant.project.name}"/>
<arg line="-o"/>
<arg line="${dir.src}/${ant.project.name}/util/Product.php"/>
</exec>
</target>

View File

@ -1,4 +1,5 @@
name=TUnit
version=0.5.0
author="Tommy Montgomery"
website=http://tommymontgomery.com/
website=http://tommymontgomery.com/
ezc=1.0

View File

@ -13,7 +13,6 @@
$newData = array();
foreach ($coverageData as $file => $data) {
$classes = Util::getClassNamesFromFile($file);
//print_r($classes);
$refClasses = array();
foreach ($classes as $class) {
@ -167,9 +166,17 @@
$tcloc += $methodData['cloc'];
$methodStartLine = $refClass->getMethod($method)->getStartLine();
$methodCoverage .= "<tr class=\"method-coverage\"><th>&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#line-$methodStartLine\">$method</a></th>";
$methodCoverage .= "<td>$methodData[cloc] / " . ($methodData['loc'] - $methodData['dloc']) . "</td>";
$methodCoverage .= "<td>" . round($methodData['cloc'] / ($methodData['loc'] - $methodData['dloc']) * 100, 2) . "%</td></tr>\n";
$methodDeclaration = $method . '(';
$refMethod = $refClass->getMethod($method);
$methodDeclaration .= Util::buildParameterDefinition($refMethod) . ')';
unset($refMethod);
$percentageData = self::getPercentage($methodData['cloc'], $methodData['loc'] - $methodData['dloc']);
$methodCoverage .= "<tr class=\"method-coverage\"><th>&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#line-$methodStartLine\">$methodDeclaration</a></th>";
$methodCoverage .= "<td class=\"coverage-ratio\" style=\"background-color: $percentageData[1]\">$methodData[cloc] / " . ($methodData['loc'] - $methodData['dloc']) . "</td>";
$methodCoverage .= "<td class=\"coverage-percentage\" style=\"background-color: $percentageData[1]\">$percentageData[0]%</td></tr>\n";
$classLoc += $methodData['loc'];
$classDloc += $methodData['dloc'];
@ -177,8 +184,10 @@
}
$classStartLine = $refClass->getStartLine();
$classCoverage .= "<tr class=\"class-coverage\"><th>&nbsp;&nbsp;<a href=\"#line-$classStartLine\">$class</a></th><td>$classCloc / " . ($classLoc - $classDloc) . "</td>";
$classCoverage .= "<td>" . round($classCloc / ($classLoc - $classDloc) * 100, 2) . "%</td></tr>\n";
$percentageData = self::getPercentage($classCloc, $classLoc - $classDloc);
$classCoverage .= "<tr class=\"class-coverage\"><th>&nbsp;&nbsp;<a href=\"#line-$classStartLine\">$class</a></th>";
$classCoverage .= "<td class=\"coverage-ratio\" style=\"background-color: $percentageData[1]\">$classCloc / " . ($classLoc - $classDloc) . "</td>";
$classCoverage .= "<td class=\"coverage-percentage\" style=\"background-color: $percentageData[1]\">$percentageData[0]%</td></tr>\n";
$classCoverage .= $methodCoverage;
}
@ -186,8 +195,10 @@
$tdloc += $classData['procedural']['dloc'];
$tcloc += $classData['procedural']['cloc'];
$fileCoveragePercent = round($tcloc / max($tloc - $tdloc, 1) * 100, 2);
$fileCoverage = "<tr class=\"file-coverage\"><th>$sourceFile</th><td>$tcloc / " . ($tloc - $tdloc) . "</td><td>$fileCoveragePercent%</td></tr>\n";
$percentageData = self::getPercentage($tcloc, $tloc - $tdloc);
$fileCoverage = "<tr class=\"file-coverage\"><th>$sourceFile</th>";
$fileCoverage .= "<td class=\"coverage-percentage\" style=\"background-color: $percentageData[1]\">$tcloc / " . ($tloc - $tdloc) . "</td>";
$fileCoverage .= "<td class=\"coverage-ratio\" style=\"background-color: $percentageData[1]\">$percentageData[0]%</td></tr>\n";
$fileCoverage .= $classCoverage;
unset($classCoverage, $methodCoverage, $classData, $refClass);
@ -197,7 +208,7 @@
$lineNumbers = '';
for ($i = 1, $len = count($lines); $i <= $len; $i++) {
$lineNumbers .= '<div><a name="#line-' . $i . '" href="#line-' . $i . '">' . $i . '</a></div>';
$lineNumbers .= '<div><a name="line-' . $i . '" href="#line-' . $i . '">' . $i . '</a></div>';
$code .= '<div';
if (isset($coverageData[$i])) {
$code .= ' class="';
@ -239,7 +250,10 @@
'${product.name}',
'${product.version}',
'${product.website}',
'${product.author}'
'${product.author}',
'${php.version}',
'${xdebug.version}',
'${ezc.version}'
),
array(
Product::NAME . ' - Coverage Report',
@ -251,7 +265,10 @@
Product::NAME,
Product::VERSION,
Product::WEBSITE,
Product::AUTHOR
Product::AUTHOR,
phpversion(),
phpversion('xdebug'),
Product::EZC_VERSION
),
$template
);
@ -319,17 +336,19 @@
}
$subdata = $dirData[$subdir];
$percentageData = self::getPercentage($subdata['cloc'], $subdata['loc'] - $subdata['dloc']);
$info .= '<tr><th><a href="' . self::buildLink($baseDir, $subdir . DIRECTORY_SEPARATOR . 'foo', true) . '.html">' . basename($subdir) . '</a></th>';
$info .= '<td>' . $subdata['cloc'] . ' / ' . ($subdata['loc'] - $subdata['dloc']) . '</td>';
$info .= '<td>' . round($subdata['cloc'] / ($subdata['loc'] - $subdata['dloc']) * 100, 2) . '%</td>';
$info .= '<td class="coverage-ratio" style="background-color: ' . $percentageData[1] . '">' . $subdata['cloc'] . ' / ' . ($subdata['loc'] - $subdata['dloc']) . '</td>';
$info .= "<td class=\"coverage-percentage\" style=\"background-color: $percentageData[1]\">$percentageData[0]%</td>";
$info .= "</tr>\n";
}
//regular files in current directory
foreach ($data['files'] as $file => $fileData) {
$percentageData = self::getPercentage($fileData['cloc'], $fileData['loc'] - $fileData['dloc']);
$info .= '<tr><th><a href="' . self::buildLink($baseDir, $file, true) . '-' . basename($file) . '.html">' . basename($file) . '</a></th>';
$info .= '<td>' . $fileData['cloc'] . ' / ' . ($fileData['loc'] - $fileData['dloc']) . '</td>';
$info .= '<td>' . round($fileData['cloc'] / ($fileData['loc'] - $fileData['dloc']) * 100, 2) . '%</td>';
$info .= '<td class="coverage-ratio" style="background-color: ' . $percentageData[1] . '">' . $fileData['cloc'] . ' / ' . ($fileData['loc'] - $fileData['dloc']) . '</td>';
$info .= "<td class=\"coverage-percentage\" style=\"background-color: $percentageData[1]\">$percentageData[0]%</td>";
$info .= "</tr>\n";
}
@ -342,7 +361,10 @@
'${product.name}',
'${product.version}',
'${product.website}',
'${product.author}'
'${product.author}',
'${php.version}',
'${xdebug.version}',
'${ezc.version}'
),
array(
Product::NAME . ' - Coverage Report',
@ -352,7 +374,10 @@
Product::NAME,
Product::VERSION,
Product::WEBSITE,
Product::AUTHOR
Product::AUTHOR,
phpversion(),
phpversion('xdebug'),
Product::EZC_VERSION
),
$template
);
@ -368,6 +393,7 @@
} else {
$link = '<a href="./index.html">' . $baseDir . '</a>';
}
$dirs = preg_split('@\\' . DIRECTORY_SEPARATOR . '@', str_replace($baseDir, '', dirname($path) . DIRECTORY_SEPARATOR), -1, PREG_SPLIT_NO_EMPTY);
$path = '';
foreach ($dirs as $dir) {
@ -376,6 +402,7 @@
} else {
$path = $path . '-' . $dir;
}
if ($oneLink) {
$link = $path;
} else {
@ -394,6 +421,25 @@
return $old + (($new > 0) ? 1 : 0);
}
private static function getPercentage($numerator, $denominator) {
$percentage = ($denominator != 0) ? round($numerator / $denominator * 100, 2) : 0;
$percentage = number_format($percentage, 2);
return array(
str_repeat('&nbsp;', 6 - strlen($percentage)) . $percentage,
self::getCoverageColor($percentage)
);
}
private static function getCoverageColor($percentage) {
$color = '#';
$color .= str_pad(dechex(255 - round($percentage * 2.55)), 2, '0', STR_PAD_LEFT);
$color .= str_pad(dechex(round($percentage * 2.55)), 2, '0', STR_PAD_LEFT);
$color .= '33';
return $color;
}
}
?>

View File

@ -13,18 +13,32 @@
<div id="wrapper">
<div id="header">
<h1>${file.link}</h1>
<h1>${product.name} Code Coverage Report</h1>
</div>
<div id="file-link">
<p>${file.link}</p>
</div>
<div id="directory-coverage">
<table>
<colgroup>
<col style="width:50%"/>
<col style="width:25%"/>
<col style="width:25%"/>
</colgroup>
${directory.coverage}
</table>
</div>
<div id="footer">
<p>
Generated on ${timestamp} by <a href="${product.website}">${product.name} ${product.version}</a>
Generated on ${timestamp} by <a href="${product.website}" title="${product.name}">${product.name} ${product.version}</a>
<br />
<a href="http://php.net/" title="PHP">PHP ${php.version}</a> |
<a href="http://xdebug.org/" title="Xdebug">Xdebug ${xdebug.version}</a> |
<a href="http://ezcomponents.org/" title="ezComponents">ezComponents ${ezc.version}</a>
<br />
&copy; 2009 ${product.author}
</p>

View File

@ -13,14 +13,25 @@
<div id="wrapper">
<div id="header">
<h1>${file.link}</h1>
<h1>${product.name} Code Coverage Report</h1>
</div>
<div id="file-link">
<p>${file.link}</p>
</div>
<div id="summary">
<table>
<tr>
<td></td><th colspan="3">Coverage</th>
</tr>
<colgroup>
<col width="50%"/>
<col width="25%"/>
<col width="25%"/>
</colgroup>
<thead>
<tr>
<td></td><th colspan="2">Coverage</th>
</tr>
</thead>
${file.coverage}
</table>
</div>
@ -36,7 +47,11 @@ ${code}
<div id="footer">
<p>
Generated on ${timestamp} by <a href="${product.website}">${product.name} ${product.version}</a>
Generated on ${timestamp} by <a href="${product.website}" title="${product.name}">${product.name} ${product.version}</a>
<br />
<a href="http://php.net/" title="PHP">PHP ${php.version}</a> |
<a href="http://xdebug.org/" title="Xdebug">Xdebug ${xdebug.version}</a> |
<a href="http://ezcomponents.org/" title="ezComponents">ezComponents ${ezc.version}</a>
<br />
&copy; 2009 ${product.author}
</p>

View File

@ -2,11 +2,48 @@ html {
overflow: auto;
}
body {
background-color: #FFFFCC;
background-color: #CCFFCC;
color: #000000;
font-family: Consolas, "Courier New", monospace;
font-size: 16px;
}
h1 {
text-align: center;
}
a {
text-decoration: none;
color: #990099;
}
a:hover {
text-decoration: underline;
}
table {
background-color: #FFFFFF;
border-collapse: collapse;
border: 2px solid #000000;
width: 100%;
}
th, td {
border: 1px solid #000000;
padding: .3em;
}
th {
text-align: left;
font-weight: bold;
}
thead th {
text-align: center;
}
#file-link {
text-align: center;
}
#file-link a {
color: #990000;
display: inline-block;
margin-right: 5px;
font-weight: bold;
}
#code-wrapper {
background-color: #FFFFFF;
@ -42,16 +79,21 @@ body {
background-color: #FFFFFF;
margin-bottom: 20px;
}
#summary th {
text-align: left;
}
#footer {
text-align: center;
font-family: Verdana, sans-serif;
font-size: 8pt;
font-size: 12px;
}
#footer a {
color: #000000;
}
.coverage-percentage {
text-align: center;
}
.coverage-ratio {
text-align: center;
}
.covered {
background-color: #66FF66;
}

View File

@ -75,7 +75,7 @@
$paramList = '';
foreach ($method->getParameters() as $i => $param) {
if ($param->getClass()) {
$paramList .= $param->getClass() . ' ';
$paramList .= $param->getClass()->getName() . ' ';
} else if ($param->isArray()) {
$paramList .= 'array ';
}
@ -89,13 +89,18 @@
if ($param->isOptional()) {
$paramList .= ' = ';
if ($param->isDefaultValueAvailable()) {
$paramList .= var_export($param->getDefaultValue(), true);
if (is_array($param->getDefaultValue())) {
//removes annoying spaces in parens
$paramList .= 'array()';
} else {
$paramList .= var_export($param->getDefaultValue(), true);
}
} else {
$paramList .= 'null';
}
}
$paramList .= ',';
$paramList .= ', ';
}
return rtrim($paramList, ', ');

View File

@ -26,6 +26,7 @@
->addSwitch(new CliSwitch('version', 'v', true, 'version_number', 'Product version'))
->addSwitch(new CliSwitch('author', 'a', true, 'author_name', 'Product author'))
->addSwitch(new CliSwitch('website', 'w', true, 'url', 'Product website'))
->addSwitch(new CliSwitch('ezc', 'e', true, 'version', 'ezComponents version number'))
->addSwitch(new CliSwitch('package', 'p', true, 'package_name ', 'Name of the package for use in @package tag'))
->addSwitch(new CliSwitch('doc-version', 'd', false, 'version_number', 'Version number for use in @version tag'))
->addSwitch(new CliSwitch('output', 'o', false, 'file|dir', 'The file/directory to write the generated class to; default is stdout'));
@ -76,27 +77,32 @@
/**
* Product name
*/
const NAME = '$args[name]';
const NAME = '$args[name]';
/**
* Product version
*/
const VERSION = '$args[version]';
const VERSION = '$args[version]';
/**
* Product author
*/
const AUTHOR = '$args[author]';
const AUTHOR = '$args[author]';
/**
* Product website
*/
const WEBSITE = '$args[website]';
const WEBSITE = '$args[website]';
/**
* Product build date
*/
const DATE = '$datetime';
const DATE = '$datetime';
/**
* ezComponents version
*/
const EZC_VERSION = '$args[ezc]';
/**#@-*/
/**