You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.0 KiB
88 lines
2.0 KiB
4 weeks ago
|
var Dicer = require('..');
|
||
|
var assert = require('assert');
|
||
|
|
||
|
var CRLF = '\r\n';
|
||
|
var boundary = 'boundary';
|
||
|
|
||
|
var writeSep = '--' + boundary;
|
||
|
|
||
|
var writePart = [
|
||
|
writeSep,
|
||
|
'Content-Type: text/plain',
|
||
|
'Content-Length: 0'
|
||
|
].join(CRLF)
|
||
|
+ CRLF + CRLF
|
||
|
+ 'some data' + CRLF;
|
||
|
|
||
|
var writeEnd = '--' + CRLF;
|
||
|
|
||
|
var firedEnd = false;
|
||
|
var firedFinish = false;
|
||
|
|
||
|
var dicer = new Dicer({boundary: boundary});
|
||
|
dicer.on('part', partListener);
|
||
|
dicer.on('finish', finishListener);
|
||
|
dicer.write(writePart+writeSep);
|
||
|
|
||
|
function partListener(partReadStream) {
|
||
|
partReadStream.on('data', function(){});
|
||
|
partReadStream.on('end', partEndListener);
|
||
|
}
|
||
|
function partEndListener() {
|
||
|
firedEnd = true;
|
||
|
setImmediate(afterEnd);
|
||
|
}
|
||
|
function afterEnd() {
|
||
|
dicer.end(writeEnd);
|
||
|
setImmediate(afterWrite);
|
||
|
}
|
||
|
function finishListener() {
|
||
|
assert(firedEnd, 'Failed to end before finishing');
|
||
|
firedFinish = true;
|
||
|
test2();
|
||
|
}
|
||
|
function afterWrite() {
|
||
|
assert(firedFinish, 'Failed to finish');
|
||
|
}
|
||
|
|
||
|
var isPausePush = true;
|
||
|
|
||
|
var firedPauseCallback = false;
|
||
|
var firedPauseFinish = false;
|
||
|
|
||
|
var dicer2 = null;
|
||
|
|
||
|
function test2() {
|
||
|
dicer2 = new Dicer({boundary: boundary});
|
||
|
dicer2.on('part', pausePartListener);
|
||
|
dicer2.on('finish', pauseFinish);
|
||
|
dicer2.write(writePart+writeSep, 'utf8', pausePartCallback);
|
||
|
setImmediate(pauseAfterWrite);
|
||
|
}
|
||
|
function pausePartListener(partReadStream) {
|
||
|
partReadStream.on('data', function(){});
|
||
|
partReadStream.on('end', function(){});
|
||
|
var realPush = partReadStream.push;
|
||
|
partReadStream.push = function fakePush() {
|
||
|
realPush.apply(partReadStream, arguments);
|
||
|
if (!isPausePush)
|
||
|
return true;
|
||
|
isPausePush = false;
|
||
|
return false;
|
||
|
};
|
||
|
}
|
||
|
function pauseAfterWrite() {
|
||
|
dicer2.end(writeEnd);
|
||
|
setImmediate(pauseAfterEnd);
|
||
|
}
|
||
|
function pauseAfterEnd() {
|
||
|
assert(firedPauseCallback, 'Failed to call callback after pause');
|
||
|
assert(firedPauseFinish, 'Failed to finish after pause');
|
||
|
}
|
||
|
function pauseFinish() {
|
||
|
firedPauseFinish = true;
|
||
|
}
|
||
|
function pausePartCallback() {
|
||
|
firedPauseCallback = true;
|
||
|
}
|