(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'Test run command' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:26) fd: -1 arg_word: {(hello-script)} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:29) fd: -1 here_begin: {(EOF)} here_end_span_id: 37 stdin_parts: [('#!') ($ Id.VSub_DollarName '$SHELL_PATH') ('\n') ('cat hello-script\n')] ) ] ) (command.Simple redirects: [ (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:38) fd:-1 arg_word:{(empty)}) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'start_command reports ENOENT' span_id:45))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id: Id.Lit_Chars val: '\ttest-run-command start-command-ENOENT ./does-not-exist\n' span_id: 50 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'run_command can run a command' span_id:57))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:61) (Token id:Id.Lit_Chars val:'\tcat hello-script >hello.sh &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tchmod +x hello.sh &&\n' span_id:63) (Token id: Id.Lit_Chars val: '\ttest-run-command run-command ./hello.sh >actual 2>err &&\n' span_id: 64 ) (Token id:Id.Lit_Chars val:'\n' span_id:65) (Token id:Id.Lit_Chars val:'\ttest_cmp hello-script actual &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\ttest_cmp empty err\n' span_id:67) ) } ) (C {(test_expect_success)} {(POSIXPERM)} {(SQ (Token id:Id.Lit_Chars val:'run_command reports EACCES' span_id:76))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:80) (Token id:Id.Lit_Chars val:'\tcat hello-script >hello.sh &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\tchmod -x hello.sh &&\n' span_id:82) (Token id: Id.Lit_Chars val: '\ttest_must_fail test-run-command run-command ./hello.sh 2>err &&\n' span_id: 83 ) (Token id:Id.Lit_Chars val:'\n' span_id:84) (Token id: Id.Lit_Chars val: '\tgrep "fatal: cannot exec.*hello.sh" err\n' span_id: 85 ) ) } ) (C {(test_expect_success)} {(POSIXPERM) (Id.Lit_Comma ',') (SANITY)} {(SQ (Token id:Id.Lit_Chars val:'unreadable directory in PATH' span_id:96))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:100) (Token id:Id.Lit_Chars val:'\tmkdir local-command &&\n' span_id:101) (Token id: Id.Lit_Chars val: '\ttest_when_finished "chmod u+rwx local-command && rm -fr local-command" &&\n' span_id: 102 ) (Token id:Id.Lit_Chars val:'\tgit config alias.nitfol "!echo frotz" &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\tchmod a-rx local-command &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\t(\n' span_id:105) (Token id:Id.Lit_Chars val:'\t\tPATH=./local-command:$PATH &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\t\tgit nitfol >actual\n' span_id:107) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\techo frotz >expect &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:110) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:116) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:119) fd: -1 here_begin: {(EOF)} here_end_span_id: 135 stdin_parts: [ ('preloaded output of a child\n') ('Hello\n') ('World\n') ('preloaded output of a child\n') ('Hello\n') ('World\n') ('preloaded output of a child\n') ('Hello\n') ('World\n') ('preloaded output of a child\n') ('Hello\n') ('World\n') ] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'run_command runs in parallel with more jobs available than tasks' span_id: 140 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:144) (Token id: Id.Lit_Chars val: '\ttest-run-command run-command-parallel 5 sh -c "printf \\"%s\\n%s\\n\\" Hello World" 2>actual &&\n' span_id: 145 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:146) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'run_command runs in parallel with as many jobs as tasks' span_id: 153 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) (Token id: Id.Lit_Chars val: '\ttest-run-command run-command-parallel 4 sh -c "printf \\"%s\\n%s\\n\\" Hello World" 2>actual &&\n' span_id: 158 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:159) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'run_command runs in parallel with more tasks than jobs available' span_id: 166 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:170) (Token id: Id.Lit_Chars val: '\ttest-run-command run-command-parallel 3 sh -c "printf \\"%s\\n%s\\n\\" Hello World" 2>actual &&\n' span_id: 171 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:172) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:178) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:181) fd: -1 here_begin: {(EOF)} here_end_span_id: 191 stdin_parts: [ ('preloaded output of a child\n') ('asking for a quick stop\n') ('preloaded output of a child\n') ('asking for a quick stop\n') ('preloaded output of a child\n') ('asking for a quick stop\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'run_command is asked to abort gracefully' span_id:196))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:200) (Token id: Id.Lit_Chars val: '\ttest-run-command run-command-abort 3 false 2>actual &&\n' span_id: 201 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:202) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:208) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:211) fd: -1 here_begin: {(EOF)} here_end_span_id: 216 stdin_parts: [('no further jobs available\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'run_command outputs ' span_id:221))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:225) (Token id: Id.Lit_Chars val: '\ttest-run-command run-command-no-jobs 3 sh -c "printf \\"%s\\n%s\\n\\" Hello World" 2>actual &&\n' span_id: 226 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:227) ) } ) (C {(test_done)}) ] )