1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', {
|
4 | value: true
|
5 | });
|
6 |
|
7 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
8 |
|
9 | var _babelPolyfill = require('babel/polyfill');
|
10 |
|
11 | var _babelPolyfill2 = _interopRequireDefault(_babelPolyfill);
|
12 |
|
13 | var _diff = require('diff');
|
14 |
|
15 | var _chalk = require('chalk');
|
16 |
|
17 | var _chalk2 = _interopRequireDefault(_chalk);
|
18 |
|
19 | var _duplexer = require('duplexer');
|
20 |
|
21 | var _duplexer2 = _interopRequireDefault(_duplexer);
|
22 |
|
23 | var _figures = require('figures');
|
24 |
|
25 | var _figures2 = _interopRequireDefault(_figures);
|
26 |
|
27 | var _through2 = require('through2');
|
28 |
|
29 | var _through22 = _interopRequireDefault(_through2);
|
30 |
|
31 | var _tapParser = require('tap-parser');
|
32 |
|
33 | var _tapParser2 = _interopRequireDefault(_tapParser);
|
34 |
|
35 | var _prettyMs = require('pretty-ms');
|
36 |
|
37 | var _prettyMs2 = _interopRequireDefault(_prettyMs);
|
38 |
|
39 | var INDENT = ' ';
|
40 | var FIG_TICK = _figures2['default'].tick;
|
41 | var FIG_CROSS = _figures2['default'].cross;
|
42 |
|
43 | var 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 |
|
153 | exports['default'] = createReporter;
|
154 | module.exports = exports['default']; |
\ | No newline at end of file |