Skip to content

Commit

Permalink
Fixed broken lolex integration.
Browse files Browse the repository at this point in the history
  • Loading branch information
kolodny authored and mcollina committed Mar 3, 2018
1 parent fbb0d25 commit 2f933db
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 25 deletions.
8 changes: 4 additions & 4 deletions build/files.js
Expand Up @@ -125,14 +125,14 @@ const headRegexp = /(^module.exports = \w+;?)/m
, `$1
/*<replacement>*/
var processNextTick = require(\'process-nextick-args\').nextTick;
var pna = require(\'process-nextick-args\');
/*</replacement>*/
`
]

, processNextTickReplacement = [
/process.nextTick\(/g
, 'processNextTick('
, 'pna.nextTick('
]

, internalUtilReplacement = [
Expand All @@ -145,12 +145,12 @@ const headRegexp = /(^module.exports = \w+;?)/m
, `$1
/*<replacement>*/
var asyncWrite = !process.browser && ['v0.10' , 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
var asyncWrite = !process.browser && ['v0.10' , 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
/*</replacement>*/
`
]
, fixSyncWrite = [
/if \(sync\) {\n\s+processNextTick\(afterWrite, stream, state, finished, cb\);\n\s+}/
/if \(sync\) {\n\s+pna.nextTick\(afterWrite, stream, state, finished, cb\);\n\s+}/
, `if (sync) {
/*<replacement>*/
asyncWrite(afterWrite, stream, state, finished, cb);
Expand Down
6 changes: 3 additions & 3 deletions lib/_stream_duplex.js
Expand Up @@ -28,7 +28,7 @@

/*<replacement>*/

var processNextTick = require('process-nextick-args').nextTick;
var pna = require('process-nextick-args');
/*</replacement>*/

/*<replacement>*/
Expand Down Expand Up @@ -82,7 +82,7 @@ function onend() {

// no more data can be written.
// But allow more writes to happen in this tick.
processNextTick(onEndNT, this);
pna.nextTick(onEndNT, this);
}

function onEndNT(self) {
Expand Down Expand Up @@ -114,7 +114,7 @@ Duplex.prototype._destroy = function (err, cb) {
this.push(null);
this.end();

processNextTick(cb, err);
pna.nextTick(cb, err);
};

function forEach(xs, f) {
Expand Down
14 changes: 7 additions & 7 deletions lib/_stream_readable.js
Expand Up @@ -23,7 +23,7 @@

/*<replacement>*/

var processNextTick = require('process-nextick-args').nextTick;
var pna = require('process-nextick-args');
/*</replacement>*/

module.exports = Readable;
Expand Down Expand Up @@ -495,7 +495,7 @@ function emitReadable(stream) {
if (!state.emittedReadable) {
debug('emitReadable', state.flowing);
state.emittedReadable = true;
if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
}
}

Expand All @@ -514,7 +514,7 @@ function emitReadable_(stream) {
function maybeReadMore(stream, state) {
if (!state.readingMore) {
state.readingMore = true;
processNextTick(maybeReadMore_, stream, state);
pna.nextTick(maybeReadMore_, stream, state);
}
}

Expand Down Expand Up @@ -559,7 +559,7 @@ Readable.prototype.pipe = function (dest, pipeOpts) {
var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;

var endFn = doEnd ? onend : unpipe;
if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);

dest.on('unpipe', onunpipe);
function onunpipe(readable, unpipeInfo) {
Expand Down Expand Up @@ -749,7 +749,7 @@ Readable.prototype.on = function (ev, fn) {
state.readableListening = state.needReadable = true;
state.emittedReadable = false;
if (!state.reading) {
processNextTick(nReadingNextTick, this);
pna.nextTick(nReadingNextTick, this);
} else if (state.length) {
emitReadable(this);
}
Expand Down Expand Up @@ -780,7 +780,7 @@ Readable.prototype.resume = function () {
function resume(stream, state) {
if (!state.resumeScheduled) {
state.resumeScheduled = true;
processNextTick(resume_, stream, state);
pna.nextTick(resume_, stream, state);
}
}

Expand Down Expand Up @@ -988,7 +988,7 @@ function endReadable(stream) {

if (!state.endEmitted) {
state.ended = true;
processNextTick(endReadableNT, state, stream);
pna.nextTick(endReadableNT, state, stream);
}
}

Expand Down
16 changes: 8 additions & 8 deletions lib/_stream_writable.js
Expand Up @@ -27,7 +27,7 @@

/*<replacement>*/

var processNextTick = require('process-nextick-args').nextTick;
var pna = require('process-nextick-args');
/*</replacement>*/

module.exports = Writable;
Expand All @@ -54,7 +54,7 @@ function CorkedRequest(state) {
/* </replacement> */

/*<replacement>*/
var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
/*</replacement>*/

/*<replacement>*/
Expand Down Expand Up @@ -288,7 +288,7 @@ function writeAfterEnd(stream, cb) {
var er = new Error('write after end');
// TODO: defer error events consistently everywhere, not just the cb
stream.emit('error', er);
processNextTick(cb, er);
pna.nextTick(cb, er);
}

// Checks that a user-supplied chunk is valid, especially for the particular
Expand All @@ -305,7 +305,7 @@ function validChunk(stream, state, chunk, cb) {
}
if (er) {
stream.emit('error', er);
processNextTick(cb, er);
pna.nextTick(cb, er);
valid = false;
}
return valid;
Expand Down Expand Up @@ -425,10 +425,10 @@ function onwriteError(stream, state, sync, er, cb) {
if (sync) {
// defer the callback if we are being called synchronously
// to avoid piling up things on the stack
processNextTick(cb, er);
pna.nextTick(cb, er);
// this can emit finish, and it will always happen
// after error
processNextTick(finishMaybe, stream, state);
pna.nextTick(finishMaybe, stream, state);
stream._writableState.errorEmitted = true;
stream.emit('error', er);
} else {
Expand Down Expand Up @@ -603,7 +603,7 @@ function prefinish(stream, state) {
if (typeof stream._final === 'function') {
state.pendingcb++;
state.finalCalled = true;
processNextTick(callFinal, stream, state);
pna.nextTick(callFinal, stream, state);
} else {
state.prefinished = true;
stream.emit('prefinish');
Expand All @@ -627,7 +627,7 @@ function endWritable(stream, state, cb) {
state.ending = true;
finishMaybe(stream, state);
if (cb) {
if (state.finished) processNextTick(cb);else stream.once('finish', cb);
if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
}
state.ended = true;
stream.writable = false;
Expand Down
6 changes: 3 additions & 3 deletions lib/internal/streams/destroy.js
Expand Up @@ -2,7 +2,7 @@

/*<replacement>*/

var processNextTick = require('process-nextick-args').nextTick;
var pna = require('process-nextick-args');
/*</replacement>*/

// undocumented cb() API, needed for core, not for public API
Expand All @@ -16,7 +16,7 @@ function destroy(err, cb) {
if (cb) {
cb(err);
} else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
processNextTick(emitErrorNT, this, err);
pna.nextTick(emitErrorNT, this, err);
}
return this;
}
Expand All @@ -35,7 +35,7 @@ function destroy(err, cb) {

this._destroy(err || null, function (err) {
if (!cb && err) {
processNextTick(emitErrorNT, _this, err);
pna.nextTick(emitErrorNT, _this, err);
if (_this._writableState) {
_this._writableState.errorEmitted = true;
}
Expand Down
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -16,6 +16,7 @@
"assert": "^1.4.0",
"babel-polyfill": "^6.9.1",
"buffer": "^4.9.0",
"lolex": "^2.3.2",
"nyc": "^6.4.0",
"tap": "^0.7.0",
"tape": "^4.8.0",
Expand Down
39 changes: 39 additions & 0 deletions test/ours/lolex-fake-timers.js
@@ -0,0 +1,39 @@
require('../common');
var util = require('util');
var assert = require('assert');
var lolex = require('lolex');
var stream = require('../../');
var Transform = stream.Transform;

function MyTransform() {
Transform.call(this);
}

util.inherits(MyTransform, Transform);

const clock = lolex.install({toFake: [ 'setImmediate', 'nextTick' ]});
let stream2DataCalled = false;

var stream = new MyTransform();
stream.on('data', function() {
stream.on('end', function() {

var stream2 = new MyTransform();
stream2.on('data', function() {
stream2.on('end', function() {
stream2DataCalled = true
});
setImmediate(function() {
stream2.end()
});
});
stream2.emit('data')

});
stream.end();
});
stream.emit('data');

clock.runAll()
clock.uninstall();
assert(stream2DataCalled);

0 comments on commit 2f933db

Please sign in to comment.