Skip to content

Commit 2954dac

Browse files
author
James Halliday
committed
is now properly noisy when more commits than expected were run
1 parent 2ce40f5 commit 2954dac

File tree

3 files changed

+63
-51
lines changed

3 files changed

+63
-51
lines changed

index.js

+21-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
var defined = require('defined');
12
var createDefaultStream = require('./lib/default_stream');
23
var Test = require('./lib/test');
3-
var createResultStream = require('./lib/results');
4+
var createResult = require('./lib/results');
45

56
var canEmitExit = typeof process !== 'undefined' && process
67
&& typeof process.on === 'function'
@@ -17,13 +18,17 @@ var nextTick = typeof setImmediate !== 'undefined'
1718
exports = module.exports = (function () {
1819
var harness;
1920
var lazyLoad = function () {
20-
if (!harness) harness = createExitHarness();
21+
if (!harness) harness = createExitHarness({
22+
autoclose: !canEmitExit
23+
});
2124

2225
return harness.apply(this, arguments);
2326
};
2427

2528
lazyLoad.only = function () {
26-
if (!harness) harness = createExitHarness();
29+
if (!harness) harness = createExitHarness({
30+
autoclose: !canEmitExit
31+
});
2732

2833
return harness.only.apply(this, arguments);
2934
}
@@ -33,7 +38,10 @@ exports = module.exports = (function () {
3338

3439
function createExitHarness (conf) {
3540
if (!conf) conf = {};
36-
var harness = createHarness();
41+
var harness = createHarness({
42+
autoclose: defined(conf.autoclose, false)
43+
});
44+
3745
var stream = harness.createStream();
3846
stream.pipe(createDefaultStream());
3947

@@ -62,6 +70,7 @@ function createExitHarness (conf) {
6270
t._exit();
6371
}
6472
}
73+
harness.close();
6574
process.exit(code || harness._exitCode);
6675
});
6776
return harness;
@@ -74,14 +83,13 @@ exports.test = exports; // tap compat
7483
var exitInterval;
7584

7685
function createHarness (conf_) {
77-
var results;
86+
if (!conf_) conf_ = {};
87+
var results = createResult();
88+
if (conf_.autoclose !== false) {
89+
results.once('done', function () { results.close() });
90+
}
7891

7992
var test = function (name, conf, cb) {
80-
if (!results) {
81-
results = createResultStream();
82-
results.pause();
83-
}
84-
8593
var t = new Test(name, conf, cb);
8694
test._tests.push(t);
8795

@@ -101,16 +109,7 @@ function createHarness (conf_) {
101109
test._tests = [];
102110

103111
test.createStream = function () {
104-
if (!results) results = createResultStream();
105-
106-
var _pause = results.pause;
107-
var paused = false;
108-
results.pause = function () { paused = true };
109-
110-
nextTick(function () {
111-
if (!paused) results.resume();
112-
});
113-
return results;
112+
return results.createStream();
114113
};
115114

116115
var only = false;
@@ -122,5 +121,7 @@ function createHarness (conf_) {
122121
};
123122
test._exitCode = 0;
124123

124+
test.close = function () { results.close() };
125+
125126
return test;
126127
}

lib/results.js

+40-30
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,64 @@
11
var Stream = require('stream');
2+
var EventEmitter = require('events').EventEmitter;
3+
var inherits = require('inherits');
24
var json = typeof JSON === 'object' ? JSON : require('jsonify');
35
var through = require('through');
6+
var resumer = require('resumer');
47
var nextTick = typeof setImmediate !== 'undefined'
58
? setImmediate
69
: process.nextTick
710
;
811

9-
module.exports = function () {
10-
var output = through();
11-
output.pause();
12-
output.queue('TAP version 13\n');
13-
14-
var results = new Results(output);
15-
output.push = function (t) { results.push(t) };
16-
17-
output.only = function (name) {
18-
results.only = name;
19-
};
20-
21-
nextTick(function next () {
22-
var t = getNextTest(results);
23-
if (t) t.run();
24-
else results.close();
25-
});
26-
27-
return output;
28-
};
12+
module.exports = Results;
13+
inherits(Results, EventEmitter);
2914

30-
function Results (stream) {
15+
function Results () {
16+
if (!(this instanceof Results)) return new Results;
3117
this.count = 0;
3218
this.fail = 0;
3319
this.pass = 0;
34-
this.stream = stream;
20+
this._stream = through();
3521
this.tests = [];
3622
}
3723

24+
Results.prototype.createStream = function () {
25+
var self = this;
26+
var output = resumer();
27+
output.queue('TAP version 13\n');
28+
29+
nextTick(function () {
30+
var t = getNextTest(self);
31+
if (t) t.run()
32+
else self.emit('done')
33+
});
34+
self._stream.pipe(output);
35+
36+
return output;
37+
};
38+
3839
Results.prototype.push = function (t) {
3940
var self = this;
4041
self.tests.push(t);
4142
self._watch(t);
4243
t.once('end', function () {
4344
var nt = getNextTest(self);
44-
if (nt) nt.run();
45-
else self.close();
45+
if (nt) nt.run()
46+
else self.emit('done')
4647
});
4748
};
4849

50+
Results.prototype.only = function (name) {
51+
if (this._only) {
52+
self.count ++;
53+
self.fail ++;
54+
write('not ok ' + self.count + ' already called .only()\n');
55+
}
56+
this._only = name;
57+
};
58+
4959
Results.prototype._watch = function (t) {
5060
var self = this;
51-
var write = function (s) { self.stream.queue(s) };
61+
var write = function (s) { self._stream.queue(s) };
5262
t.once('prerun', function () {
5363
write('# ' + t.name + '\n');
5464
});
@@ -70,17 +80,17 @@ Results.prototype._watch = function (t) {
7080

7181
Results.prototype.close = function () {
7282
var self = this;
73-
if (self.closed) self.stream.emit('error', new Error('ALREADY CLOSED'));
83+
if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED'));
7484
self.closed = true;
75-
var write = function (s) { self.stream.queue(s) };
85+
var write = function (s) { self._stream.queue(s) };
7686

7787
write('\n1..' + self.count + '\n');
7888
write('# tests ' + self.count + '\n');
7989
write('# pass ' + self.pass + '\n');
8090
if (self.fail) write('# fail ' + self.fail + '\n')
8191
else write('\n# ok\n')
8292

83-
self.stream.queue(null);
93+
self._stream.queue(null);
8494
};
8595

8696
function encodeResult (res, count) {
@@ -148,7 +158,7 @@ function getSerialize () {
148158
}
149159

150160
function getNextTest(results) {
151-
if (!results.only) {
161+
if (!results._only) {
152162
return results.tests.shift();
153163
}
154164

@@ -157,7 +167,7 @@ function getNextTest(results) {
157167
if (!t) {
158168
return null;
159169
}
160-
if (results.only === t.name) {
170+
if (results._only === t.name) {
161171
return t;
162172
}
163173
} while (results.tests.length !== 0)

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
"defined" : "~0.0.0",
1515
"through": "~2.3.4",
1616
"stream-combiner": "~0.0.2",
17-
"split": "~0.2.10"
17+
"split": "~0.2.10",
18+
"inherits": "~2.0.1"
1819
},
1920
"devDependencies" : {
2021
"tap" : "~0.3.0",

0 commit comments

Comments
 (0)