(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)})
  ]
)