mocha 3.5.1 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +93 -1
- package/README.md +1 -1
- package/bin/_mocha +9 -5
- package/browser-entry.js +3 -3
- package/lib/browser/growl.js +5 -0
- package/lib/context.js +1 -8
- package/lib/interfaces/common.js +0 -3
- package/lib/mocha.js +0 -1
- package/lib/reporters/base.js +17 -5
- package/lib/reporters/json-stream.js +0 -1
- package/lib/reporters/xunit.js +21 -6
- package/lib/runnable.js +12 -6
- package/lib/runner.js +42 -31
- package/lib/suite.js +20 -8
- package/lib/test.js +3 -5
- package/lib/utils.js +19 -198
- package/mocha.js +7563 -8782
- package/package.json +29 -33
- package/bower.json +0 -38
- package/lib/browser/debug.js +0 -7
- package/lib/browser/events.js +0 -195
- package/lib/to-iso-string/LICENSE +0 -19
- package/lib/to-iso-string/index.js +0 -37
package/lib/test.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
var Runnable = require('./runnable');
|
|
8
|
-
var
|
|
9
|
-
var isString =
|
|
8
|
+
var utils = require('./utils');
|
|
9
|
+
var isString = utils.isString;
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Expose `Test`.
|
|
@@ -33,9 +33,7 @@ function Test (title, fn) {
|
|
|
33
33
|
/**
|
|
34
34
|
* Inherit from `Runnable.prototype`.
|
|
35
35
|
*/
|
|
36
|
-
|
|
37
|
-
constructor: Test
|
|
38
|
-
});
|
|
36
|
+
utils.inherits(Test, Runnable);
|
|
39
37
|
|
|
40
38
|
Test.prototype.clone = function () {
|
|
41
39
|
var test = new Test(this.title, this.fn);
|
package/lib/utils.js
CHANGED
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
* Module dependencies.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
var JSON = require('json3');
|
|
10
9
|
var basename = require('path').basename;
|
|
11
10
|
var debug = require('debug')('mocha:watch');
|
|
12
|
-
var exists = require('fs').existsSync
|
|
11
|
+
var exists = require('fs').existsSync;
|
|
13
12
|
var glob = require('glob');
|
|
14
13
|
var path = require('path');
|
|
15
14
|
var join = path.join;
|
|
@@ -17,7 +16,6 @@ var readdirSync = require('fs').readdirSync;
|
|
|
17
16
|
var statSync = require('fs').statSync;
|
|
18
17
|
var watchFile = require('fs').watchFile;
|
|
19
18
|
var lstatSync = require('fs').lstatSync;
|
|
20
|
-
var toISOString = require('./to-iso-string');
|
|
21
19
|
var he = require('he');
|
|
22
20
|
|
|
23
21
|
/**
|
|
@@ -36,21 +34,7 @@ exports.inherits = require('util').inherits;
|
|
|
36
34
|
* @return {string}
|
|
37
35
|
*/
|
|
38
36
|
exports.escape = function (html) {
|
|
39
|
-
return he.encode(String(html), { useNamedReferences:
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Array#forEach (<=IE8)
|
|
44
|
-
*
|
|
45
|
-
* @api private
|
|
46
|
-
* @param {Array} arr
|
|
47
|
-
* @param {Function} fn
|
|
48
|
-
* @param {Object} scope
|
|
49
|
-
*/
|
|
50
|
-
exports.forEach = function (arr, fn, scope) {
|
|
51
|
-
for (var i = 0, l = arr.length; i < l; i++) {
|
|
52
|
-
fn.call(scope, arr[i], i);
|
|
53
|
-
}
|
|
37
|
+
return he.encode(String(html), { useNamedReferences: false });
|
|
54
38
|
};
|
|
55
39
|
|
|
56
40
|
/**
|
|
@@ -64,118 +48,6 @@ exports.isString = function (obj) {
|
|
|
64
48
|
return typeof obj === 'string';
|
|
65
49
|
};
|
|
66
50
|
|
|
67
|
-
/**
|
|
68
|
-
* Array#map (<=IE8)
|
|
69
|
-
*
|
|
70
|
-
* @api private
|
|
71
|
-
* @param {Array} arr
|
|
72
|
-
* @param {Function} fn
|
|
73
|
-
* @param {Object} scope
|
|
74
|
-
* @return {Array}
|
|
75
|
-
*/
|
|
76
|
-
exports.map = function (arr, fn, scope) {
|
|
77
|
-
var result = [];
|
|
78
|
-
for (var i = 0, l = arr.length; i < l; i++) {
|
|
79
|
-
result.push(fn.call(scope, arr[i], i, arr));
|
|
80
|
-
}
|
|
81
|
-
return result;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Array#indexOf (<=IE8)
|
|
86
|
-
*
|
|
87
|
-
* @api private
|
|
88
|
-
* @param {Array} arr
|
|
89
|
-
* @param {Object} obj to find index of
|
|
90
|
-
* @param {number} start
|
|
91
|
-
* @return {number}
|
|
92
|
-
*/
|
|
93
|
-
var indexOf = exports.indexOf = function (arr, obj, start) {
|
|
94
|
-
for (var i = start || 0, l = arr.length; i < l; i++) {
|
|
95
|
-
if (arr[i] === obj) {
|
|
96
|
-
return i;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return -1;
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Array#reduce (<=IE8)
|
|
104
|
-
*
|
|
105
|
-
* @api private
|
|
106
|
-
* @param {Array} arr
|
|
107
|
-
* @param {Function} fn
|
|
108
|
-
* @param {Object} val Initial value.
|
|
109
|
-
* @return {*}
|
|
110
|
-
*/
|
|
111
|
-
var reduce = exports.reduce = function (arr, fn, val) {
|
|
112
|
-
var rval = val;
|
|
113
|
-
|
|
114
|
-
for (var i = 0, l = arr.length; i < l; i++) {
|
|
115
|
-
rval = fn(rval, arr[i], i, arr);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return rval;
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Array#filter (<=IE8)
|
|
123
|
-
*
|
|
124
|
-
* @api private
|
|
125
|
-
* @param {Array} arr
|
|
126
|
-
* @param {Function} fn
|
|
127
|
-
* @return {Array}
|
|
128
|
-
*/
|
|
129
|
-
exports.filter = function (arr, fn) {
|
|
130
|
-
var ret = [];
|
|
131
|
-
|
|
132
|
-
for (var i = 0, l = arr.length; i < l; i++) {
|
|
133
|
-
var val = arr[i];
|
|
134
|
-
if (fn(val, i, arr)) {
|
|
135
|
-
ret.push(val);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return ret;
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Array#some (<=IE8)
|
|
144
|
-
*
|
|
145
|
-
* @api private
|
|
146
|
-
* @param {Array} arr
|
|
147
|
-
* @param {Function} fn
|
|
148
|
-
* @return {Array}
|
|
149
|
-
*/
|
|
150
|
-
exports.some = function (arr, fn) {
|
|
151
|
-
for (var i = 0, l = arr.length; i < l; i++) {
|
|
152
|
-
if (fn(arr[i])) {
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return false;
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Object.keys (<=IE8)
|
|
161
|
-
*
|
|
162
|
-
* @api private
|
|
163
|
-
* @param {Object} obj
|
|
164
|
-
* @return {Array} keys
|
|
165
|
-
*/
|
|
166
|
-
exports.keys = typeof Object.keys === 'function' ? Object.keys : function (obj) {
|
|
167
|
-
var keys = [];
|
|
168
|
-
var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8
|
|
169
|
-
|
|
170
|
-
for (var key in obj) {
|
|
171
|
-
if (has.call(obj, key)) {
|
|
172
|
-
keys.push(key);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return keys;
|
|
177
|
-
};
|
|
178
|
-
|
|
179
51
|
/**
|
|
180
52
|
* Watch the given `files` for changes
|
|
181
53
|
* and invoke `fn(file)` on modification.
|
|
@@ -196,30 +68,6 @@ exports.watch = function (files, fn) {
|
|
|
196
68
|
});
|
|
197
69
|
};
|
|
198
70
|
|
|
199
|
-
/**
|
|
200
|
-
* Array.isArray (<=IE8)
|
|
201
|
-
*
|
|
202
|
-
* @api private
|
|
203
|
-
* @param {Object} obj
|
|
204
|
-
* @return {Boolean}
|
|
205
|
-
*/
|
|
206
|
-
var isArray = typeof Array.isArray === 'function' ? Array.isArray : function (obj) {
|
|
207
|
-
return Object.prototype.toString.call(obj) === '[object Array]';
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
exports.isArray = isArray;
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Buffer.prototype.toJSON polyfill.
|
|
214
|
-
*
|
|
215
|
-
* @type {Function}
|
|
216
|
-
*/
|
|
217
|
-
if (typeof Buffer !== 'undefined' && Buffer.prototype) {
|
|
218
|
-
Buffer.prototype.toJSON = Buffer.prototype.toJSON || function () {
|
|
219
|
-
return Array.prototype.slice.call(this, 0);
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
|
|
223
71
|
/**
|
|
224
72
|
* Ignored files.
|
|
225
73
|
*
|
|
@@ -292,18 +140,7 @@ exports.clean = function (str) {
|
|
|
292
140
|
|
|
293
141
|
str = str.replace(re, '');
|
|
294
142
|
|
|
295
|
-
return
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Trim the given `str`.
|
|
300
|
-
*
|
|
301
|
-
* @api private
|
|
302
|
-
* @param {string} str
|
|
303
|
-
* @return {string}
|
|
304
|
-
*/
|
|
305
|
-
exports.trim = function (str) {
|
|
306
|
-
return str.replace(/^\s+|\s+$/g, '');
|
|
143
|
+
return str.trim();
|
|
307
144
|
};
|
|
308
145
|
|
|
309
146
|
/**
|
|
@@ -314,7 +151,7 @@ exports.trim = function (str) {
|
|
|
314
151
|
* @return {Object}
|
|
315
152
|
*/
|
|
316
153
|
exports.parseQuery = function (qs) {
|
|
317
|
-
return
|
|
154
|
+
return qs.replace('?', '').split('&').reduce(function (obj, pair) {
|
|
318
155
|
var i = pair.indexOf('=');
|
|
319
156
|
var key = pair.slice(0, i);
|
|
320
157
|
var val = pair.slice(++i);
|
|
@@ -411,7 +248,7 @@ var type = exports.type = function type (value) {
|
|
|
411
248
|
return 'undefined';
|
|
412
249
|
} else if (value === null) {
|
|
413
250
|
return 'null';
|
|
414
|
-
} else if (
|
|
251
|
+
} else if (Buffer.isBuffer(value)) {
|
|
415
252
|
return 'buffer';
|
|
416
253
|
}
|
|
417
254
|
return Object.prototype.toString.call(value)
|
|
@@ -437,9 +274,9 @@ var type = exports.type = function type (value) {
|
|
|
437
274
|
exports.stringify = function (value) {
|
|
438
275
|
var typeHint = type(value);
|
|
439
276
|
|
|
440
|
-
if (!~
|
|
277
|
+
if (!~['object', 'array', 'function'].indexOf(typeHint)) {
|
|
441
278
|
if (typeHint === 'buffer') {
|
|
442
|
-
var json =
|
|
279
|
+
var json = Buffer.prototype.toJSON.call(value);
|
|
443
280
|
// Based on the toJSON result
|
|
444
281
|
return jsonStringify(json.data && json.type ? json.data : json, 2)
|
|
445
282
|
.replace(/,(\n|$)/g, '$1');
|
|
@@ -448,7 +285,7 @@ exports.stringify = function (value) {
|
|
|
448
285
|
// IE7/IE8 has a bizarre String constructor; needs to be coerced
|
|
449
286
|
// into an array and back to obj.
|
|
450
287
|
if (typeHint === 'string' && typeof value === 'object') {
|
|
451
|
-
value =
|
|
288
|
+
value = value.split('').reduce(function (acc, char, idx) {
|
|
452
289
|
acc[idx] = char;
|
|
453
290
|
return acc;
|
|
454
291
|
}, {});
|
|
@@ -484,9 +321,9 @@ function jsonStringify (object, spaces, depth) {
|
|
|
484
321
|
|
|
485
322
|
depth = depth || 1;
|
|
486
323
|
var space = spaces * depth;
|
|
487
|
-
var str = isArray(object) ? '[' : '{';
|
|
488
|
-
var end = isArray(object) ? ']' : '}';
|
|
489
|
-
var length = typeof object.length === 'number' ? object.length :
|
|
324
|
+
var str = Array.isArray(object) ? '[' : '{';
|
|
325
|
+
var end = Array.isArray(object) ? ']' : '}';
|
|
326
|
+
var length = typeof object.length === 'number' ? object.length : Object.keys(object).length;
|
|
490
327
|
// `.repeat()` polyfill
|
|
491
328
|
function repeat (s, n) {
|
|
492
329
|
return new Array(n).join(s);
|
|
@@ -511,12 +348,7 @@ function jsonStringify (object, spaces, depth) {
|
|
|
511
348
|
: val.toString();
|
|
512
349
|
break;
|
|
513
350
|
case 'date':
|
|
514
|
-
var sDate;
|
|
515
|
-
if (isNaN(val.getTime())) { // Invalid date
|
|
516
|
-
sDate = val.toString();
|
|
517
|
-
} else {
|
|
518
|
-
sDate = val.toISOString ? val.toISOString() : toISOString(val);
|
|
519
|
-
}
|
|
351
|
+
var sDate = isNaN(val.getTime()) ? val.toString() : val.toISOString();
|
|
520
352
|
val = '[Date: ' + sDate + ']';
|
|
521
353
|
break;
|
|
522
354
|
case 'buffer':
|
|
@@ -539,9 +371,9 @@ function jsonStringify (object, spaces, depth) {
|
|
|
539
371
|
}
|
|
540
372
|
--length;
|
|
541
373
|
str += '\n ' + repeat(' ', space) +
|
|
542
|
-
(isArray(object) ? '' : '"' + i + '": ') + // key
|
|
543
|
-
_stringify(object[i]) +
|
|
544
|
-
(length ? ',' : '');
|
|
374
|
+
(Array.isArray(object) ? '' : '"' + i + '": ') + // key
|
|
375
|
+
_stringify(object[i]) + // value
|
|
376
|
+
(length ? ',' : ''); // comma
|
|
545
377
|
}
|
|
546
378
|
|
|
547
379
|
return str +
|
|
@@ -549,17 +381,6 @@ function jsonStringify (object, spaces, depth) {
|
|
|
549
381
|
(str.length !== 1 ? '\n' + repeat(' ', --space) + end : end);
|
|
550
382
|
}
|
|
551
383
|
|
|
552
|
-
/**
|
|
553
|
-
* Test if a value is a buffer.
|
|
554
|
-
*
|
|
555
|
-
* @api private
|
|
556
|
-
* @param {*} value The value to test.
|
|
557
|
-
* @return {boolean} True if `value` is a buffer, otherwise false
|
|
558
|
-
*/
|
|
559
|
-
exports.isBuffer = function (value) {
|
|
560
|
-
return typeof Buffer !== 'undefined' && Buffer.isBuffer(value);
|
|
561
|
-
};
|
|
562
|
-
|
|
563
384
|
/**
|
|
564
385
|
* Return a new Thing that has the keys in sorted order. Recursive.
|
|
565
386
|
*
|
|
@@ -593,7 +414,7 @@ exports.canonicalize = function canonicalize (value, stack, typeHint) {
|
|
|
593
414
|
|
|
594
415
|
stack = stack || [];
|
|
595
416
|
|
|
596
|
-
if (indexOf(
|
|
417
|
+
if (stack.indexOf(value) !== -1) {
|
|
597
418
|
return '[Circular]';
|
|
598
419
|
}
|
|
599
420
|
|
|
@@ -605,7 +426,7 @@ exports.canonicalize = function canonicalize (value, stack, typeHint) {
|
|
|
605
426
|
break;
|
|
606
427
|
case 'array':
|
|
607
428
|
withStack(value, function () {
|
|
608
|
-
canonicalizedObj =
|
|
429
|
+
canonicalizedObj = value.map(function (item) {
|
|
609
430
|
return exports.canonicalize(item, stack);
|
|
610
431
|
});
|
|
611
432
|
});
|
|
@@ -625,7 +446,7 @@ exports.canonicalize = function canonicalize (value, stack, typeHint) {
|
|
|
625
446
|
case 'object':
|
|
626
447
|
canonicalizedObj = canonicalizedObj || {};
|
|
627
448
|
withStack(value, function () {
|
|
628
|
-
|
|
449
|
+
Object.keys(value).sort().forEach(function (key) {
|
|
629
450
|
canonicalizedObj[key] = exports.canonicalize(value[key], stack);
|
|
630
451
|
});
|
|
631
452
|
});
|
|
@@ -765,7 +586,7 @@ exports.stackTraceFilter = function () {
|
|
|
765
586
|
return function (stack) {
|
|
766
587
|
stack = stack.split('\n');
|
|
767
588
|
|
|
768
|
-
stack = reduce(
|
|
589
|
+
stack = stack.reduce(function (list, line) {
|
|
769
590
|
if (isMochaInternal(line)) {
|
|
770
591
|
return list;
|
|
771
592
|
}
|