Skip to content

Commit 63a15e7

Browse files
committed
Provide some very rudimentary CSS & JS to collapse the 'covered' source by default and use colours to draw your eye to the areas that need tackling
1 parent e80e96d commit 63a15e7

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

lib/vows/coverage/fragments/coverage-head.html

+23
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,24 @@
1212
font-size: 0.8em;
1313
color: #333;
1414
}
15+
.coverage.fullCoverage {
16+
background-color:#0f0;
17+
color: #111;
18+
}
19+
.coverage.okCoverage {
20+
background-color: orange;
21+
}
22+
.coverage.poorCoverage {
23+
background-color: red;
24+
}
1525
.code {
1626
font-family: "Consolas", "Courier New", Courier, mono;
1727
white-space: pre;
1828
line-height: 16px;
1929
}
30+
.collapsed {
31+
display: none;
32+
}
2033
body {
2134
margin-left: 20px;
2235
margin-top: 8px;
@@ -34,5 +47,15 @@
3447
box-shadow: 10px 10px 5px #888;
3548
}
3649
</style>
50+
<script type="text/javascript">
51+
function expando(elem) {
52+
// We're skipping the '/n' text element sibling.
53+
var olElement= elem.nextSibling.nextSibling;
54+
var currentState= olElement.className;
55+
if( currentState == "collapsed" ) currentState= "";
56+
else currentState= "collapsed";
57+
olElement.className= currentState;
58+
}
59+
</script>
3760
</head>
3861
<body>

lib/vows/coverage/report-html.js

+14-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ var sys = require('sys'),
44

55
this.name = 'coverage-report-html';
66

7+
function getCoverageClass( data ) {
8+
var fullCoverage= (data.coverage == 100);
9+
var okCoverage= (!fullCoverage && data.coverage >=60);
10+
var coverageClass= '';
11+
if( fullCoverage ) coverageClass= 'fullCoverage';
12+
else if( okCoverage) coverageClass= 'okCoverage';
13+
else coverageClass= 'poorCoverage';
14+
return coverageClass;
15+
}
716
this.report = function (coverageMap) {
817
var out, head, foot;
918

@@ -21,12 +30,12 @@ this.report = function (coverageMap) {
2130
for (var filename in coverageMap) {
2231
if (coverageMap.hasOwnProperty(filename)) {
2332
var data = file.coverage(filename, coverageMap[filename]);
24-
33+
var coverageClass= getCoverageClass( data );
2534
fs.writeSync(out, "<h2>" + filename + "</h2>\n");
26-
fs.writeSync(out, '<span class="coverage">' + "[ hits: " + data.hits);
35+
fs.writeSync(out, '<span class="coverage '+ coverageClass+'">' + "[ hits: " + data.hits);
2736
fs.writeSync(out, ", misses: " + data.misses + ", sloc: " + data.sloc);
28-
fs.writeSync(out, ", coverage: " + data.coverage.toFixed(2) + "% ]" + "</span>\n");
29-
fs.writeSync(out, "<ol>\n");
37+
fs.writeSync(out, ", coverage: " + data.coverage.toFixed(2) + "% ]" + "</span> <a href='#' onclick='expando(this)'>[+]</a>\n");
38+
fs.writeSync(out, "<ol class='collapsed'>\n");
3039

3140
for (var i = 0; i < data.source.length; i++) {
3241
fs.writeSync(out, ' <li class="code ');
@@ -36,6 +45,7 @@ this.report = function (coverageMap) {
3645
}
3746

3847
fs.writeSync(out, "</ol>\n");
48+
fs.writeSync(out, "<hr/>\n");
3949
}
4050
}
4151

0 commit comments

Comments
 (0)