Skip to content

Commit 22643f2

Browse files
amroamroamromikesamuel
authored andcommitted
modules_tests: update test reporting
- log results in a "report" container (that way tests can be run using test_in_node script) - show differences in tables
1 parent 185276e commit 22643f2

File tree

4 files changed

+107
-18
lines changed

4 files changed

+107
-18
lines changed

tests/extractSourceSpans_test.html

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ <h1>Extract Source Spans Test</h1>
5454
</tr>
5555
</table>
5656

57+
<hr>
58+
<h2>Log</h2>
59+
<div id="report"></div>
60+
5761
<script type="text/javascript">
5862
setTimeout(function () {
5963
function stringify(s) {
@@ -63,6 +67,14 @@ <h1>Extract Source Spans Test</h1>
6367
.replace(/\t/g, '\\t');
6468
}
6569

70+
function htmlEscape(s) {
71+
return s
72+
.replace(/&/g, '&amp;')
73+
.replace(/</g, '&lt;')
74+
.replace(/>/g, '&gt;');
75+
}
76+
77+
var out = [];
6678
var testInputs = Array.prototype.slice.call(
6779
document.getElementsByClassName('testinput'), 0);
6880
for (var i = 0, n = testInputs.length; i < n; ++i) {
@@ -74,6 +86,8 @@ <h1>Extract Source Spans Test</h1>
7486
// td.actual
7587
var actual = testResult.nextSibling;
7688
while (actual.nodeType !== 1) { actual = actual.nextSibling; }
89+
// report
90+
out.push('<div class="test">Test ' + (i+1) + ': ');
7791
try {
7892
// run function
7993
var isPreformatted = /pre|xmp/i.test(testInput.tagName);
@@ -94,25 +108,34 @@ <h1>Extract Source Spans Test</h1>
94108
spanClass += ' break';
95109
}
96110
// html formatted
97-
actualHtml += '<span class="' + spanClass+ '">' +
98-
span.replace(/&/g, '&amp;').replace(/</g, '&lt;') + '<\/span>';
111+
actualHtml += '<span class="' + spanClass+ '">' + htmlEscape(span) +
112+
'<\/span>';
99113
}
100114
actual.innerHTML = '<pre>' + actualHtml + '<\/pre>';
101115
// compare result against expected
102116
var goldenText = testResult.innerText || testResult.textContent;
103117
var goldenNormalized = '"' + goldenText.replace(/(?:\r\n?|\n)$/, '') + '"';
104118
var actualNormalized = stringify(actualText);
105119
var passed = actualNormalized === goldenNormalized;
120+
// report test result
121+
actual.className += passed ? ' ok' : ' failure';
122+
out.push((passed ? '\u2713 PASS' : '\u2717 FAIL'), '<\/div>');
106123
if (!passed) {
107-
console.log(goldenNormalized + '\n!==\n' + actualNormalized);
124+
out.push(
125+
'<table class="diff"><tr><th>Golden<\/th><td><code>' +
126+
htmlEscape(goldenNormalized) +
127+
'<\/code><\/td><\/tr><tr><th>Actual<\/th><td><code>' +
128+
htmlEscape(actualNormalized) +
129+
'<\/code><\/td><\/tr><\/table>'
130+
);
108131
}
109-
actual.className += passed ? ' ok' : ' failure';
110132
} catch (ex) {
111133
actual.className += ' error';
112-
actual.appendChild(document.createTextNode(
113-
'Error: ' + (ex.message || ex) + '\n' + ex.stack));
134+
out.push('\u274C ERROR', '<\/div>');
135+
out.push('<pre class="err">', (ex.message || ex), ex.stack, '<\/pre>');
114136
}
115137
}
138+
document.getElementById('report').innerHTML = out.join('\n');
116139
}, 0);
117140
</script>
118141

tests/numberLines_test.html

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
<meta charset="utf-8">
55
<title>numberLines</title>
66
<script src="../js-modules/numberLines.js"></script>
7-
<script src="https://cdn.rawgit.com/douglascrockford/JSON-js/master/json2.js"></script>
87
<script src="shims.js"></script>
98
<link rel="stylesheet" type="text/css" href="test_modules.css">
109
</head>
@@ -63,13 +62,25 @@ <h1>Number Lines Test</h1>
6362
</tr>
6463
</table>
6564

