-
Notifications
You must be signed in to change notification settings - Fork 30k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test,async_hooks: match test-ttywrap.readstream
Match changes made to test-ttywrap.readstream for consistency. PR-URL: #13991 Fixes: #13984 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>
- Loading branch information
1 parent
1fc5c29
commit b717609
Showing
1 changed file
with
31 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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'); | ||
}); |