(command.CommandList
  children: [
    (command.Simple
      blame_tok: <Id.Lit_Colon ':'>
      more_env: []
      words: [
        {<Id.Lit_Colon ':'>}
        {
          (BracedVarSub
            left: <Id.Left_DollarBrace '${'>
            token: <Id.VSub_Name TEST_SH>
            var_name: TEST_SH
            suffix_op: (suffix_op.Unary op:<Id.VTest_ColonEquals _> arg_word:{(DQ <'/bin/sh'>)})
            right: <Id.Right_DollarBrace '}'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'nl='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'nl='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nl='> name:nl)
          op: assign_op.Equal
          rhs: {(SQ <'\n'>)}
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name_tok: <reset>
      name: reset
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TEST_NUM='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TEST_NUM='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_NUM='> name:TEST_NUM)
                  op: assign_op.Equal
                  rhs: {<0>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TEST_FAILURES='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TEST_FAILURES='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_FAILURES='> name:TEST_FAILURES)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='>
                      name: TEST_FAIL_COUNT
                    )
                  op: assign_op.Equal
                  rhs: {<0>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TEST_ID='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TEST_ID='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_ID='> name:TEST_ID)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 1))}
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <check>
      name: check
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'fail='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'fail='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail)
                  op: assign_op.Equal
                  rhs: {<false>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TEMP_FILE='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TEMP_FILE='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEMP_FILE='> name:TEMP_FILE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <mktemp>
                            more_env: []
                            words: [{<mktemp>} {<OUT.XXXXXX>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TEST_NUM='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TEST_NUM='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEST_NUM='> name:TEST_NUM)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        left: <Id.Left_DollarDParen '$(('>
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: {($ Id.VSub_DollarName TEST_NUM)}
                            right: {<Id.Lit_Digits 1>}
                          )
                        right: <Id.Right_DollarDParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'CMD='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'CMD='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CMD='> name:CMD)
                  op: assign_op.Equal
                  rhs: {(DQ <'nl=\''> (${ Id.VSub_Name nl) <'\'; '> ($ Id.VSub_Number 1))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'result='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'result='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <Id.Left_DollarBrace '${'>
                              more_env: []
                              words: [{(${ Id.VSub_Name TEST_SH)} {<-c>} {(DQ (${ Id.VSub_Name CMD))}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_Great '2>'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {(DQ (${ Id.VSub_Name TEMP_FILE))}
                                )
                              ]
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'STATUS='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'STATUS='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'STATUS='> name:STATUS)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '?')}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ (${ Id.VSub_Name STATUS))}
                                {<-ne>}
                                {(DQ ($ Id.VSub_Number 3))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] expected exit code '> 
                            ($ Id.VSub_Number 3) <', got '> (${ Id.VSub_Name STATUS)
                          )
                        }
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: 
                        (case_arg.Word
                          w: {(DQ ($ Id.VSub_Number 3) <'/'> (${ Id.VSub_Name STATUS))}
                        )
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: 
                            (pat.Words
                              words: [{<Id.Lit_Star '*'> <'/0'>} {<'0/'> <Id.Lit_Star '*'>}]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'fail='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'fail='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail)
                                  op: assign_op.Equal
                                  rhs: {<true>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  spids: [213 232]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ ($ Id.VSub_Number 3))}
                                {<-eq>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-s>}
                                        {(DQ (${ Id.VSub_Name TEMP_FILE))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [
                                {<echo>}
                                {
                                  (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) 
                                    <'] Messages produced on stderr unexpected...'>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {(DQ (${ Id.VSub_Name TEMP_FILE))}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'fail='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'fail='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail)
                                  op: assign_op.Equal
                                  rhs: {<true>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [312 327]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [294 309]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  negated: <Id.KW_Bang '!'>
                                  children: [
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-s>}
                                        {(DQ (${ Id.VSub_Name TEMP_FILE))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  ops: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [
                            {<echo>}
                            {
                              (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) 
                                <'] Expected messages on stderr, nothing produced'>
                              )
                            }
                          ]
                          redirects: [
                            (Redir
                              op: <Id.Redir_GreatAnd '>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'fail='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'fail='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail)
                              op: assign_op.Equal
                              rhs: {<true>}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      spids: [366 383]
                    )
                  ]
                  else_action: []
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-f>} {(DQ (${ Id.VSub_Name TEMP_FILE))}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'oifs='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'oifs='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'oifs='> name:oifs)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName IFS))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'IFS='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'IFS='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName nl))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'result='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'result='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'result='> name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {($ Id.VSub_DollarName result)}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'IFS='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'IFS='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName oifs))}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_Number 2))}
                            {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                            {(DQ ($ Id.VSub_DollarName result))}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] Expected output \''> 
                            ($ Id.VSub_Number 2) <'\', received \''> ($ Id.VSub_DollarName result) <'\''>
                          )
                        }
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'fail='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'fail='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fail='> name:fail)
                          op: assign_op.Equal
                          rhs: {<true>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [454 472]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <Id.VSub_DollarName '$fail'>
                          more_env: []
                          words: [{($ Id.VSub_DollarName fail)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'['> ($ Id.VSub_DollarName TEST_NUM) <'] Full command: <<'> 
                            (${ Id.VSub_Name CMD) <'>>'>
                          )
                        }
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                  ]
                  spids: [499 504]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <Id.VSub_DollarName '$fail'>
                  more_env: []
                  words: [{($ Id.VSub_DollarName fail)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName TEST_ID))}]
                  redirects: []
                  do_fork: T
                )
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'TEST_FAILURES='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'TEST_FAILURES='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'TEST_FAILURES='>
                                  name: TEST_FAILURES
                                )
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ (${ Id.VSub_Name TEST_FAILURES) 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name TEST_FAILURES>
                                      var_name: TEST_FAILURES
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VTest_ColonPlus _>
                                          arg_word: {<'\n'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) (${ Id.VSub_Name TEST_ID) <'['> ($ Id.VSub_DollarName TEST_NUM) <']: test of \''> ($ Id.VSub_Number 1) 
                                    <'\' failed'>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'TEST_FAIL_COUNT='>
                              name: TEST_FAIL_COUNT
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                left: <Id.Left_DollarDParen '$(('>
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: {($ Id.VSub_DollarName TEST_FAIL_COUNT)}
                                    right: {<Id.Lit_Digits 1>}
                                  )
                                right: <Id.Right_DollarDParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<0>}
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <Id.VSub_DollarName '$fail'>
                  more_env: []
                  words: [{($ Id.VSub_DollarName fail)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <atf_fail>
                  more_env: []
                  words: [
                    {<atf_fail>}
                    {
                      (DQ <'Test['> ($ Id.VSub_DollarName TEST_NUM) <'] of \''> ($ Id.VSub_Number 1) 
                        <'\' failed'>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <results>
      name: results
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-z>} {(DQ (${ Id.VSub_Name TEST_ID))}]
                  redirects: []
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<0>}
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-z>} {(DQ (${ Id.VSub_Name TEST_FAILURES))}]
                  redirects: []
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<0>}
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'=========================================='>)}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'While testing \''> (${ Id.VSub_Name TEST_ID) <'\''>)}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <' - - - - - - - - - - - - - - - - -'>)}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ (${ Id.VSub_Name TEST_FAILURES))}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_fail>
              more_env: []
              words: [
                {<atf_fail>}
                {
                  (DQ <'Test '> (${ Id.VSub_Name TEST_ID) <': '> ($ Id.VSub_DollarName TEST_FAIL_COUNT) 
                    <' subtests (of '> ($ Id.VSub_DollarName TEST_NUM) <') failed - see stderr'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<do_simple>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <do_simple_head>
      name: do_simple_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Basic tests for here documents'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <do_simple_body>
      name: do_simple_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'y='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'y='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'y='> name:y)
                  op: assign_op.Equal
                  rhs: {<x>}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>} {(SQ <simple>)}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'IFS='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'IFS='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS)
                  op: assign_op.Equal
                  rhs: {(SQ <' \t'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) (SQ <text>) (${ Id.VSub_Name nl) <EOF> 
                  ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<\\EOF'>) ($ Id.VSub_DollarName nl) (SQ <text>) (${ Id.VSub_Name nl) 
                  <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) 
                  (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<\\EOF'>) 
                  ($ Id.VSub_DollarName nl) (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <'te${y}t'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<"EOF"'>) 
                  ($ Id.VSub_DollarName nl) (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <'te${y}t'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<'>) (DQ <'\'EOF\''>) 
                  ($ Id.VSub_DollarName nl) (SQ <'te${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <'te${y}t'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'cat <<EOF'> (${ Id.VSub_Name nl) <'te\'xt'> (${ Id.VSub_Name nl) <EOF> 
                    ($ Id.VSub_DollarName nl)
                  )
                }
                {(DQ <'te\'xt'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'cat <<'> <Id.Lit_BadBackslash '\\'> <EOF> (${ Id.VSub_Name nl) <'te\'xt'> 
                    (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl)
                  )
                }
                {(DQ <'te\'xt'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'cat <<\'EOF\''> (${ Id.VSub_Name nl) <'te\'xt'> (${ Id.VSub_Name nl) <EOF> 
                    ($ Id.VSub_DollarName nl)
                  )
                }
                {(DQ <'te\'xt'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'cat <<EOF'> (${ Id.VSub_Name nl) <te> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl)
                  )
                }
                {(SQ <'te"xt'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'cat <<'> <Id.Lit_BadBackslash '\\'> <EOF> (${ Id.VSub_Name nl) <te> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl)
                  )
                }
                {(SQ <'te"xt'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'cat <<\'EOF\''> (${ Id.VSub_Name nl) <te> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl)
                  )
                }
                {(SQ <'te"xt'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'cat <<\'EO\'F'> (${ Id.VSub_Name nl) <te> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) <xt> (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl)
                  )
                }
                {(SQ <'te"xt'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) 
                  (SQ <te>) (DQ <'\''>) (SQ <'${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <te>) (DQ <'\''>) (SQ <xt>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(DQ <'y='> (${ Id.VSub_Name y) <';'>) (SQ <'x=`cat <<EOF'>) ($ Id.VSub_DollarName nl) 
                  (SQ <te>) (DQ <'\'\''>) (SQ <'${y}t'>) (${ Id.VSub_Name nl) <EOF> ($ Id.VSub_DollarName nl) (SQ <'`; echo $x'>)
                }
                {(SQ <te>) (DQ <'\'\''>) (SQ <xt>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<EOF'>) 
                  (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <EOF> 
                    ($ Id.VSub_DollarName nl)
                  ) (SQ <'`; echo "$x"'>)
                }
                {(SQ <'\ttext'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<-EOF'>) 
                  (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <EOF> 
                    ($ Id.VSub_DollarName nl)
                  ) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<-EOF'>) 
                  (DQ (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) <'\tEOF'> 
                    ($ Id.VSub_DollarName nl)
                  ) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<-\\EOF'>) 
                  (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <'\tEOF'> 
                    ($ Id.VSub_DollarName nl)
                  ) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<- "EOF"'>) 
                  (DQ ($ Id.VSub_DollarName nl) <'\ttext'> (${ Id.VSub_Name nl) <EOF> 
                    ($ Id.VSub_DollarName nl)
                  ) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'x=`cat <<- '>) 
                  (DQ <'\'EOF\''> (${ Id.VSub_Name nl) <text> (${ Id.VSub_Name nl) <'\tEOF'> 
                    ($ Id.VSub_DollarName nl)
                  ) (SQ <'`; echo $x'>)
                }
                {(SQ <text>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <results>
              more_env: []
              words: [{<results>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<end_markers>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <end_markers_head>
      name: end_markers_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests for various end markers of here documents'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <end_markers_body>
      name: end_markers_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>} {(SQ <end_markers>)}]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [end]
              iterable: 
                (for_iter.Words
                  words: [
                    {<EOF>}
                    {<1>}
                    {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\!'> ch:'!')}
                    {(SQ <'$$$'>)}
                    {(DQ <'string '>)}
                    {<a> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') 
                      (word_part.EscapedLiteral
                        token: <Id.Lit_EscapedChar '\\ '>
                        ch: ' '
                      ) <a> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') 
                      (word_part.EscapedLiteral
                        token: <Id.Lit_EscapedChar '\\ '>
                        ch: ' '
                      ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\ '> ch:' ')
                    }
                    {(SQ <'&'>)}
                    {(SQ )}
                    {(SQ <' '>)}
                    {(SQ <'  '>)}
                    {<--STRING-->}
                    {<.>}
                    {(SQ <'~~~'>)}
                    {(SQ <')'>)}
                    {(SQ <'('>)}
                    {(SQ <'#'>)}
                    {(SQ <'()'>)}
                    {(SQ <'(\\)'>)}
                    {(SQ <'(\\/)'>)}
                    {(SQ <-->)}
                    {(SQ <'\\'>)}
                    {(SQ <'{'>)}
                    {(SQ <'}'>)}
                    {
                      <
VERYVERYVERYVERYLONGLONGLONGin_fact_absurdly_LONG_LONG_HERE_DOCUMENT_TERMINATING_MARKER_THAT_goes_On_forever_and_ever_and_ever...
                      >
                    }
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ (${ Id.VSub_Name end))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: 
                            (pat.Words
                              words: [
                                {(SQ )}
                                {<Id.Lit_Star '*'> <Id.Lit_LBracket '['> (SQ <' ()\\$&#*~'>) 
                                  <Id.Lit_RBracket ']'> <Id.Lit_Star '*'>
                                }
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat << '>) 
                                  (DQ (${ Id.VSub_Name end) (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {(SQ <text>)}
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <check>
                      more_env: []
                      words: [
                        {<check>}
                        {(SQ <'x=$(cat <<'>) 
                          (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                            (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                          ) (SQ <'); printf %s "$x"'>)
                        }
                        {(SQ <text>)}
                        {<0>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: 
                        (case_arg.Word
                          w: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name end>
                                  var_name: end
                                  prefix_op: <Id.VSub_Pound '#'>
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: (pat.Words words:[{<0>} {<1>}])
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name end>
                                      var_name: end
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_Percent '%'>
                                          arg_word: {<Id.Lit_Other '?'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {
                                  (DQ <'text '> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name end>
                                      var_name: end
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_Percent '%'>
                                          arg_word: {<Id.Lit_Other '?'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name end>
                                      var_name: end
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_Pound '#'>
                                          arg_word: {<Id.Lit_Other '?'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {
                                  (DQ <'text '> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name end>
                                      var_name: end
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_Pound '#'>
                                          arg_word: {<Id.Lit_Other '?'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name end>
                                      var_name: end
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_Percent '%'>
                                          arg_word: {<Id.Lit_Other '?'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) <'+'> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                                  ) (SQ <');printf %s "$x"'>)
                                }
                                {
                                  (DQ <'text '> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name end>
                                      var_name: end
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_Percent '%'>
                                          arg_word: {<Id.Lit_Other '?'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) <'+'>
                                  )
                                }
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <check>
                      more_env: []
                      words: [
                        {<check>}
                        {(SQ <'x=$(cat <<'>) 
                          (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                            (${ Id.VSub_Name nl) (${ Id.VSub_Name end) <x> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                          ) (SQ <'); printf %s "$x"'>)
                        }
                        {(DQ <'text '> (${ Id.VSub_Name end) <x>)}
                        {<0>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <check>
                      more_env: []
                      words: [
                        {<check>}
                        {(SQ <'x=$(cat <<'>) 
                          (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                            (${ Id.VSub_Name nl) <'!'> (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                          ) (SQ <'); printf %s "$x"'>)
                        }
                        {(DQ <'text !'> (${ Id.VSub_Name end))}
                        {<0>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <check>
                      more_env: []
                      words: [
                        {<check>}
                        {(SQ <'x=$(cat <<'>) 
                          (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                            (${ Id.VSub_Name nl) <' '> (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                          ) (SQ <'); printf %s "$x"'>)
                        }
                        {(DQ <'text  '> (${ Id.VSub_Name end))}
                        {<0>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <check>
                      more_env: []
                      words: [
                        {<check>}
                        {(SQ <'x=$(cat <<'>) 
                          (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                            (${ Id.VSub_Name nl) <'\t'> (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                          ) (SQ <'); printf %s "$x"'>)
                        }
                        {(DQ <'text \t'> (${ Id.VSub_Name end))}
                        {<0>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <check>
                      more_env: []
                      words: [
                        {<check>}
                        {(SQ <'x=$(cat <<'>) 
                          (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                            (${ Id.VSub_Name nl) (${ Id.VSub_Name end) <' '> (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name nl)
                          ) (SQ <'); printf %s "$x"'>)
                        }
                        {(DQ <'text '> (${ Id.VSub_Name end) <' '>)}
                        {<0>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: 
                        (case_arg.Word
                          w: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name end>
                                  var_name: end
                                  prefix_op: <Id.VSub_Pound '#'>
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: (pat.Words words:[{<0>}])
                          middle: <Id.Right_CasePat _>
                          action: []
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: (pat.Words words:[{<1>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) 
                                    (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {(DQ <'text '> (${ Id.VSub_Name end) (${ Id.VSub_Name end))}
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: (pat.Words words:[{<2-7>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'pfx='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'pfx='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pfx='> name:pfx)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name end>
                                          var_name: end
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op: <Id.VOp1_Percent '%'>
                                              arg_word: {<Id.Lit_Other '?'>}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name pfx) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) 
                                    (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {(DQ <'text '> (${ Id.VSub_Name end) (${ Id.VSub_Name pfx))}
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) (${ Id.VSub_Name pfx) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) 
                                    (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {(DQ <'text '> (${ Id.VSub_Name pfx) (${ Id.VSub_Name end))}
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Op_LParen _>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Sentence
                              child: 
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'pfx='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'pfx='>
                                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pfx='> name:pfx)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (BracedVarSub
                                            left: <Id.Left_DollarBrace '${'>
                                            token: <Id.VSub_Name end>
                                            var_name: end
                                            suffix_op: 
                                              (suffix_op.Unary
                                                op: <Id.VOp1_Percent '%'>
                                                arg_word: 
                                                  {<Id.Lit_Other '?'> <Id.Lit_Other '?'> 
                                                    <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'>
                                                  }
                                              )
                                            right: <Id.Right_DollarBrace '}'>
                                          )
                                        }
                                    )
                                  ]
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'sfx='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'sfx='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sfx='> name:sfx)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Name end>
                                        var_name: end
                                        suffix_op: 
                                          (suffix_op.Unary
                                            op: <Id.VOp1_Pound '#'>
                                            arg_word: 
                                              {<Id.Lit_Other '?'> <Id.Lit_Other '?'> 
                                                <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'> <Id.Lit_Other '?'>
                                              }
                                          )
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) (${ Id.VSub_Name end) (${ Id.VSub_Name sfx) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) 
                                    (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {(DQ <'text '> (${ Id.VSub_Name end) (${ Id.VSub_Name sfx))}
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) (${ Id.VSub_Name pfx) (${ Id.VSub_Name end) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) 
                                    (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {(DQ <'text '> (${ Id.VSub_Name pfx) (${ Id.VSub_Name end))}
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <check>
                              more_env: []
                              words: [
                                {<check>}
                                {(SQ <'x=$(cat <<'>) 
                                  (DQ <'\''> (${ Id.VSub_Name end) <'\''> (${ Id.VSub_Name nl) <text> 
                                    (${ Id.VSub_Name nl) (${ Id.VSub_Name pfx) (${ Id.VSub_Name sfx) (${ Id.VSub_Name nl) (${ Id.VSub_Name end) 
                                    (${ Id.VSub_Name nl)
                                  ) (SQ <'); printf %s "$x"'>)
                                }
                                {(DQ <'text '> (${ Id.VSub_Name pfx) (${ Id.VSub_Name sfx))}
                                {<0>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <results>
              more_env: []
              words: [{<results>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<incomplete>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <incomplete_head>
      name: incomplete_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Basic tests for incomplete here documents'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <incomplete_body>
      name: incomplete_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>} {<incomplete>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<EOF'>)} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<- EOF'>)} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<\\EOF'>)} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<- \\EOF'>)} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<EOF'>) (DQ (${ Id.VSub_Name nl))} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<- EOF'>) (DQ (${ Id.VSub_Name nl))} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<'>) (DQ <'\'EOF\''> (${ Id.VSub_Name nl))} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(SQ <'cat <<- "EOF"'>) (DQ (${ Id.VSub_Name nl))} {(SQ )} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << EOF'>) (DQ (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))}
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat <<-EOF'>) (DQ (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))}
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << '>) (DQ <'\'EOF\''> (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))}
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat <<-"EOF"'>) (DQ (${ Id.VSub_Name nl) (${ Id.VSub_Name nl))}
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line 1'>) (DQ (${ Id.VSub_Name nl))}
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat <<-EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\tline 1'>) 
                  (DQ (${ Id.VSub_Name nl))
                }
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line 1'>) (DQ (${ Id.VSub_Name nl)) 
                  (SQ <'\tline 2'>) (DQ (${ Id.VSub_Name nl))
                }
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat <<-EOF'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\tline 1'>) 
                  (DQ (${ Id.VSub_Name nl)) (SQ <'line 2'>) (DQ (${ Id.VSub_Name nl))
                }
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << EOF'>) 
                  (DQ (${ Id.VSub_Name nl) <'line 1'> (${ Id.VSub_Name nl) (${ Id.VSub_Name nl) <line3> 
                    (${ Id.VSub_Name nl) (${ Id.VSub_Name nl) <'5!'> (${ Id.VSub_Name nl)
                  )
                }
                {(SQ )}
                {<2>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <results>
              more_env: []
              words: [{<results>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<lineends>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <lineends_head>
      name: lineends_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests for line endings in here documents'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <lineends_body>
      name: lineends_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>} {<lineends>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << \\echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <'\\'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat <<  echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <echo>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\\\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <'\\'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=3; cat << ec\\ho'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$X\\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <'$X\\'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=3; cat <<  echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$X'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <3>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=3; cat <<  echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$X\\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ )}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=3; cat <<  echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'${X}\\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <3echo>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=3; cat <<  echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\$X\\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <'$Xecho'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=3; cat <<  echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'\\\\$X \\'>) 
                  (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <'\\3 echo'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << "echo"'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line1\\'>) 
                  (DQ (${ Id.VSub_Name nl)) (SQ <'line2\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <'line1\\ line2\\'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << echo'>) (DQ (${ Id.VSub_Name nl)) (SQ <'line1\\'>) 
                  (DQ (${ Id.VSub_Name nl)) (SQ <'line2\\'>) (DQ (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl) <echo> (${ Id.VSub_Name nl))
                }
                {(SQ <line1line2echo>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <results>
              more_env: []
              words: [{<results>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<multiple>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <multiple_head>
      name: multiple_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests for multiple here documents on one cmd line'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <multiple_body>
      name: multiple_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>} {<multiple>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'(cat ; cat <&3) <<EOF0 3<<EOF3'> (${ Id.VSub_Name nl) <STDIN> 
                    (${ Id.VSub_Name nl) <EOF0> (${ Id.VSub_Name nl) <-3-> (${ Id.VSub_Name nl) <EOF3> (${ Id.VSub_Name nl)
                  )
                }
                {(SQ <'STDIN -3-'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'(read line; echo '> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <line> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) <'; cat <<EOF1; echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\$'>
                      ch: '$'
                    ) <line> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <') <<EOF2\n'> <'The File\n'> 
                    <'EOF1\n'> <'The Line\n'> <'EOF2\n'>
                  )
                }
                {(SQ <'The Line The File The Line'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (DQ <'(read line; echo '> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <line> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\"'>
                      ch: '"'
                    ) <'; cat <<EOF; echo '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\$'>
                      ch: '$'
                    ) <line> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <') <<EOF\n'> <'The File\n'> 
                    <'EOF\n'> <'The Line\n'> <'EOF\n'>
                  )
                }
                {(SQ <'The Line The File The Line'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(DQ <'V=1; W=2; cat <<-1; cat <<2; cat <<- 3; cat <<\'4\';'>) 
                  (SQ <' cat <<\\5\n'> <'\t\t$V\n'> <'\t\t$W\n'> <'\t\t3\n'> <'\t4\n'> <'\t5\n'> 
                    <'\t\t\t1\n'> <'2\n'> <'\t5\n'> <'\t\t\t\t\t4*$W+\\$V\n'> <'\t3\n'> <'$W\n'> <'1\n'> <'2\n'> <'3\n'> <'4\n'> <'7+$V\n'> 
                    <'$W+6\n'> <'5\n'>
                  )
                }
                {(SQ <'1 2 3 4 5 5 4*2+$V $W 1 2 3 7+$V $W+6'>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <results>
              more_env: []
              words: [{<results>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<nested>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <nested_head>
      name: nested_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests for nested here documents for one cmd'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <nested_body>
      name: nested_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>} {<nested>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat << EOF1'>) (DQ (${ Id.VSub_Name nl)) (SQ <'$(cat << EOF2'>) 
                  (DQ (${ Id.VSub_Name nl) <LINE> (${ Id.VSub_Name nl) <EOF2> (${ Id.VSub_Name nl)) (SQ <')'>) (DQ (${ Id.VSub_Name nl) <EOF1> (${ Id.VSub_Name nl))
                }
                {(SQ <LINE>)}
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'L='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'L='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L)
                  op: assign_op.Equal
                  rhs: 
                    {(SQ <'cat << EOF1'>) (DQ (${ Id.VSub_Name nl)) (SQ <'LINE1$(cat << EOF2'>) 
                      (DQ (${ Id.VSub_Name nl))
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'L='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'L='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name L)) (SQ <'LINE2$(cat << EOF3'>) (DQ (${ Id.VSub_Name nl))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'L='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'L='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name L)) (SQ <'LINE3$(cat << EOF4'>) (DQ (${ Id.VSub_Name nl))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'L='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'L='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name L)) (SQ <'LINE4$(cat << EOF5'>) (DQ (${ Id.VSub_Name nl))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'L='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'L='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ (${ Id.VSub_Name L) <LINE5> (${ Id.VSub_Name nl) <EOF5> (${ Id.VSub_Name nl) 
                        <')4'> (${ Id.VSub_Name nl) <EOF4> (${ Id.VSub_Name nl) <')3'> (${ Id.VSub_Name nl)
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'L='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'L='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'L='> name:L)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ (${ Id.VSub_Name L) <EOF3> (${ Id.VSub_Name nl) <')2'> (${ Id.VSub_Name nl) 
                        <EOF2> (${ Id.VSub_Name nl) <')1'> (${ Id.VSub_Name nl) <EOF1> (${ Id.VSub_Name nl)
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [{<check>} {(DQ (${ Id.VSub_Name L))} {(SQ <LINE1LINE2LINE3LINE4LINE54321>)} {<0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <results>
              more_env: []
              words: [{<results>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<quoting>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <quoting_head>
      name: quoting_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [{<atf_set>} {(DQ <descr>)} {(DQ <'Tests for use of quotes inside here documents'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <quoting_body>
      name: quoting_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>} {<quoting>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=!; cat <<- E\\0F\n'> <'\t\t<'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\\\$X\\$X  "'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <'" \\\\>\n'> <'\tE0F\n'> <'\t'>)
                }
                {(SQ <'<'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') 
                  (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\\\$X\\$X  "'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <'" \\\\>'>)
                }
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'X=!; cat <<- E0F\n'> <'\t\t<'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\\\$X\\$X  "'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <'" \\\\>\n'> <'\tE0F\n'> <'\t'>)
                }
                {(SQ <'<'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') 
                  (SQ <'"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' \\!$X  "'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <'" \\>'>)
                }
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {(SQ <'cat <<- END\n'> <'\t\t$( echo "'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <'" ) $( echo '>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <'"'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <' ) $( echo \\\\ )\n'> <'\tEND\n'> <'\t'>)
                }
                {
                  (DQ <'\' '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' '> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\\\'>
                      ch: '\\'
                    )
                  )
                }
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check>
              more_env: []
              words: [
                {<check>}
                {
                  (SQ <'X=12345; Y="string1 line1?-line2"; Z=; unset W; cat <<-EOF\n'> 
                    <'\t\t${#X}${Z:-${Y}}${W+junk}${Y%%l*}${Y#*\\?}\n'> <'\t\t"$Z"'>
                  ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <'$W'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (SQ <' ${Y%" "*} $(( X + 54321 ))\n'> <'\tEOF\n'> <'\t'>)
                }
                {(SQ <'5string1 line1?-line2string1 -line2 ""'>) 
                  (word_part.EscapedLiteral
                    token: <Id.Lit_EscapedChar '\\\''>
                    ch: '\''
                  ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''> ch:'\'') (SQ <' string1 66666'>)
                }
                {<0>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <results>
              more_env: []
              words: [{<results>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<side_effects>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <side_effects_head>
      name: side_effects_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests how side effects in here documents are handled'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <side_effects_body>
      name: side_effects_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'2\\n1\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<-c>}
                {
                  (SQ <'\n'> <'\t\tunset X\n'> <'\t\tcat <<-EOF\n'> <'\t\t${X=2}\n'> <'\t\tEOF\n'> 
                    <'\t\techo "${X-1}"\n'> <'\t\t'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <atf_test_case>
      more_env: []
      words: [{<atf_test_case>} {<vicious>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <vicious_head>
      name: vicious_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_set>
              more_env: []
              words: [
                {<atf_set>}
                {(DQ <descr>)}
                {(DQ <'Tests for obscure and obnoxious uses of here docs'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <vicious_body>
      name: vicious_body
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <reset>
              more_env: []
              words: [{<reset>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLessDash '<<-'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: 
                        {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <ND_SCRIPT>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'cat <<ONE && cat \\\n'>
                        <'<<TWO\n'>
                        <'a\n'>
                        <'ONE\n'>
                        <'b\n'>
                        <'TWO\n'>
                      ]
                    )
                )
                (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<script>})
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<inline> <Id.Lit_Colon ':'> (SQ <'a\\nb\\n'>)}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<script>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLessDash '<<-'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: 
                        {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <ND_SCRIPT>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'prefix() { sed -e "s/^/$1:/"; }\n'>
                        <'DASH_CODE() { :; }\n'>
                        <'\n'>
                        <'prefix A <<XXX && echo "$(prefix B <<XXX\n'>
                        <'echo line 1\n'>
                        <'XXX\n'>
                        <'echo line 2)" && prefix DASH_CODE <<DASH_CODE\n'>
                        <'echo line 3\n'>
                        <'XXX\n'>
                        <'echo line 4)"\n'>
                        <'echo line 5\n'>
                        <'DASH_CODE\n'>
                      ]
                    )
                )
                (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<script>})
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_check>
              more_env: []
              words: [
                {<atf_check>}
                {<-s>}
                {<Id.ControlFlow_Exit exit> <Id.Lit_Colon ':'> <0>}
                {<-o>}
                {<ignore>}
                {<-e>}
                {<empty>}
                {(${ Id.VSub_Name TEST_SH)}
                {<script>}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <atf_init_test_cases>
      name: atf_init_test_cases
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<do_simple>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<end_markers>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<incomplete>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<lineends>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<multiple>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<nested>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<quoting>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<side_effects>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <atf_add_test_case>
              more_env: []
              words: [{<atf_add_test_case>} {<vicious>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
  ]
)