|
|
var Stream = require('stream') |
|
|
var tap = require('tap') |
|
|
var MS = require('../mute.js') |
|
|
|
|
|
// some marker objects |
|
|
var END = {} |
|
|
var PAUSE = {} |
|
|
var RESUME = {} |
|
|
|
|
|
function PassThrough () { |
|
|
Stream.call(this) |
|
|
this.readable = this.writable = true |
|
|
} |
|
|
|
|
|
PassThrough.prototype = Object.create(Stream.prototype, { |
|
|
constructor: { |
|
|
value: PassThrough |
|
|
}, |
|
|
write: { |
|
|
value: function (c) { |
|
|
this.emit('data', c) |
|
|
return true |
|
|
} |
|
|
}, |
|
|
end: { |
|
|
value: function (c) { |
|
|
if (c) this.write(c) |
|
|
this.emit('end') |
|
|
} |
|
|
}, |
|
|
pause: { |
|
|
value: function () { |
|
|
this.emit('pause') |
|
|
} |
|
|
}, |
|
|
resume: { |
|
|
value: function () { |
|
|
this.emit('resume') |
|
|
} |
|
|
} |
|
|
}) |
|
|
|
|
|
tap.test('incoming', function (t) { |
|
|
var ms = new MS |
|
|
var str = new PassThrough |
|
|
str.pipe(ms) |
|
|
|
|
|
var expect = ['foo', 'boo', END] |
|
|
ms.on('data', function (c) { |
|
|
t.equal(c, expect.shift()) |
|
|
}) |
|
|
ms.on('end', function () { |
|
|
t.equal(END, expect.shift()) |
|
|
t.end() |
|
|
}) |
|
|
str.write('foo') |
|
|
ms.mute() |
|
|
str.write('bar') |
|
|
ms.unmute() |
|
|
str.write('boo') |
|
|
ms.mute() |
|
|
str.write('blaz') |
|
|
str.end('grelb') |
|
|
}) |
|
|
|
|
|
tap.test('outgoing', function (t) { |
|
|
var ms = new MS |
|
|
var str = new PassThrough |
|
|
ms.pipe(str) |
|
|
|
|
|
var expect = ['foo', 'boo', END] |
|
|
str.on('data', function (c) { |
|
|
t.equal(c, expect.shift()) |
|
|
}) |
|
|
str.on('end', function () { |
|
|
t.equal(END, expect.shift()) |
|
|
t.end() |
|
|
}) |
|
|
|
|
|
ms.write('foo') |
|
|
ms.mute() |
|
|
ms.write('bar') |
|
|
ms.unmute() |
|
|
ms.write('boo') |
|
|
ms.mute() |
|
|
ms.write('blaz') |
|
|
ms.end('grelb') |
|
|
}) |
|
|
|
|
|
tap.test('isTTY', function (t) { |
|
|
var str = new PassThrough |
|
|
str.isTTY = true |
|
|
str.columns=80 |
|
|
str.rows=24 |
|
|
|
|
|
var ms = new MS |
|
|
t.equal(ms.isTTY, false) |
|
|
t.equal(ms.columns, undefined) |
|
|
t.equal(ms.rows, undefined) |
|
|
ms.pipe(str) |
|
|
t.equal(ms.isTTY, true) |
|
|
t.equal(ms.columns, 80) |
|
|
t.equal(ms.rows, 24) |
|
|
str.isTTY = false |
|
|
t.equal(ms.isTTY, false) |
|
|
t.equal(ms.columns, 80) |
|
|
t.equal(ms.rows, 24) |
|
|
str.isTTY = true |
|
|
t.equal(ms.isTTY, true) |
|
|
t.equal(ms.columns, 80) |
|
|
t.equal(ms.rows, 24) |
|
|
ms.isTTY = false |
|
|
t.equal(ms.isTTY, false) |
|
|
t.equal(ms.columns, 80) |
|
|
t.equal(ms.rows, 24) |
|
|
|
|
|
ms = new MS |
|
|
t.equal(ms.isTTY, false) |
|
|
str.pipe(ms) |
|
|
t.equal(ms.isTTY, true) |
|
|
str.isTTY = false |
|
|
t.equal(ms.isTTY, false) |
|
|
str.isTTY = true |
|
|
t.equal(ms.isTTY, true) |
|
|
ms.isTTY = false |
|
|
t.equal(ms.isTTY, false) |
|
|
|
|
|
t.end() |
|
|
}) |
|
|
|
|
|
tap.test('pause/resume incoming', function (t) { |
|
|
var str = new PassThrough |
|
|
var ms = new MS |
|
|
str.on('pause', function () { |
|
|
t.equal(PAUSE, expect.shift()) |
|
|
}) |
|
|
str.on('resume', function () { |
|
|
t.equal(RESUME, expect.shift()) |
|
|
}) |
|
|
var expect = [PAUSE, RESUME, PAUSE, RESUME] |
|
|
str.pipe(ms) |
|
|
ms.pause() |
|
|
ms.resume() |
|
|
ms.pause() |
|
|
ms.resume() |
|
|
t.equal(expect.length, 0, 'saw all events') |
|
|
t.end() |
|
|
}) |
|
|
|
|
|
tap.test('replace with *', function (t) { |
|
|
var str = new PassThrough |
|
|
var ms = new MS({replace: '*'}) |
|
|
str.pipe(ms) |
|
|
var expect = ['foo', '*****', 'bar', '***', 'baz', 'boo', '**', '****'] |
|
|
|
|
|
ms.on('data', function (c) { |
|
|
t.equal(c, expect.shift()) |
|
|
}) |
|
|
|
|
|
str.write('foo') |
|
|
ms.mute() |
|
|
str.write('12345') |
|
|
ms.unmute() |
|
|
str.write('bar') |
|
|
ms.mute() |
|
|
str.write('baz') |
|
|
ms.unmute() |
|
|
str.write('baz') |
|
|
str.write('boo') |
|
|
ms.mute() |
|
|
str.write('xy') |
|
|
str.write('xyzΩ') |
|
|
|
|
|
t.equal(expect.length, 0) |
|
|
t.end() |
|
|
}) |
|
|
|
|
|
tap.test('replace with ~YARG~', function (t) { |
|
|
var str = new PassThrough |
|
|
var ms = new MS({replace: '~YARG~'}) |
|
|
str.pipe(ms) |
|
|
var expect = ['foo', '~YARG~~YARG~~YARG~~YARG~~YARG~', 'bar', |
|
|
'~YARG~~YARG~~YARG~', 'baz', 'boo', '~YARG~~YARG~', |
|
|
'~YARG~~YARG~~YARG~~YARG~'] |
|
|
|
|
|
ms.on('data', function (c) { |
|
|
t.equal(c, expect.shift()) |
|
|
}) |
|
|
|
|
|
// also throw some unicode in there, just for good measure. |
|
|
str.write('foo') |
|
|
ms.mute() |
|
|
str.write('ΩΩ') |
|
|
ms.unmute() |
|
|
str.write('bar') |
|
|
ms.mute() |
|
|
str.write('Ω') |
|
|
ms.unmute() |
|
|
str.write('baz') |
|
|
str.write('boo') |
|
|
ms.mute() |
|
|
str.write('Ω') |
|
|
str.write('ΩΩ') |
|
|
|
|
|
t.equal(expect.length, 0) |
|
|
t.end() |
|
|
})
|
|
|
|