Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80668 views
1
var fs = require('fs');
2
var _ = require('underscore');
3
4
function htmlEscape(string) {
5
return string.replace(/&/g, "&")
6
.replace(/</g, "&lt;")
7
.replace(/>/g, "&gt;")
8
.replace(/"/g, "&quot;")
9
.replace(/'/g, "&#39;");
10
}
11
12
module.exports = {
13
name: "html",
14
format: function(coverageData) {
15
var source = coverageData.source.split("\n");
16
var stats = coverageData.stats();
17
var finalOutput = [];
18
var fileOutput = [];
19
20
for(var i = 0 ; i < source.length; i++) {
21
var sourceLine = source[i];
22
var line = i;
23
var lineOutput = [];
24
if (!stats.coverage.hasOwnProperty(line + 1)) {
25
lineOutput.push("<span class='covered'> ");
26
lineOutput.push(htmlEscape(sourceLine));
27
lineOutput.push("</span>");
28
}
29
else {
30
var lineInfo = stats.coverage[line + 1];
31
sourceLine = lineInfo.source;
32
33
if (!lineInfo.partial) {
34
// If it isn't partial, then we can just append the entire line
35
lineOutput.push("<span class='uncovered'> ");
36
lineOutput.push(htmlEscape(sourceLine));
37
lineOutput.push("</span>");
38
}
39
else {
40
lineOutput.push("<span class='partial'> ");
41
42
for(var j = 0; j < lineInfo.missing.length; j++) {
43
curStart = j == 0 ? 0 : (lineInfo.missing[j-1].endCol + 1);
44
curEnd = lineInfo.missing[j].startCol;
45
46
lineOutput.push(htmlEscape(sourceLine.slice(curStart, curEnd)));
47
48
lineOutput.push("<span class='partialuncovered'>");
49
lineOutput.push(htmlEscape(sourceLine.slice(lineInfo.missing[j].startCol, lineInfo.missing[j].endCol + 1)));
50
lineOutput.push("</span>");
51
}
52
53
// Add the straggling part
54
curStart = lineInfo.missing[lineInfo.missing.length - 1].endCol + 1;
55
curEnd = sourceLine.length;
56
lineOutput.push(htmlEscape(sourceLine.slice(curStart, curEnd)));
57
58
lineOutput.push("</span>");
59
}
60
}
61
fileOutput.push(lineOutput.join(""));
62
}
63
64
var lineOutput = [];
65
for(var i = 0; i < source.length; i++) {
66
var lineNum = i + 1;
67
lineOutput.push("<p>" + lineNum + "</p>");
68
}
69
70
finalOutput.push("<td class='linenos' valign='top'>");
71
finalOutput.push(lineOutput.join(""));
72
finalOutput.push("</td>");
73
finalOutput.push("<td class='text' valign='top'>");
74
finalOutput.push("<pre class='prettyprint lang-js'>");
75
finalOutput.push(fileOutput.join("\n"));
76
finalOutput.push("</pre>");
77
finalOutput.push("</td>");
78
79
var outputString = finalOutput.join("");
80
81
return outputString;
82
}
83
}
84