65+
<hr>
66+
<h2>Log</h2>
67+
<div id="report"></div>
68+
6669
<script type="text/javascript">
6770
setTimeout(function () {
6871
function normListItems(html) {
6972
// IE likes to leave out </li>s before <li>s.
7073
return html.replace(/<\/li>(<li\b)/gi, '$1');
7174
}
7275

76+
function htmlEscape(s) {
77+
return s
78+
.replace(/&/g, '&amp;')
79+
.replace(/</g, '&lt;')
80+
.replace(/>/g, '&gt;');
81+
}
82+
83+
var out = [];
7384
var testInputs = Array.prototype.slice.call(
7485
document.getElementsByClassName('testinput'), 0);
7586
for (var i = 0, n = testInputs.length; i < n; ++i) {
@@ -81,6 +92,8 @@ <h1>Number Lines Test</h1>
8192
// td.actual
8293
var actual = testResult.nextSibling;
8394
while (actual.nodeType !== 1) { actual = actual.nextSibling; }
95+
// report
96+
out.push('<div class="test">Test ' + (i+1) + ': ');
8497
try {
8598
// make a copy of input node (modified in-place)
8699
var clone = testInput.cloneNode(true);
@@ -95,17 +108,25 @@ <h1>Number Lines Test</h1>
95108
var goldenNormalized = normListItems(testResult.innerHTML);
96109
var actualNormalized = normListItems(actual.innerHTML);
97110
var passed = goldenNormalized === actualNormalized;
111+
// report test result
112+
actual.className += passed ? ' ok' : ' failure';
113+
out.push((passed ? '\u2713 PASS' : '\u2717 FAIL'), '<\/div>');
98114
if (!passed) {
99-
console.log(JSON.stringify(goldenNormalized) + '\n!==\n' +
100-
JSON.stringify(actualNormalized));
115+
out.push(
116+
'<table class="diff"><tr><th>Golden<\/th><td><code>' +
117+
htmlEscape(goldenNormalized) +
118+
'<\/code><\/td><\/tr><tr><th>Actual<\/th><td><code>' +
119+
htmlEscape(actualNormalized) +
120+
'<\/code><\/td><\/tr><\/table>'
121+
);
101122
}
102-
actual.className += passed ? ' ok' : ' failure';
103123
} catch (ex) {
104124
actual.className += ' error';
105-
actual.appendChild(document.createTextNode(
106-
'Error: ' + (ex.message || ex) + '\n' + ex.stack));
125+
out.push('\u274C ERROR', '<\/div>');
126+
out.push('<pre class="err">', (ex.message || ex), ex.stack, '<\/pre>');
107127
}
108128
}
129+
document.getElementById('report').innerHTML = out.join('\n');
109130
}, 0);
110131
</script>
111132

tests/recombineTagsAndDecorations_test.html

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
<title>recombineTagsAndDecorations</title>
66
<script src="../js-modules/extractSourceSpans.js"></script>
77
<script src="../js-modules/recombineTagsAndDecorations.js"></script>
8-
<script src="https://cdn.rawgit.com/douglascrockford/JSON-js/master/json2.js"></script>
98
<script src="shims.js"></script>
109
<link rel="stylesheet" type="text/css" href="../src/prettify.css">
1110
<link rel="stylesheet" type="text/css" href="test_modules.css">
@@ -38,8 +37,20 @@ <h1>Recombine Tags And Decorations Test</h1>
3837
</tr>
3938
</table>
4039

40+
<hr>
41+
<h2>Log</h2>
42+
<div id="report"></div>
43+
4144
<script type="text/javascript">
4245
setTimeout(function () {
46+
function htmlEscape(s) {
47+
return s
48+
.replace(/&/g, '&amp;')
49+
.replace(/</g, '&lt;')
50+
.replace(/>/g, '&gt;');
51+
}
52+
53+
var out = [];
4354
var testInputs = Array.prototype.slice.call(
4455
document.getElementsByClassName('testinput'), 0);
4556
for (var i = 0, n = testInputs.length; i < n; ++i) {
@@ -54,6 +65,8 @@ <h1>Recombine Tags And Decorations Test</h1>
5465
// td.actual
5566
var actual = testResult.nextSibling;
5667
while (actual.nodeType !== 1) { actual = actual.nextSibling; }
68+
// report
69+
out.push('<div class="test">Test ' + (i+1) + ': ');
5770
try {
5871
// make a copy of input node (modified in-place)
5972
var clone = testInput.cloneNode(true);
@@ -77,17 +90,25 @@ <h1>Recombine Tags And Decorations Test</h1>
7790
recombineTagsAndDecorations(job);
7891
// compare result against expected
7992
var passed = testResult.innerHTML === actual.innerHTML;
93+
// report test result
94+
actual.className += passed ? ' ok' : ' failure';
95+
out.push((passed ? '\u2713 PASS' : '\u2717 FAIL'), '<\/div>');
8096
if (!passed) {
81-
console.log(JSON.stringify(testResult.innerHTML) + '\n!==\n' +
82-
JSON.stringify(actual.innerHTML));
97+
out.push(
98+
'<table class="diff"><tr><th>Golden<\/th><td><code>' +
99+
htmlEscape(testResult.innerHTML) +
100+
'<\/code><\/td><\/tr><tr><th>Actual<\/th><td><code>' +
101+
htmlEscape(actual.innerHTML) +
102+
'<\/code><\/td><\/tr><\/table>'
103+
);
83104
}
84-
actual.className += passed ? ' ok' : ' failure';
85105
} catch (ex) {
86106
actual.className += ' error';
87-
actual.appendChild(document.createTextNode(
88-
'Error: ' + (ex.message || ex) + '\n' + ex.stack));
107+
out.push('\u274C ERROR', '<\/div>');
108+
out.push('<pre class="err">', (ex.message || ex), ex.stack, '<\/pre>');
89109
}
90110
}
111+
document.getElementById('report').innerHTML = out.join('\n');
91112
}, 0);
92113
</script>
93114

tests/test_modules.css

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,27 @@ td {
6464
background-color: #ddd;
6565
border-color: #000;
6666
}
67+
68+
/* log */
69+
#report {
70+
margin-left: 1em;
71+
}
72+
.pass {
73+
color: green;
74+
}
75+
.fail, .err {
76+
color: red;
77+
}
78+
79+
/* diff tables */
80+
table.diff {
81+
table-layout: fixed;
82+
max-width: 100%;
83+
}
84+
.diff th {
85+
width: 50px;
86+
}
87+
.diff td {
88+
white-space: pre-wrap;
89+
word-wrap: break-word;
90+
}

0 commit comments

Comments
 (0)