Skip to content

Commit

Permalink
is now properly noisy when more commits than expected were run
Browse files Browse the repository at this point in the history
  • Loading branch information
James Halliday committed Nov 22, 2013
1 parent 2ce40f5 commit 2954dac
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 51 deletions.
41 changes: 21 additions & 20 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
var defined = require('defined');
var createDefaultStream = require('./lib/default_stream');
var Test = require('./lib/test');
var createResultStream = require('./lib/results');
var createResult = require('./lib/results');

var canEmitExit = typeof process !== 'undefined' && process
&& typeof process.on === 'function'
Expand All @@ -17,13 +18,17 @@ var nextTick = typeof setImmediate !== 'undefined'
exports = module.exports = (function () {
var harness;
var lazyLoad = function () {
if (!harness) harness = createExitHarness();
if (!harness) harness = createExitHarness({
autoclose: !canEmitExit
});

return harness.apply(this, arguments);
};

lazyLoad.only = function () {
if (!harness) harness = createExitHarness();
if (!harness) harness = createExitHarness({
autoclose: !canEmitExit
});

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

function createExitHarness (conf) {
if (!conf) conf = {};
var harness = createHarness();
var harness = createHarness({
autoclose: defined(conf.autoclose, false)
});

var stream = harness.createStream();
stream.pipe(createDefaultStream());

Expand Down Expand Up @@ -62,6 +70,7 @@ function createExitHarness (conf) {
t._exit();
}
}
harness.close();
process.exit(code || harness._exitCode);
});
return harness;
Expand All @@ -74,14 +83,13 @@ exports.test = exports; // tap compat
var exitInterval;

function createHarness (conf_) {
var results;
if (!conf_) conf_ = {};
var results = createResult();
if (conf_.autoclose !== false) {
results.once('done', function () { results.close() });
}

var test = function (name, conf, cb) {
if (!results) {
results = createResultStream();
results.pause();
}

var t = new Test(name, conf, cb);
test._tests.push(t);

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

test.createStream = function () {
if (!results) results = createResultStream();

var _pause = results.pause;
var paused = false;
results.pause = function () { paused = true };

nextTick(function () {
if (!paused) results.resume();
});
return results;
return results.createStream();
};

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

test.close = function () { results.close() };

return test;
}
70 changes: 40 additions & 30 deletions lib/results.js
Original file line number Diff line number Diff line change
@@ -1,54 +1,64 @@
var Stream = require('stream');
var EventEmitter = require('events').EventEmitter;
var inherits = require('inherits');
var json = typeof JSON === 'object' ? JSON : require('jsonify');
var through = require('through');
var resumer = require('resumer');
var nextTick = typeof setImmediate !== 'undefined'
? setImmediate
: process.nextTick
;

module.exports = function () {
var output = through();
output.pause();
output.queue('TAP version 13\n');

var results = new Results(output);
output.push = function (t) { results.push(t) };

output.only = function (name) {
results.only = name;
};

nextTick(function next () {
var t = getNextTest(results);
if (t) t.run();
else results.close();
});

return output;
};
module.exports = Results;
inherits(Results, EventEmitter);

function Results (stream) {
function Results () {
if (!(this instanceof Results)) return new Results;
this.count = 0;
this.fail = 0;
this.pass = 0;
this.stream = stream;
this._stream = through();
this.tests = [];
}

Results.prototype.createStream = function () {
var self = this;
var output = resumer();
output.queue('TAP version 13\n');

nextTick(function () {
var t = getNextTest(self);
if (t) t.run()
else self.emit('done')
});
self._stream.pipe(output);

return output;
};

Results.prototype.push = function (t) {
var self = this;
self.tests.push(t);
self._watch(t);
t.once('end', function () {
var nt = getNextTest(self);
if (nt) nt.run();
else self.close();
if (nt) nt.run()
else self.emit('done')
});
};

Results.prototype.only = function (name) {
if (this._only) {
self.count ++;
self.fail ++;
write('not ok ' + self.count + ' already called .only()\n');
}
this._only = name;
};

Results.prototype._watch = function (t) {
var self = this;
var write = function (s) { self.stream.queue(s) };
var write = function (s) { self._stream.queue(s) };
t.once('prerun', function () {
write('# ' + t.name + '\n');
});
Expand All @@ -70,17 +80,17 @@ Results.prototype._watch = function (t) {

Results.prototype.close = function () {
var self = this;
if (self.closed) self.stream.emit('error', new Error('ALREADY CLOSED'));
if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED'));
self.closed = true;
var write = function (s) { self.stream.queue(s) };
var write = function (s) { self._stream.queue(s) };

write('\n1..' + self.count + '\n');
write('# tests ' + self.count + '\n');
write('# pass ' + self.pass + '\n');
if (self.fail) write('# fail ' + self.fail + '\n')
else write('\n# ok\n')

self.stream.queue(null);
self._stream.queue(null);
};

function encodeResult (res, count) {
Expand Down Expand Up @@ -148,7 +158,7 @@ function getSerialize () {
}

function getNextTest(results) {
if (!results.only) {
if (!results._only) {
return results.tests.shift();
}

Expand All @@ -157,7 +167,7 @@ function getNextTest(results) {
if (!t) {
return null;
}
if (results.only === t.name) {
if (results._only === t.name) {
return t;
}
} while (results.tests.length !== 0)
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
"defined" : "~0.0.0",
"through": "~2.3.4",
"stream-combiner": "~0.0.2",
"split": "~0.2.10"
"split": "~0.2.10",
"inherits": "~2.0.1"
},
"devDependencies" : {
"tap" : "~0.3.0",
Expand Down

0 comments on commit 2954dac

Please sign in to comment.