mirror of https://github.com/lukechilds/node.git
Browse Source
Match changes made to test-ttywrap.readstream for consistency. PR-URL: https://github.com/nodejs/node/pull/13991 Fixes: https://github.com/nodejs/node/issues/13984 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>v6
committed by
Refael Ackermann
1 changed files with 31 additions and 48 deletions
@ -1,64 +1,47 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
|
|||
const tty_fd = common.getTTYfd(); |
|||
if (tty_fd < 0) |
|||
common.skip('no valid TTY fd available'); |
|||
|
|||
const assert = require('assert'); |
|||
|
|||
// general hook test setup
|
|||
const tick = require('./tick'); |
|||
const initHooks = require('./init-hooks'); |
|||
const { checkInvocations } = require('./hook-checks'); |
|||
|
|||
const ttyStream = (() => { |
|||
try { |
|||
return new (require('tty').WriteStream)(tty_fd); |
|||
} catch (e) { |
|||
return null; |
|||
} |
|||
})(); |
|||
if (ttyStream === null) |
|||
common.skip('no valid TTY fd available'); |
|||
|
|||
const hooks = initHooks(); |
|||
hooks.enable(); |
|||
|
|||
const as = hooks.activitiesOfTypes('TTYWRAP'); |
|||
assert.strictEqual(as.length, 1); |
|||
const tty = as[0]; |
|||
assert.strictEqual(tty.type, 'TTYWRAP'); |
|||
assert.strictEqual(typeof tty.uid, 'number'); |
|||
assert.strictEqual(typeof tty.triggerAsyncId, 'number'); |
|||
checkInvocations(tty, { init: 1 }, 'when tty created'); |
|||
if (!process.stdout.isTTY) |
|||
return common.skip('no valid writable TTY available'); |
|||
|
|||
ttyStream |
|||
.on('finish', common.mustCall(onfinish)) |
|||
.end(common.mustCall(onend)); |
|||
// test specific setup
|
|||
const checkInitOpts = { init: 1 }; |
|||
const checkEndedOpts = { init: 1, before: 1, after: 1, destroy: 1 }; |
|||
|
|||
checkInvocations(tty, { init: 1 }, 'when tty.end() was invoked '); |
|||
// test code
|
|||
//
|
|||
// listen to stdin except on Windows
|
|||
const activities = hooks.activitiesOfTypes('TTYWRAP'); |
|||
assert.strictEqual(activities.length, 1); |
|||
|
|||
function onend() { |
|||
tick(2, common.mustCall(() => |
|||
checkInvocations( |
|||
tty, { init: 1, before: 1, after: 1, destroy: 1 }, |
|||
'when tty ended ') |
|||
)); |
|||
} |
|||
|
|||
function onfinish() { |
|||
tick(2, common.mustCall(() => |
|||
checkInvocations( |
|||
tty, { init: 1, before: 1, after: 1, destroy: 1 }, |
|||
'when tty ended ') |
|||
)); |
|||
} |
|||
|
|||
process.on('exit', onexit); |
|||
|
|||
function onexit() { |
|||
const tty = activities[0]; |
|||
assert.strictEqual(tty.type, 'TTYWRAP'); |
|||
assert.strictEqual(typeof tty.uid, 'number'); |
|||
assert.strictEqual(typeof tty.triggerAsyncId, 'number'); |
|||
checkInvocations(tty, checkInitOpts, 'when tty created'); |
|||
|
|||
const delayedOnCloseHandler = common.mustCall(() => { |
|||
checkInvocations(tty, checkEndedOpts, 'when tty ended'); |
|||
}); |
|||
process.stdout.on('error', (err) => assert.fail(err)); |
|||
process.stdout.on('close', common.mustCall(() => |
|||
tick(2, delayedOnCloseHandler) |
|||
)); |
|||
process.stdout.destroy(); |
|||
checkInvocations(tty, checkInitOpts, 'when tty.end() was invoked'); |
|||
|
|||
process.on('exit', () => { |
|||
hooks.disable(); |
|||
hooks.sanityCheck('TTYWRAP'); |
|||
checkInvocations(tty, { init: 1, before: 1, after: 1, destroy: 1 }, |
|||
'when process exits'); |
|||
} |
|||
checkInvocations(tty, checkEndedOpts, 'when process exits'); |
|||
}); |
|||
|
Loading…
Reference in new issue