Skip to content

Commit

Permalink
basic example finally works
Browse files Browse the repository at this point in the history
  • Loading branch information
James Halliday committed Apr 29, 2013
1 parent 827b59d commit 2a59c49
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 61 deletions.
34 changes: 15 additions & 19 deletions index.js
@@ -1,7 +1,6 @@
var createDefaultStream = require('./lib/default_stream');
var Render = require('./lib/render');
var Test = require('./lib/test');
var through = require('through');
var createResultStream = require('./lib/results');

var canEmitExit = typeof process !== 'undefined' && process
&& typeof process.on === 'function'
Expand All @@ -18,36 +17,33 @@ var nextTick = typeof setImmediate !== 'undefined'
exports = module.exports = createHarness();
exports.createHarness = createHarness;
exports.Test = Test;
exports.test = exports; // tap compat

var exitInterval;

function createHarness (conf_) {
var count = 0;
var exitCode = 0;
var output = through(null, function () {
if (--count === 0 && !closed) {
closed = true
out.close();
}
});
output.pause();
nextTick(function () { output.resume() });
var results = createResultStream();

var test = function (name, conf, cb) {
count++;
var t = new Test(name, conf, cb);
t.on('test', function sub (st) {
console.log('SUBTEST');
});
t.on('result', function (r) {
console.dir(r);
if (!r.ok) exitCode = 1
});
(function inspectCode (st) {
st.on('test', function sub (st_) {
inspectCode(st_);
});
st.on('result', function (r) {
if (!r.ok) exitCode = 1
});
})(t);

results.push(t);
nextTick(function () {
t.run();
});
return t;
};
test.stream = results;
results.pipe(createDefaultStream());

return test;
}
95 changes: 53 additions & 42 deletions lib/render.js → lib/results.js
@@ -1,63 +1,78 @@
var Stream = require('stream');
var json = typeof JSON === 'object' ? JSON : require('jsonify');
var through = require('through');
var nextTick = typeof setImmediate !== 'undefined'
? setImmediate
: process.nextTick
;

module.exports = function (test) {
var out = through();
out.pause();
var r = new Render;
r.pipe(out);
r.push(test);
var output = through();
output.pause();
output.queue('TAP version 13\n');

out.begin = function () { r.begin() };
out.close = function () { r.close() };
return out;
var results = new Results(output);
var first = true;
output.push = function (t) {
results.push(t);
if (first) {
t.once('run', function () {
output.resume();
});
}
first = false;
};
return output;
};

function Render () {
Stream.call(this);
this.readable = true;
function Results (stream) {
this.count = 0;
this.fail = 0;
this.pass = 0;
this.stream = stream;
this.pending = 0;
}

Render.prototype = new Stream;

Render.prototype.begin = function () {
this.emit('data', 'TAP version 13\n');
};

Render.prototype.push = function (t) {
Results.prototype.push = function (t) {
var self = this;
this.emit('data', '# ' + t.name + '\n');
var write = function (s) { self.stream.queue(s) };
write('# ' + t.name + '\n');
self.pending ++;

t.on('test', function (st) {
self.push(st);
});

t.on('result', function (res) {
if (typeof res === 'string') {
self.emit('data', '# ' + res + '\n');
write('# ' + res + '\n');
return;
}

self.emit('data', encodeResult(res, self.count + 1));
write(encodeResult(res, self.count + 1));
self.count ++;

if (res.ok) self.pass ++
else self.fail ++
});

t.on('end', function () {
nextTick(function () {
if (--self.pending === 0) self.close();
});
});
};

Render.prototype.close = function () {
this.emit('data', '\n1..' + this.count + '\n');
this.emit('data', '# tests ' + this.count + '\n');
this.emit('data', '# pass ' + this.pass + '\n');
if (this.fail) {
this.emit('data', '# fail ' + this.fail + '\n');
}
else {
this.emit('data', '\n# ok\n');
}
Results.prototype.close = function () {
var self = this;
var write = function (s) { self.stream.queue(s) };

this.emit('end');
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);
};

function encodeResult (res, count) {
Expand Down Expand Up @@ -107,7 +122,7 @@ function encodeResult (res, count) {

function getSerialize() {
var seen = [];

return function (key, value) {
var ret = value;
if (typeof value === 'object' && value) {
Expand All @@ -118,14 +133,10 @@ function getSerialize() {
break;
}
}

if (found) {
ret = '[Circular]'
} else {
seen.push(value)
}

if (found) ret = '[Circular]'
else seen.push(value)
}

return ret
}
};
}
1 change: 1 addition & 0 deletions lib/test.js
Expand Up @@ -47,6 +47,7 @@ Test.prototype.run = function () {
if (this._skip) {
return this.end();
}
this.emit('run');
try {
this._cb(this);
}
Expand Down

0 comments on commit 2a59c49

Please sign in to comment.