Skip to content

Commit 965cbc6

Browse files
author
Vadim Demedes
authored
Use supertap to generate TAP output (#1610)
1 parent 4124d77 commit 965cbc6

File tree

3 files changed

+67
-66
lines changed

3 files changed

+67
-66
lines changed

lib/reporters/tap.js

+25-64
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
'use strict';
2-
const format = require('util').format;
3-
const indentString = require('indent-string');
2+
const supertap = require('supertap');
43
const stripAnsi = require('strip-ansi');
5-
const yaml = require('js-yaml');
64

75
function dumpError(error, includeMessage) {
86
const obj = Object.assign({}, error.object);
@@ -32,7 +30,7 @@ function dumpError(error, includeMessage) {
3230
obj.at = error.stack.split('\n')[0];
3331
}
3432

35-
return ` ---\n${indentString(yaml.safeDump(obj).trim(), 4)}\n ...`;
33+
return obj;
3634
}
3735

3836
class TapReporter {
@@ -41,79 +39,42 @@ class TapReporter {
4139
}
4240

4341
start() {
44-
return 'TAP version 13';
42+
return supertap.start();
4543
}
4644

4745
test(test) {
48-
const output = [];
49-
50-
let directive = '';
51-
const passed = test.todo ? 'not ok' : 'ok';
52-
53-
if (test.todo) {
54-
directive = '# TODO';
55-
} else if (test.skip) {
56-
directive = '# SKIP';
57-
}
58-
59-
const title = stripAnsi(test.title);
60-
61-
const appendLogs = () => {
62-
if (test.logs) {
63-
test.logs.forEach(log => {
64-
const logLines = indentString(log, 4);
65-
const logLinesWithLeadingFigure = logLines.replace(
66-
/^ {4}/,
67-
' * '
68-
);
69-
70-
output.push(logLinesWithLeadingFigure);
71-
});
72-
}
73-
};
74-
75-
output.push(`# ${title}`);
76-
77-
if (test.error) {
78-
output.push(format('not ok %d - %s', ++this.i, title));
79-
appendLogs();
80-
output.push(dumpError(test.error, true));
81-
} else {
82-
output.push(format('%s %d - %s %s', passed, ++this.i, title, directive).trim());
83-
appendLogs();
84-
}
85-
86-
return output.join('\n');
46+
return supertap.test(test.title, {
47+
passed: !test.error,
48+
index: ++this.i,
49+
todo: test.todo,
50+
skip: test.skip,
51+
comment: test.logs,
52+
error: test.error ? dumpError(test.error, true) : null
53+
});
8754
}
8855

8956
unhandledError(err) {
90-
const output = [
91-
`# ${err.message}`,
92-
format('not ok %d - %s', ++this.i, err.message)
93-
];
57+
let error;
58+
9459
// AvaErrors don't have stack traces
9560
if (err.type !== 'exception' || err.name !== 'AvaError') {
96-
output.push(dumpError(err, false));
61+
error = dumpError(err, false);
9762
}
9863

99-
return output.join('\n');
64+
return supertap.test(err.message, {
65+
passed: false,
66+
index: ++this.i,
67+
error
68+
});
10069
}
10170

10271
finish(runStatus) {
103-
const output = [
104-
'',
105-
'1..' + (runStatus.passCount + runStatus.failCount + runStatus.skipCount),
106-
'# tests ' + (runStatus.passCount + runStatus.failCount + runStatus.skipCount),
107-
'# pass ' + runStatus.passCount
108-
];
109-
110-
if (runStatus.skipCount > 0) {
111-
output.push(`# skip ${runStatus.skipCount}`);
112-
}
113-
114-
output.push('# fail ' + (runStatus.failCount + runStatus.rejectionCount + runStatus.exceptionCount), '');
115-
116-
return output.join('\n');
72+
return supertap.finish({
73+
passed: runStatus.passCount,
74+
failed: runStatus.failCount,
75+
skipped: runStatus.skipCount,
76+
crashed: runStatus.rejectionCount + runStatus.exceptionCount
77+
});
11778
}
11879

11980
write(str) {

package-lock.json

+41-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@
111111
"is-obj": "^1.0.0",
112112
"is-observable": "^1.0.0",
113113
"is-promise": "^2.1.0",
114-
"js-yaml": "^3.8.2",
115114
"last-line-stream": "^1.0.0",
116115
"lodash.clonedeepwith": "^4.5.0",
117116
"lodash.debounce": "^4.0.3",
@@ -139,6 +138,7 @@
139138
"stack-utils": "^1.0.1",
140139
"strip-ansi": "^4.0.0",
141140
"strip-bom-buf": "^1.0.0",
141+
"supertap": "^1.0.0",
142142
"supports-color": "^5.0.0",
143143
"time-require": "^0.1.2",
144144
"trim-off-newlines": "^1.0.1",

0 commit comments

Comments
 (0)