(List (= scope= flags=0 words=[] bindings=[('CURRENT_DIR', {[DQ [ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub BASH_SOURCE bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}})]]})]]}) (Com {[LIT_CHARS pwd]}) )]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[DQ [VarSub CURRENT_DIR][LIT_CHARS /../integration_test_setup.sh]]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "integration_test_setup.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=2 words=[] bindings=[('OUT_DIR', {[DQ [VarSub TEST_TMPDIR][LIT_CHARS /out]]})]) (= scope= flags=2 words=[] bindings=[('OUT', {[DQ [VarSub OUT_DIR][LIT_CHARS /outfile]]})]) (= scope= flags=2 words=[] bindings=[('ERR', {[DQ [VarSub OUT_DIR][LIT_CHARS /errfile]]})]) (FunctionDef set_up [] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[VarSub OUT_DIR]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub OUT_DIR]}) ) ) (FunctionDef assert_stdout [] (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub 1]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub OUT]})]]}) ) (FunctionDef assert_output [] (List (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub 1]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub OUT]})]]}) (Com {[LIT_CHARS assert_equals]} {[DQ [VarSub 2]]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[VarSub ERR]})]]}) ) ) (FunctionDef test_basic_functionality [] (List (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS -1]} {[LIT_CHARS 0]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/echo]} {[LIT_CHARS hi]} {[LIT_CHARS there]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]}) ) (Com {[LIT_CHARS assert_output]} {[DQ [LIT_CHARS "hi there"]]} {[DQ ]}) ) ) (FunctionDef test_to_stderr [] (List (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS -1]} {[LIT_CHARS 0]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[DQ [LIT_CHARS "/bin/echo hi there >&2"]]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]}) ) (Com {[LIT_CHARS assert_output]} {[DQ ]} {[DQ [LIT_CHARS "hi there"]]}) ) ) (FunctionDef test_exit_code [] (List (= scope= flags=0 words=[] bindings=[('code', {[LIT_CHARS 0]})]) (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS -1]} {[LIT_CHARS 0]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[DQ [LIT_CHARS "exit 71"]]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 71]} {[DQ [VarSub code]]}) ) ) (FunctionDef test_signal_death [] (List (= scope= flags=0 words=[] bindings=[('code', {[LIT_CHARS 0]})]) (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS -1]} {[LIT_CHARS 0]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 134]} {[DQ [VarSub code]]}) ) ) (FunctionDef test_signal_catcher [] (List (= scope= flags=0 words=[] bindings=[('code', {[LIT_CHARS 0]})]) (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS 1]} {[LIT_CHARS 2]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 142]} {[DQ [VarSub code]]}) (Com {[LIT_CHARS assert_stdout]} {[DQ [LIT_CHARS later]]}) ) ) (FunctionDef test_basic_timeout [] (List (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS 1]} {[LIT_CHARS 2]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[DQ [LIT_CHARS "echo before; sleep 10; echo after"]]}) ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (Com {[LIT_CHARS fail]}) ) (Com {[LIT_CHARS assert_stdout]} {[DQ [LIT_CHARS before]]}) ) ) (FunctionDef test_timeout_grace [] (List (= scope= flags=0 words=[] bindings=[('code', {[LIT_CHARS 0]})]) (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS 1]} {[LIT_CHARS 10]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 142]} {[DQ [VarSub code]]}) (Com {[LIT_CHARS assert_stdout]} {[DQ [LIT_CHARS beforeafter]]}) ) ) (FunctionDef test_timeout_kill [] (List (= scope= flags=0 words=[] bindings=[('code', {[LIT_CHARS 0]})]) (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS 1]} {[LIT_CHARS 2]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/bash]} {[LIT_CHARS -c]} {[SQ ]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 142]} {[DQ [VarSub code]]}) (Com {[LIT_CHARS assert_stdout]} {[DQ [LIT_CHARS before]]}) ) ) (FunctionDef test_execvp_error_message [] (List (= scope= flags=0 words=[] bindings=[('code', {[LIT_CHARS 0]})]) (Fork (Com {[VarSub process_wrapper]} {[LIT_CHARS -1]} {[LIT_CHARS 0]} {[VarSub OUT]} {[VarSub ERR]} {[LIT_CHARS /bin/notexisting]}) ) (AndOr OP_OR_IF (Com < (FilenameRedirectNode filename={[VarSub TEST_log]} "> 1), > ) (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) ) (Com {[LIT_CHARS assert_equals]} {[LIT_CHARS 1]} {[DQ [VarSub code]]}) (Com {[LIT_CHARS assert_contains]} {[DQ [LIT_CHARS "execvp("][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS /bin/notexisting][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ", ...): No such file or directory"]]} {[DQ [VarSub ERR]]}) ) ) (Com {[LIT_CHARS run_suite]} {[DQ [LIT_CHARS process-wrapper]]}) )