From c2916606753c5e5f4ca795984feff67b49b4b64f Mon Sep 17 00:00:00 2001 From: Kory Nunn Date: Fri, 8 Jan 2016 13:29:11 +1000 Subject: [PATCH 1/4] Created async setup test --- test/async.js | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/async.js diff --git a/test/async.js b/test/async.js new file mode 100644 index 00000000..d2912798 --- /dev/null +++ b/test/async.js @@ -0,0 +1,41 @@ +var falafel = require('falafel'); +var tape = require('../'); +var tap = require('tap'); +var trim = require('string.prototype.trim'); + +tap.test('async test calls', function (tt) { + tt.plan(1); + + var test = tape.createHarness(); + var tc = tap.createConsumer(); + + test.createStream().pipe(tc); + + function run1(callback){ + test('first', function (t) { + t.plan(1); + + t.pass(); + + setTimeout(callback, 50); + }); + } + + function run2(callback){ + test('second', function (t) { + t.plan(1); + + t.pass(); + + setTimeout(callback, 50); + }); + } + + run1(function(){ + setTimeout(function(){ + run2(function(){ + tt.pass(); + }); + }); + }); +}); From 2342c73eb2d92fb89814526ce0d724eb07eed54a Mon Sep 17 00:00:00 2001 From: Kory Nunn Date: Fri, 8 Jan 2016 13:38:33 +1000 Subject: [PATCH 2/4] Test cleanup --- test/async.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/test/async.js b/test/async.js index d2912798..ae6aab62 100644 --- a/test/async.js +++ b/test/async.js @@ -1,7 +1,5 @@ -var falafel = require('falafel'); var tape = require('../'); var tap = require('tap'); -var trim = require('string.prototype.trim'); tap.test('async test calls', function (tt) { tt.plan(1); @@ -17,7 +15,7 @@ tap.test('async test calls', function (tt) { t.pass(); - setTimeout(callback, 50); + setTimeout(callback, 1); }); } @@ -27,15 +25,13 @@ tap.test('async test calls', function (tt) { t.pass(); - setTimeout(callback, 50); + setTimeout(callback, 1); }); } run1(function(){ - setTimeout(function(){ - run2(function(){ - tt.pass(); - }); + run2(function(){ + tt.pass(); }); }); }); From a04c2ba53e77d7b486a2fdf2456368b6d9d35dbe Mon Sep 17 00:00:00 2001 From: Kory Nunn Date: Fri, 8 Jan 2016 14:12:50 +1000 Subject: [PATCH 3/4] Added ability to delay end-of-test detection with a custom function --- lib/results.js | 37 ++++++++++++++++++++++++------------- test/async.js | 11 ++++++++--- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/lib/results.js b/lib/results.js index 7393128d..b2e082cc 100644 --- a/lib/results.js +++ b/lib/results.js @@ -63,16 +63,27 @@ Results.prototype.createStream = function (opts) { output.queue('TAP version 13\n'); self._stream.pipe(output); } - + nextTick(function next() { var t; while (t = getNextTest(self)) { t.run(); - if (!t.ended) return t.once('end', function(){ nextTick(next); }); + + function end(){ + if(opts.completeWait){ + opts.completeWait(function(){ + nextTick(next); + }); + }else{ + nextTick(next); + } + } + + if (!t.ended) return t.once('end', end); } self.emit('done'); }); - + return output; }; @@ -93,7 +104,7 @@ Results.prototype._watch = function (t) { t.once('prerun', function () { write('# ' + t.name + '\n'); }); - + t.on('result', function (res) { if (typeof res === 'string') { write('# ' + res + '\n'); @@ -105,7 +116,7 @@ Results.prototype._watch = function (t) { if (res.ok) self.pass ++ else self.fail ++ }); - + t.on('test', function (st) { self._watch(st) }); }; @@ -114,7 +125,7 @@ Results.prototype.close = function () { if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED')); self.closed = true; var write = function (s) { self._stream.queue(s) }; - + write('\n1..' + self.count + '\n'); write('# tests ' + self.count + '\n'); write('# pass ' + self.pass + '\n'); @@ -128,22 +139,22 @@ function encodeResult (res, count) { var output = ''; output += (res.ok ? 'ok ' : 'not ok ') + count; output += res.name ? ' ' + res.name.toString().replace(/\s+/g, ' ') : ''; - + if (res.skip) output += ' # SKIP'; else if (res.todo) output += ' # TODO'; - + output += '\n'; if (res.ok) return output; - + var outer = ' '; var inner = outer + ' '; output += outer + '---\n'; output += inner + 'operator: ' + res.operator + '\n'; - + if (has(res, 'expected') || has(res, 'actual')) { var ex = inspect(res.expected); var ac = inspect(res.actual); - + if (Math.max(ex.length, ac.length) > 65 || invalidYaml(ex) || invalidYaml(ac)) { output += inner + 'expected: |-\n' + inner + ' ' + ex + '\n'; output += inner + 'actual: |-\n' + inner + ' ' + ac + '\n'; @@ -163,7 +174,7 @@ function encodeResult (res, count) { output += inner + ' ' + lines[i] + '\n'; } } - + output += outer + '...\n'; return output; } @@ -172,7 +183,7 @@ function getNextTest (results) { if (!results._only) { return results.tests.shift(); } - + do { var t = results.tests.shift(); if (!t) continue; diff --git a/test/async.js b/test/async.js index ae6aab62..745f2170 100644 --- a/test/async.js +++ b/test/async.js @@ -7,7 +7,12 @@ tap.test('async test calls', function (tt) { var test = tape.createHarness(); var tc = tap.createConsumer(); - test.createStream().pipe(tc); + test.createStream({ + completeWait: function(callback){ + console.log('x'); + setTimeout(callback, 20); + } + }).pipe(tc); function run1(callback){ test('first', function (t) { @@ -15,7 +20,7 @@ tap.test('async test calls', function (tt) { t.pass(); - setTimeout(callback, 1); + setTimeout(callback, 10); }); } @@ -25,7 +30,7 @@ tap.test('async test calls', function (tt) { t.pass(); - setTimeout(callback, 1); + setTimeout(callback, 10); }); } From 7ac7213a25d4f4fc8cd3f77b5fd5718ff6049ecd Mon Sep 17 00:00:00 2001 From: Kory Nunn Date: Fri, 8 Jan 2016 14:50:01 +1000 Subject: [PATCH 4/4] Improved API --- lib/results.js | 31 ++++++++++++++----------------- package.json | 1 + test/async.js | 7 +------ 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/lib/results.js b/lib/results.js index b2e082cc..7dcc1bd8 100644 --- a/lib/results.js +++ b/lib/results.js @@ -7,6 +7,7 @@ var bind = require('function-bind'); var has = require('has'); var regexpTest = bind.call(Function.call, RegExp.prototype.test); var yamlIndicators = /\:|\-|\?/; +var debounce = require('debounce'); var nextTick = typeof setImmediate !== 'undefined' ? setImmediate : process.nextTick @@ -64,25 +65,21 @@ Results.prototype.createStream = function (opts) { self._stream.pipe(output); } - nextTick(function next() { - var t; - while (t = getNextTest(self)) { - t.run(); - - function end(){ - if(opts.completeWait){ - opts.completeWait(function(){ - nextTick(next); - }); - }else{ - nextTick(next); - } + + var end = debounce(function () { + nextTick(function(){ + var t; + while (t = getNextTest(self)) { + t.run(); + + if (!t.ended) return t.once('end', end); } - if (!t.ended) return t.once('end', end); - } - self.emit('done'); - }); + self.emit('done'); + }); + }, opts.endWaitTime || 0); + + end(); return output; }; diff --git a/package.json b/package.json index 04b02ccc..9390704d 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "test": "test" }, "dependencies": { + "debounce": "^1.0.0", "deep-equal": "~1.0.0", "defined": "~1.0.0", "function-bind": "~1.0.2", diff --git a/test/async.js b/test/async.js index 745f2170..70713a82 100644 --- a/test/async.js +++ b/test/async.js @@ -7,12 +7,7 @@ tap.test('async test calls', function (tt) { var test = tape.createHarness(); var tc = tap.createConsumer(); - test.createStream({ - completeWait: function(callback){ - console.log('x'); - setTimeout(callback, 20); - } - }).pipe(tc); + test.createStream({endWaitTime: 20}).pipe(tc); function run1(callback){ test('first', function (t) {