|
|
@ -1,7 +1,8 @@ |
|
|
|
'use strict'; |
|
|
|
|
|
|
|
const common = require('../common'); |
|
|
|
const assert = require('assert'); |
|
|
|
|
|
|
|
// general hook test setup
|
|
|
|
const tick = require('./tick'); |
|
|
|
const initHooks = require('./init-hooks'); |
|
|
|
const { checkInvocations } = require('./hook-checks'); |
|
|
@ -9,34 +10,35 @@ const { checkInvocations } = require('./hook-checks'); |
|
|
|
const hooks = initHooks(); |
|
|
|
hooks.enable(); |
|
|
|
|
|
|
|
const ReadStream = require('tty').ReadStream; |
|
|
|
const ttyStream = new ReadStream(0); |
|
|
|
|
|
|
|
const as = hooks.activitiesOfTypes('TTYWRAP'); |
|
|
|
assert.strictEqual(as.length, 1); |
|
|
|
const tty = as[0]; |
|
|
|
// test specific setup
|
|
|
|
const { ReadStream } = require('tty'); |
|
|
|
const checkInitOpts = { init: 1 }; |
|
|
|
const checkEndedOpts = { init: 1, before: 1, after: 1, destroy: 1 }; |
|
|
|
|
|
|
|
// test code
|
|
|
|
//
|
|
|
|
// listen to stdin except on Windows
|
|
|
|
const targetFD = common.isWindows ? 1 : 0; |
|
|
|
const ttyStream = new ReadStream(targetFD); |
|
|
|
const activities = hooks.activitiesOfTypes('TTYWRAP'); |
|
|
|
assert.strictEqual(activities.length, 1); |
|
|
|
const tty = activities[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'); |
|
|
|
|
|
|
|
ttyStream.end(common.mustCall(onend)); |
|
|
|
|
|
|
|
checkInvocations(tty, { init: 1 }, 'when tty.end() was invoked '); |
|
|
|
|
|
|
|
function onend() { |
|
|
|
tick(2, common.mustCall(() => |
|
|
|
checkInvocations( |
|
|
|
tty, { init: 1, before: 1, after: 1, destroy: 1 }, |
|
|
|
'when tty ended ') |
|
|
|
)); |
|
|
|
} |
|
|
|
|
|
|
|
process.on('exit', onexit); |
|
|
|
|
|
|
|
function onexit() { |
|
|
|
checkInvocations(tty, checkInitOpts, 'when tty created'); |
|
|
|
const delayedOnCloseHandler = common.mustCall(() => { |
|
|
|
checkInvocations(tty, checkEndedOpts, 'when tty ended'); |
|
|
|
}); |
|
|
|
ttyStream.on('error', (err) => assert.fail(err)); |
|
|
|
ttyStream.on('close', common.mustCall(() => |
|
|
|
tick(2, delayedOnCloseHandler) |
|
|
|
)); |
|
|
|
ttyStream.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'); |
|
|
|
}); |
|
|
|