# Helpers for terminal output tests. # Catch tests which should depend on TTY but forgot to. There's no need # to additionally check that the TTY prereq is set here. If the test declared # it and we are running the test, then it must have been set. proc test_terminal { if ! test_declared_prereq TTY { echo >&4 "test_terminal: need to declare TTY prerequisite> !4 "test_terminal: need to declare TTY prerequisite" return 127 } perl "$TEST_DIRECTORY"/test-terminal.perl @Argv } test_lazy_prereq TTY ' test_have_prereq PERL && # Reading from the pty master seems to get stuck _sometimes_ # on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9. # # Reproduction recipe: run # # i=0 # while ./test-terminal.perl echo hi $i # do # : $((i = $i + 1)) # done # # After 2000 iterations or so it hangs. # https://rt.cpan.org/Ticket/Display.html?id=65692 # test "$(uname -s)" != Darwin && perl "$TEST_DIRECTORY"/test-terminal.perl \ sh -c "test -t 1 && test -t 2" ' (CommandList children: [ (FuncDef name: test_terminal body: (BraceGroup children: [ (If arms: [ (if_arm cond: [(Pipeline children:[(C {(test_declared_prereq)} {(TTY)})] negated:True)] action: [ (SimpleCommand words: [{(echo)} {(DQ ("test_terminal: need to declare TTY prerequisite"))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(4)} spids:[35])] ) (ControlFlow token: arg_word: {(127)} ) ] spids: [-1 30] ) ] spids: [-1 48] ) (C {(perl)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/test-terminal.perl)} {(DQ ($ VSub_At "$@"))} ) ] spids: [18] ) spids: [13 17] ) (C {(test_lazy_prereq)} {(TTY)} { (SQ <"\n"> <"\ttest_have_prereq PERL &&\n"> <"\n"> <"\t# Reading from the pty master seems to get stuck _sometimes_\n"> <"\t# on Mac OS X 10.5.0, using Perl 5.10.0 or 5.8.9.\n"> <"\t#\n"> <"\t# Reproduction recipe: run\n"> <"\t#\n"> <"\t#\ti=0\n"> <"\t#\twhile ./test-terminal.perl echo hi $i\n"> <"\t#\tdo\n"> <"\t#\t\t: $((i = $i + 1))\n"> <"\t#\tdone\n"> <"\t#\n"> <"\t# After 2000 iterations or so it hangs.\n"> <"\t# https://rt.cpan.org/Ticket/Display.html?id=65692\n"> <"\t#\n"> <"\ttest \"$(uname -s)\" != Darwin &&\n"> <"\n"> <"\tperl \"$TEST_DIRECTORY\"/test-terminal.perl \\\n"> <"\t\tsh -c \"test -t 1 && test -t 2\"\n"> ) } ) ] )