mirror of https://gitee.com/openkylin/nodejs.git
43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
|
'use strict';
|
||
|
const common = require('../common');
|
||
|
const assert = require('assert');
|
||
|
const fs = require('fs');
|
||
|
const util = require('util');
|
||
|
const { Writable } = require('stream');
|
||
|
const { Worker, isMainThread } = require('worker_threads');
|
||
|
|
||
|
class BufferingWritable extends Writable {
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.chunks = [];
|
||
|
}
|
||
|
|
||
|
_write(chunk, enc, cb) {
|
||
|
this.chunks.push(chunk);
|
||
|
cb();
|
||
|
}
|
||
|
|
||
|
get buffer() {
|
||
|
return Buffer.concat(this.chunks);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (isMainThread) {
|
||
|
const original = new BufferingWritable();
|
||
|
const passed = new BufferingWritable();
|
||
|
|
||
|
const w = new Worker(__filename, { stdin: true, stdout: true });
|
||
|
const source = fs.createReadStream(process.execPath);
|
||
|
source.pipe(w.stdin);
|
||
|
source.pipe(original);
|
||
|
w.stdout.pipe(passed);
|
||
|
|
||
|
passed.on('finish', common.mustCall(() => {
|
||
|
assert.strictEqual(original.buffer.compare(passed.buffer), 0,
|
||
|
`Original: ${util.inspect(original.buffer)}, ` +
|
||
|
`Actual: ${util.inspect(passed.buffer)}`);
|
||
|
}));
|
||
|
} else {
|
||
|
process.stdin.pipe(process.stdout);
|
||
|
}
|