@ -1,4 +1,5 @@
'use strict' ;
'use strict' ;
const common = require ( '../common' ) ;
const common = require ( '../common' ) ;
const assert = require ( 'assert' ) ;
const assert = require ( 'assert' ) ;
@ -10,31 +11,33 @@ const { checkInvocations } = require('./hook-checks');
const hooks = initHooks ( ) ;
const hooks = initHooks ( ) ;
hooks . enable ( ) ;
hooks . enable ( ) ;
if ( ! process . stdin . isTTY )
return common . skip ( 'no valid readable TTY available' ) ;
// test specific setup
// test specific setup
const { ReadStream } = require ( 'tty' ) ;
const checkInitOpts = { init : 1 } ;
const checkInitOpts = { init : 1 } ;
const checkEndedOpts = { init : 1 , before : 1 , after : 1 , destroy : 1 } ;
const checkEndedOpts = { init : 1 , before : 1 , after : 1 , destroy : 1 } ;
// test code
// test code
//
//
// listen to stdin except on Windows
// listen to stdin except on Windows
const targetFD = common . isWindows ? 1 : 0 ;
const ttyStream = new ReadStream ( targetFD ) ;
const activities = hooks . activitiesOfTypes ( 'TTYWRAP' ) ;
const activities = hooks . activitiesOfTypes ( 'TTYWRAP' ) ;
assert . strictEqual ( activities . length , 1 ) ;
assert . strictEqual ( activities . length , 1 ) ;
const tty = activities [ 0 ] ;
const tty = activities [ 0 ] ;
assert . strictEqual ( tty . type , 'TTYWRAP' ) ;
assert . strictEqual ( tty . type , 'TTYWRAP' ) ;
assert . strictEqual ( typeof tty . uid , 'number' ) ;
assert . strictEqual ( typeof tty . uid , 'number' ) ;
assert . strictEqual ( typeof tty . triggerAsyncId , 'number' ) ;
assert . strictEqual ( typeof tty . triggerAsyncId , 'number' ) ;
checkInvocations ( tty , checkInitOpts , 'when tty created' ) ;
checkInvocations ( tty , checkInitOpts , 'when tty created' ) ;
const delayedOnCloseHandler = common . mustCall ( ( ) => {
const delayedOnCloseHandler = common . mustCall ( ( ) => {
checkInvocations ( tty , checkEndedOpts , 'when tty ended' ) ;
checkInvocations ( tty , checkEndedOpts , 'when tty ended' ) ;
} ) ;
} ) ;
ttyStream . on ( 'error' , ( err ) => assert . fail ( err ) ) ;
process . stdin . on ( 'error' , ( err ) => assert . fail ( err ) ) ;
ttyStream . on ( 'close' , common . mustCall ( ( ) =>
process . stdin . on ( 'close' , common . mustCall ( ( ) =>
tick ( 2 , delayedOnCloseHandler )
tick ( 2 , delayedOnCloseHandler )
) ) ;
) ) ;
ttyStream . destroy ( ) ;
process . stdin . destroy ( ) ;
checkInvocations ( tty , checkInitOpts , 'when tty.end() was invoked' ) ;
checkInvocations ( tty , checkInitOpts , 'when tty.end() was invoked' ) ;
process . on ( 'exit' , ( ) => {
process . on ( 'exit' , ( ) => {