mocha 2.3.0 → 2.3.4
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/HISTORY.md +49 -2
- package/bin/_mocha +1 -9
- package/bin/mocha +3 -24
- package/lib/browser/diff.js +369 -0
- package/lib/hook.js +2 -5
- package/lib/mocha.js +1 -1
- package/lib/reporters/base.js +9 -2
- package/lib/reporters/dot.js +2 -5
- package/lib/reporters/landing.js +2 -5
- package/lib/reporters/list.js +2 -5
- package/lib/reporters/markdown.js +1 -1
- package/lib/reporters/min.js +2 -5
- package/lib/reporters/nyan.js +2 -5
- package/lib/reporters/progress.js +2 -5
- package/lib/reporters/spec.js +2 -5
- package/lib/reporters/templates/coverage.jade +2 -2
- package/lib/reporters/templates/menu.jade +3 -3
- package/lib/reporters/xunit.js +8 -10
- package/lib/runnable.js +2 -5
- package/lib/runner.js +36 -19
- package/lib/suite.js +3 -6
- package/lib/test.js +2 -5
- package/lib/utils.js +9 -11
- package/mocha.js +263 -1156
- package/package.json +4 -5
package/lib/reporters/spec.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
var Base = require('./base');
|
|
6
|
-
var
|
|
6
|
+
var inherits = require('../utils').inherits;
|
|
7
7
|
var color = Base.color;
|
|
8
8
|
var cursor = Base.cursor;
|
|
9
9
|
|
|
@@ -80,7 +80,4 @@ function Spec(runner) {
|
|
|
80
80
|
/**
|
|
81
81
|
* Inherit from `Base.prototype`.
|
|
82
82
|
*/
|
|
83
|
-
|
|
84
|
-
Spec.prototype = create(Base.prototype, {
|
|
85
|
-
constructor: Spec
|
|
86
|
-
});
|
|
83
|
+
inherits(Spec, Base);
|
|
@@ -17,7 +17,7 @@ html
|
|
|
17
17
|
.misses= cov.misses
|
|
18
18
|
|
|
19
19
|
#files
|
|
20
|
-
|
|
20
|
+
for file in cov.files
|
|
21
21
|
.file
|
|
22
22
|
h2(id=file.filename)= file.filename
|
|
23
23
|
#stats(class=coverageClass(file.coverage))
|
|
@@ -33,7 +33,7 @@ html
|
|
|
33
33
|
th Hits
|
|
34
34
|
th Source
|
|
35
35
|
tbody
|
|
36
|
-
|
|
36
|
+
for line, number in file.source
|
|
37
37
|
if line.coverage > 0
|
|
38
38
|
tr.hit
|
|
39
39
|
td.line= number
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#menu
|
|
2
2
|
li
|
|
3
3
|
a(href='#overview') overview
|
|
4
|
-
|
|
4
|
+
for file in cov.files
|
|
5
5
|
li
|
|
6
6
|
span.cov(class=coverageClass(file.coverage)) #{file.coverage | 0}
|
|
7
7
|
a(href='##{file.filename}')
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
segments = file.filename.split('/')
|
|
9
|
+
basename = segments.pop()
|
|
10
10
|
if segments.length
|
|
11
11
|
span.dirname= segments.join('/') + '/'
|
|
12
12
|
span.basename= basename
|
package/lib/reporters/xunit.js
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
var Base = require('./base');
|
|
6
|
-
var
|
|
6
|
+
var utils = require('../utils');
|
|
7
|
+
var inherits = utils.inherits;
|
|
7
8
|
var fs = require('fs');
|
|
8
|
-
var escape =
|
|
9
|
+
var escape = utils.escape;
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Save timer references to avoid Sinon interfering (see GH-237).
|
|
@@ -76,6 +77,11 @@ function XUnit(runner, options) {
|
|
|
76
77
|
});
|
|
77
78
|
}
|
|
78
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Inherit from `Base.prototype`.
|
|
82
|
+
*/
|
|
83
|
+
inherits(XUnit, Base);
|
|
84
|
+
|
|
79
85
|
/**
|
|
80
86
|
* Override done to close the stream (if it's a file).
|
|
81
87
|
*
|
|
@@ -92,14 +98,6 @@ XUnit.prototype.done = function(failures, fn) {
|
|
|
92
98
|
}
|
|
93
99
|
};
|
|
94
100
|
|
|
95
|
-
/**
|
|
96
|
-
* Inherit from `Base.prototype`.
|
|
97
|
-
*/
|
|
98
|
-
|
|
99
|
-
XUnit.prototype = create(Base.prototype, {
|
|
100
|
-
constructor: XUnit
|
|
101
|
-
});
|
|
102
|
-
|
|
103
101
|
/**
|
|
104
102
|
* Write out the given line.
|
|
105
103
|
*
|
package/lib/runnable.js
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
var EventEmitter = require('events').EventEmitter;
|
|
6
6
|
var Pending = require('./pending');
|
|
7
|
-
var create = require('lodash.create');
|
|
8
7
|
var debug = require('debug')('mocha:runnable');
|
|
9
8
|
var milliseconds = require('./ms');
|
|
10
9
|
var utils = require('./utils');
|
|
10
|
+
var inherits = utils.inherits;
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Save timer references to avoid Sinon interfering (see GH-237).
|
|
@@ -57,10 +57,7 @@ function Runnable(title, fn) {
|
|
|
57
57
|
/**
|
|
58
58
|
* Inherit from `EventEmitter.prototype`.
|
|
59
59
|
*/
|
|
60
|
-
|
|
61
|
-
Runnable.prototype = create(EventEmitter.prototype, {
|
|
62
|
-
constructor: Runnable
|
|
63
|
-
});
|
|
60
|
+
inherits(Runnable, EventEmitter);
|
|
64
61
|
|
|
65
62
|
/**
|
|
66
63
|
* Set & get timeout `ms`.
|
package/lib/runner.js
CHANGED
|
@@ -4,15 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
var EventEmitter = require('events').EventEmitter;
|
|
6
6
|
var Pending = require('./pending');
|
|
7
|
-
var
|
|
7
|
+
var utils = require('./utils');
|
|
8
|
+
var inherits = utils.inherits;
|
|
8
9
|
var debug = require('debug')('mocha:runner');
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
10
|
+
var Runnable = require('./runnable');
|
|
11
|
+
var filter = utils.filter;
|
|
12
|
+
var indexOf = utils.indexOf;
|
|
13
|
+
var keys = utils.keys;
|
|
14
|
+
var stackFilter = utils.stackTraceFilter();
|
|
15
|
+
var stringify = utils.stringify;
|
|
16
|
+
var type = utils.type;
|
|
17
|
+
var undefinedError = utils.undefinedError;
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* Non-enumerable globals.
|
|
@@ -63,6 +65,7 @@ function Runner(suite, delay) {
|
|
|
63
65
|
this._abort = false;
|
|
64
66
|
this._delay = delay;
|
|
65
67
|
this.suite = suite;
|
|
68
|
+
this.started = false;
|
|
66
69
|
this.total = suite.total();
|
|
67
70
|
this.failures = 0;
|
|
68
71
|
this.on('test end', function(test) {
|
|
@@ -87,10 +90,7 @@ Runner.immediately = global.setImmediate || process.nextTick;
|
|
|
87
90
|
/**
|
|
88
91
|
* Inherit from `EventEmitter.prototype`.
|
|
89
92
|
*/
|
|
90
|
-
|
|
91
|
-
Runner.prototype = create(EventEmitter.prototype, {
|
|
92
|
-
constructor: Runner
|
|
93
|
-
});
|
|
93
|
+
inherits(Runner, EventEmitter);
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
96
|
* Run tests with full titles matching `re`. Updates runner.total
|
|
@@ -288,12 +288,13 @@ Runner.prototype.hook = function(name, fn) {
|
|
|
288
288
|
|
|
289
289
|
self.emit('hook', hook);
|
|
290
290
|
|
|
291
|
-
hook.
|
|
292
|
-
|
|
293
|
-
|
|
291
|
+
if (!hook.listeners('error').length) {
|
|
292
|
+
hook.on('error', function(err) {
|
|
293
|
+
self.failHook(hook, err);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
294
296
|
|
|
295
297
|
hook.run(function(err) {
|
|
296
|
-
hook.removeAllListeners('error');
|
|
297
298
|
var testError = hook.error();
|
|
298
299
|
if (testError) {
|
|
299
300
|
self.fail(self.test, testError);
|
|
@@ -388,7 +389,8 @@ Runner.prototype.hookDown = function(name, fn) {
|
|
|
388
389
|
Runner.prototype.parents = function() {
|
|
389
390
|
var suite = this.suite;
|
|
390
391
|
var suites = [];
|
|
391
|
-
while (suite
|
|
392
|
+
while (suite.parent) {
|
|
393
|
+
suite = suite.parent;
|
|
392
394
|
suites.push(suite);
|
|
393
395
|
}
|
|
394
396
|
return suites;
|
|
@@ -569,7 +571,7 @@ Runner.prototype.runSuite = function(suite, fn) {
|
|
|
569
571
|
|
|
570
572
|
debug('run suite %s', suite.fullTitle());
|
|
571
573
|
|
|
572
|
-
if (!total) {
|
|
574
|
+
if (!total || (self.failures && suite._bail)) {
|
|
573
575
|
return fn();
|
|
574
576
|
}
|
|
575
577
|
|
|
@@ -654,7 +656,20 @@ Runner.prototype.uncaught = function(err) {
|
|
|
654
656
|
err.uncaught = true;
|
|
655
657
|
|
|
656
658
|
var runnable = this.currentRunnable;
|
|
659
|
+
|
|
657
660
|
if (!runnable) {
|
|
661
|
+
runnable = new Runnable('Uncaught error outside test suite');
|
|
662
|
+
runnable.parent = this.suite;
|
|
663
|
+
|
|
664
|
+
if (this.started) {
|
|
665
|
+
this.fail(runnable, err);
|
|
666
|
+
} else {
|
|
667
|
+
// Can't recover from this failure
|
|
668
|
+
this.emit('start');
|
|
669
|
+
this.fail(runnable, err);
|
|
670
|
+
this.emit('end');
|
|
671
|
+
}
|
|
672
|
+
|
|
658
673
|
return;
|
|
659
674
|
}
|
|
660
675
|
|
|
@@ -713,6 +728,7 @@ Runner.prototype.run = function(fn) {
|
|
|
713
728
|
}
|
|
714
729
|
|
|
715
730
|
function start() {
|
|
731
|
+
self.started = true;
|
|
716
732
|
self.emit('start');
|
|
717
733
|
self.runSuite(rootSuite, function() {
|
|
718
734
|
debug('finished running');
|
|
@@ -808,7 +824,8 @@ function filterLeaks(ok, globals) {
|
|
|
808
824
|
*/
|
|
809
825
|
function extraGlobals() {
|
|
810
826
|
if (typeof process === 'object' && typeof process.version === 'string') {
|
|
811
|
-
var
|
|
827
|
+
var parts = process.version.split('.');
|
|
828
|
+
var nodeVersion = utils.reduce(parts, function(a, v) {
|
|
812
829
|
return a << 8 | v;
|
|
813
830
|
});
|
|
814
831
|
|
package/lib/suite.js
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
var EventEmitter = require('events').EventEmitter;
|
|
6
6
|
var Hook = require('./hook');
|
|
7
|
-
var
|
|
7
|
+
var utils = require('./utils');
|
|
8
|
+
var inherits = utils.inherits;
|
|
8
9
|
var debug = require('debug')('mocha:suite');
|
|
9
10
|
var milliseconds = require('./ms');
|
|
10
|
-
var utils = require('./utils');
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Expose `Suite`.
|
|
@@ -66,10 +66,7 @@ function Suite(title, parentContext) {
|
|
|
66
66
|
/**
|
|
67
67
|
* Inherit from `EventEmitter.prototype`.
|
|
68
68
|
*/
|
|
69
|
-
|
|
70
|
-
Suite.prototype = create(EventEmitter.prototype, {
|
|
71
|
-
constructor: Suite
|
|
72
|
-
});
|
|
69
|
+
inherits(Suite, EventEmitter);
|
|
73
70
|
|
|
74
71
|
/**
|
|
75
72
|
* Return a clone of this `Suite`.
|
package/lib/test.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
var Runnable = require('./runnable');
|
|
6
|
-
var
|
|
6
|
+
var inherits = require('./utils').inherits;
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Expose `Test`.
|
|
@@ -27,7 +27,4 @@ function Test(title, fn) {
|
|
|
27
27
|
/**
|
|
28
28
|
* Inherit from `Runnable.prototype`.
|
|
29
29
|
*/
|
|
30
|
-
|
|
31
|
-
Test.prototype = create(Runnable.prototype, {
|
|
32
|
-
constructor: Test
|
|
33
|
-
});
|
|
30
|
+
inherits(Test, Runnable);
|
package/lib/utils.js
CHANGED
|
@@ -19,6 +19,8 @@ var watchFile = require('fs').watchFile;
|
|
|
19
19
|
|
|
20
20
|
var ignore = ['node_modules', '.git'];
|
|
21
21
|
|
|
22
|
+
exports.inherits = require('util').inherits;
|
|
23
|
+
|
|
22
24
|
/**
|
|
23
25
|
* Escape special characters in the given string of html.
|
|
24
26
|
*
|
|
@@ -687,7 +689,7 @@ exports.getError = function(err) {
|
|
|
687
689
|
* @description
|
|
688
690
|
* When invoking this function you get a filter function that get the Error.stack as an input,
|
|
689
691
|
* and return a prettify output.
|
|
690
|
-
* (i.e: strip Mocha
|
|
692
|
+
* (i.e: strip Mocha and internal node functions from stack trace).
|
|
691
693
|
* @returns {Function}
|
|
692
694
|
*/
|
|
693
695
|
exports.stackTraceFilter = function() {
|
|
@@ -699,14 +701,10 @@ exports.stackTraceFilter = function() {
|
|
|
699
701
|
: (typeof location === 'undefined' ? window.location : location).href.replace(/\/[^\/]*$/, '/');
|
|
700
702
|
|
|
701
703
|
function isMochaInternal(line) {
|
|
702
|
-
return (~line.indexOf('node_modules' + slash + 'mocha'))
|
|
703
|
-
|| (~line.indexOf('components' + slash + 'mochajs'))
|
|
704
|
-
|| (~line.indexOf('components' + slash + 'mocha'))
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
// node_modules, bower, componentJS
|
|
708
|
-
function isBrowserModule(line) {
|
|
709
|
-
return (~line.indexOf('node_modules')) || (~line.indexOf('components'));
|
|
704
|
+
return (~line.indexOf('node_modules' + slash + 'mocha' + slash))
|
|
705
|
+
|| (~line.indexOf('components' + slash + 'mochajs' + slash))
|
|
706
|
+
|| (~line.indexOf('components' + slash + 'mocha' + slash))
|
|
707
|
+
|| (~line.indexOf(slash + 'mocha.js'));
|
|
710
708
|
}
|
|
711
709
|
|
|
712
710
|
function isNodeInternal(line) {
|
|
@@ -722,11 +720,11 @@ exports.stackTraceFilter = function() {
|
|
|
722
720
|
stack = stack.split('\n');
|
|
723
721
|
|
|
724
722
|
stack = exports.reduce(stack, function(list, line) {
|
|
725
|
-
if (
|
|
723
|
+
if (isMochaInternal(line)) {
|
|
726
724
|
return list;
|
|
727
725
|
}
|
|
728
726
|
|
|
729
|
-
if (is.
|
|
727
|
+
if (is.node && isNodeInternal(line)) {
|
|
730
728
|
return list;
|
|
731
729
|
}
|
|
732
730
|
|