UNPKG

4.45 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', {
4 value: true
5});
6
7function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
8
9var _babelPolyfill = require('babel/polyfill');
10
11var _babelPolyfill2 = _interopRequireDefault(_babelPolyfill);
12
13var _diff = require('diff');
14
15var _chalk = require('chalk');
16
17var _chalk2 = _interopRequireDefault(_chalk);
18
19var _duplexer = require('duplexer');
20
21var _duplexer2 = _interopRequireDefault(_duplexer);
22
23var _figures = require('figures');
24
25var _figures2 = _interopRequireDefault(_figures);
26
27var _through2 = require('through2');
28
29var _through22 = _interopRequireDefault(_through2);
30
31var _tapParser = require('tap-parser');
32
33var _tapParser2 = _interopRequireDefault(_tapParser);
34
35var _prettyMs = require('pretty-ms');
36
37var _prettyMs2 = _interopRequireDefault(_prettyMs);
38
39var INDENT = ' ';
40var FIG_TICK = _figures2['default'].tick;
41var FIG_CROSS = _figures2['default'].cross;
42
43var createReporter = function createReporter() {
44 var output = (0, _through22['default'])();
45 var p = (0, _tapParser2['default'])();
46 var stream = (0, _duplexer2['default'])(p, output);
47 var startedAt = Date.now();
48
49 var write = function write(str) {
50 var indentLevel = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
51
52 var indent = '';
53
54 for (var i = 0; i < indentLevel; ++i) {
55 indent += INDENT;
56 }
57
58 output.push(str.split('\n').map(function (part) {
59 return part.length > 0 ? '' + indent + part : part;
60 }).join('\n'));
61 };
62
63 var handleTest = function handleTest(name) {
64 write('\n');
65 write(_chalk2['default'].blue(name) + '\n', 1);
66 };
67
68 var handleAssertSuccess = function handleAssertSuccess(assert) {
69 var name = assert.name;
70
71 write(_chalk2['default'].green(FIG_TICK) + ' ' + _chalk2['default'].dim(name) + '\n', 2);
72 };
73
74 var handleAssertFailure = function handleAssertFailure(assert) {
75 var name = assert.name;
76 var diag = assert.diag;
77 var writeDiff = function writeDiff(_ref) {
78 var value = _ref.value;
79 var added = _ref.added;
80 var removed = _ref.removed;
81
82 var style = _chalk2['default'].white;
83
84 if (added) style = _chalk2['default'].green.inverse;
85 if (removed) style = _chalk2['default'].red.inverse;
86
87 return value.split('\n').map(function (str) {
88 return str.length > 0 ? style(str) : str;
89 }).join('\n');
90 };
91
92 write(_chalk2['default'].red(FIG_CROSS) + ' ' + _chalk2['default'].red(name) + ' ', 2);
93 write('at ' + _chalk2['default'].magenta(diag.at) + '\n');
94
95 if (typeof diag.expected === 'object' && diag.expected !== null) {
96 var compared = (0, _diff.diffJson)(diag.actual, diag.expected).map(writeDiff).join('');
97
98 write(compared + '\n', 4);
99 } else if (typeof diag.expected === 'string') {
100 var compared = (0, _diff.diffWords)(diag.actual, diag.expected).map(writeDiff).join('');
101
102 write(compared + '\n', 4);
103 } else {
104 write(' ' + _chalk2['default'].red.inverse(diag.actual) + _chalk2['default'].green.inverse(diag.expected) + '\n');
105 }
106 };
107
108 var handleComplete = function handleComplete(results) {
109 var finishedAt = Date.now();
110
111 write('\n');
112 write(_chalk2['default'].green('passed: ' + results.pass + ' '));
113 write(_chalk2['default'].red('failed: ' + (results.fail || 0) + ' '));
114 write(_chalk2['default'].white('of ' + results.count + ' tests '));
115 write(_chalk2['default'].dim('(' + (0, _prettyMs2['default'])(finishedAt - startedAt) + ')\n\n'));
116
117 if (results.ok) {
118 write(_chalk2['default'].green('All of ' + results.count + ' tests passed!'));
119 } else {
120 write(_chalk2['default'].red(results.fail + ' of ' + results.count + ' tests failed.'));
121 stream.isFailed = true;
122 }
123
124 write('\n\n');
125 };
126
127 p.on('comment', function (comment) {
128 var trimmed = comment.replace('# ', '').trim();
129
130 if (/^tests\s+[0-9]+$/.test(trimmed)) return;
131 if (/^pass\s+[0-9]+$/.test(trimmed)) return;
132 if (/^fail\s+[0-9]+$/.test(trimmed)) return;
133 if (/^ok$/.test(trimmed)) return;
134
135 handleTest(trimmed);
136 });
137
138 p.on('assert', function (assert) {
139 if (assert.ok) return handleAssertSuccess(assert);
140
141 handleAssertFailure(assert);
142 });
143
144 p.on('complete', handleComplete);
145
146 p.on('child', function (child) {
147 ;
148 });
149
150 return stream;
151};
152
153exports['default'] = createReporter;
154module.exports = exports['default'];
\No newline at end of file