(command.CommandList
  children: [
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
          {
            (DQ 
              (braced_var_sub
                token: <Id.VSub_Name SHUNIT_VERSION>
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
              )
            )
          } {<Id.Lit_RBracket ']'>}
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_VERSION)
          op: assign_op.Equal
          rhs: {(SQ <2.1.7pre>)}
          spids: [83]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_TRUE)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [92]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_FALSE)
          op: assign_op.Equal
          rhs: {<1>}
          spids: [95]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_ERROR)
          op: assign_op.Equal
          rhs: {<2>}
          spids: [98]
        )
      ]
    )
    (command.ShFunction
      name: _shunit_warn
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{<echo>} {(DQ <'shunit2:WARN '> ($ Id.VSub_Star '$*'))}]
                  redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShFunction
      name: _shunit_error
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{<echo>} {(DQ <'shunit2:ERROR '> ($ Id.VSub_Star '$*'))}]
                  redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShFunction
      name: _shunit_fatal
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [{<echo>} {(DQ <'shunit2:FATAL '> ($ Id.VSub_Star '$*'))}]
                  redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: <Id.ControlFlow_Exit exit>
                  arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_UNAME_S)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                command_list: (command.CommandList children:[(C {<uname>} {<-s>})])
              )
            }
          spids: [173]
        )
      ]
    )
    (command.Case
      to_match: {(DQ (${ Id.VSub_Name __SHUNIT_UNAME_S))}
      arms: [
        (case_arm
          pat_list: [{<BSD>}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__SHUNIT_CMD_EXPR)
                  op: assign_op.Equal
                  rhs: {(SQ <gexpr>)}
                  spids: [196]
                )
              ]
            )
          ]
          spids: [193 194 201 -1]
        )
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__SHUNIT_CMD_EXPR)
                  op: assign_op.Equal
                  rhs: {(SQ <expr>)}
                  spids: [207]
                )
              ]
            )
          ]
          spids: [204 205 212 -1]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_CMD_ECHO_ESC)
          op: assign_op.Equal
          rhs: {(SQ <'echo -e'>)}
          spids: [217]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
          {
            (DQ 
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                command_list: (command.CommandList children:[(C {<echo>} {<-e>} {<test>})])
              )
            )
          } {<Id.Lit_Equals '='>} {(SQ <'-e test'>)} {<Id.Lit_RBracket ']'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:__SHUNIT_CMD_ECHO_ESC)
              op: assign_op.Equal
              rhs: {(SQ <echo>)}
              spids: [249]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_CMD_EXPR)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name SHUNIT_CMD_EXPR>
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {(${ Id.VSub_Name __SHUNIT_CMD_EXPR)}
                  )
              )
            }
          spids: [258]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_STRICT)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name SHUNIT_STRICT>
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                  )
              )
            }
          spids: [271]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_COLOR)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name SHUNIT_COLOR>
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{<auto>})
              )
            }
          spids: [284]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_Name ZSH_VERSION>
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                      )
                    )
                  } {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Pipeline
              children: [
                (C {<setopt>})
                (command.Simple
                  words: [{<grep>} {(DQ <'^shwordsplit'> <Id.Lit_Other '$'>)}]
                  redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/null>})]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_QMark '$?')} {<-ne>} {(${ Id.VSub_Name SHUNIT_TRUE)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_fatal>} 
                      {(SQ <'zsh shwordsplit option is required for proper operation'>)}
                    )
                  ]
                  spids: [328 343]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-z>} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: <Id.VSub_Name SHUNIT_PARENT>
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_fatal>} 
                      {
                        (DQ <'zsh does not pass '> 
                          (word_part.EscapedLiteral
                            token: <Id.Lit_EscapedChar '\\$'>
                          ) <'0 through properly. please declare '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                          <'SHUNIT_PARENT='> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <0> 
                          (word_part.EscapedLiteral
                            token: <Id.Lit_EscapedChar '\\"'>
                          ) <' before calling shUnit2'>
                        )
                      }
                    )
                  ]
                  spids: [356 372]
                )
              ]
            )
          ]
          spids: [295 311]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_MODE_SOURCED)
          op: assign_op.Equal
          rhs: {(SQ <sourced>)}
          spids: [406]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_MODE_STANDALONE)
          op: assign_op.Equal
          rhs: {(SQ <standalone>)}
          spids: [411]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_PARENT)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name SHUNIT_PARENT>
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {($ Id.VSub_Number '$0')}
                  )
              )
            }
          spids: [416]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_ANSI_NONE)
          op: assign_op.Equal
          rhs: {(SQ <'\\033[0m'>)}
          spids: [427]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_ANSI_RED)
          op: assign_op.Equal
          rhs: {(SQ <'\\033[1;31m'>)}
          spids: [432]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_ANSI_GREEN)
          op: assign_op.Equal
          rhs: {(SQ <'\\033[1;32m'>)}
          spids: [437]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_ANSI_YELLOW)
          op: assign_op.Equal
          rhs: {(SQ <'\\033[1;33m'>)}
          spids: [442]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__SHUNIT_ANSI_CYAN)
          op: assign_op.Equal
          rhs: {(SQ <'\\033[1;36m'>)}
          spids: [447]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_constants)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {<Id.KW_Set set>})
                          (C {<grep>} {(SQ <'^__SHUNIT_'>)})
                          (C {<cut>} {<-d> <Id.Lit_Equals '='>} {<-f1>})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [456]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.Pipeline
          children: [
            (C {<echo>} {(DQ (${ Id.VSub_Name __shunit_constants))})
            (command.Simple
              words: [{<grep>} {(SQ <'^Binary file'>)}]
              redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/null>})]
            )
          ]
          negated: F
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:__shunit_constants)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: <Id.Left_Backtick '`'>
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Pipeline
                            children: [
                              (C {<Id.KW_Set set>})
                              (C {<grep>} {<-a>} {(SQ <'^__SHUNIT_'>)})
                              (C {<cut>} {<-d> <Id.Lit_Equals '='>} {<-f1>})
                            ]
                            negated: F
                          )
                        ]
                      )
                  )
                }
              spids: [500]
            )
          ]
        )
      ]
    )
    (command.ForEach
      iter_name: __shunit_const
      iter_words: [{(${ Id.VSub_Name __shunit_constants)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-z>} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: <Id.VSub_Name ZSH_VERSION>
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<readonly>} {(DQ (${ Id.VSub_Name __shunit_const))})]
                  spids: [538 554]
                )
              ]
              else_action: [
                (command.Case
                  to_match: {(${ Id.VSub_Name ZSH_VERSION)}
                  arms: [
                    (case_arm
                      pat_list: [
                        {<Id.Lit_LBracket '['> <123> <Id.Lit_RBracket ']'> <.> <Id.Lit_Star '*'>}
                      ]
                      action: [(C {<readonly>} {(DQ (${ Id.VSub_Name __shunit_const))})]
                      spids: [578 583 593 -1]
                    )
                    (case_arm
                      pat_list: [{<Id.Lit_Star '*'>}]
                      action: [(C {<readonly>} {<-g>} {(DQ (${ Id.VSub_Name __shunit_const))})]
                      spids: [596 597 -1 613]
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (C {<unset>} {<__shunit_const>} {<__shunit_constants>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_lineno)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [640]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_mode)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name __SHUNIT_MODE_SOURCED)}
          spids: [647]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_reportGenerated)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
          spids: [655]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_script)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [663]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_skip)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
          spids: [670]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_suite)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [678]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_ansi_none)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [689]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_ansi_red)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [693]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_ansi_green)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [697]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_ansi_yellow)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [701]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_ansi_cyan)
          op: assign_op.Equal
          rhs: {(SQ )}
          spids: [705]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_testSuccess)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
          spids: [713]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_testsTotal)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [718]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_testsPassed)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [721]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_testsFailed)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [724]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_assertsTotal)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [731]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_assertsPassed)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [734]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_assertsFailed)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [737]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_assertsSkipped)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [740]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_SHUNIT_LINENO_)
          op: assign_op.Equal
          rhs: 
            {
              (SQ 
                <
'eval __shunit_lineno=""; if \\[ "${1:-}" = "--lineno" ]; then \\[ -n "$2" ] && __shunit_lineno="[$2] "; shift 2; fi'
                >
              )
            }
          spids: [757]
        )
      ]
    )
    (command.ShFunction
      name: assertEquals
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<2>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertEquals() requires two or three arguments; '> 
                          ($ Id.VSub_Pound '$#') <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [813 834]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [868]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [890]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [874 887]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_expected_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [905]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_actual_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [909]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                  spids: [914]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(DQ (${ Id.VSub_Name shunit_expected_))} {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name shunit_actual_))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<_shunit_assertPass>})]
                  spids: [920 941]
                )
              ]
              else_action: [
                (C {<failNotEquals>} {(DQ (${ Id.VSub_Name shunit_message_))} 
                  {(DQ (${ Id.VSub_Name shunit_expected_))} {(DQ (${ Id.VSub_Name shunit_actual_))}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:shunit_return)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                      spids: [971]
                    )
                  ]
                )
              ]
            )
            (C {<unset>} {<shunit_message_>} {<shunit_expected_>} {<shunit_actual_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_EQUALS_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertEquals --lineno "${LINENO:-}"'>)}
          spids: [1001]
        )
      ]
    )
    (command.ShFunction
      name: assertNotEquals
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<2>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertNotEquals() requires two or three arguments; '> 
                          ($ Id.VSub_Pound '$#') <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [1047 1068]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [1102]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [1124]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [1108 1121]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_expected_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1139]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_actual_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [1143]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                  spids: [1148]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(DQ (${ Id.VSub_Name shunit_expected_))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name shunit_actual_))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<_shunit_assertPass>})]
                  spids: [1154 1176]
                )
              ]
              else_action: [
                (C {<failSame>} {(DQ (${ Id.VSub_Name shunit_message_))} {(DQ ($ Id.VSub_At '$@'))})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:shunit_return)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                      spids: [1198]
                    )
                  ]
                )
              ]
            )
            (C {<unset>} {<shunit_message_>} {<shunit_expected_>} {<shunit_actual_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_NOT_EQUALS_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertNotEquals --lineno "${LINENO:-}"'>)}
          spids: [1228]
        )
      ]
    )
    (command.ShFunction
      name: assertNull
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<1>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertNull() requires one or two arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [1271 1292]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [1326]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [1348]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [1332 1345]
                )
              ]
            )
            (C {<assertTrue>} {(DQ (${ Id.VSub_Name shunit_message_))} 
              {(DQ <"[ -z '"> ($ Id.VSub_Number '$1') <"' ]">)}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [1378]
                )
              ]
            )
            (C {<unset>} {<shunit_message_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_NULL_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertNull --lineno "${LINENO:-}"'>)}
          spids: [1399]
        )
      ]
    )
    (command.ShFunction
      name: assertNotNull
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-gt>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertNotNull() requires one or two arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [1442 1455]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [1492]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [1514]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [1498 1511]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_actual_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<_shunit_escapeCharactersInString>} 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: <Id.VSub_Number 1>
                                      suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                                    )
                                  )
                                }
                              )
                            ]
                          )
                      )
                    }
                  spids: [1529]
                )
              ]
            )
            (C {<test>} {<-n>} {(DQ (${ Id.VSub_Name shunit_actual_))})
            (C {<assertTrue>} {(DQ (${ Id.VSub_Name shunit_message_))} {($ Id.VSub_QMark '$?')})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [1566]
                )
              ]
            )
            (C {<unset>} {<shunit_actual_>} {<shunit_message_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_NOT_NULL_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertNotNull --lineno "${LINENO:-}"'>)}
          spids: [1589]
        )
      ]
    )
    (command.ShFunction
      name: assertSame
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<2>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertSame() requires two or three arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [1635 1656]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [1690]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [1712]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [1696 1709]
                )
              ]
            )
            (C {<assertEquals>} {(DQ (${ Id.VSub_Name shunit_message_))} {(DQ ($ Id.VSub_Number '$1'))} 
              {(DQ ($ Id.VSub_Number '$2'))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [1744]
                )
              ]
            )
            (C {<unset>} {<shunit_message_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_SAME_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertSame --lineno "${LINENO:-}"'>)}
          spids: [1765]
        )
      ]
    )
    (command.ShFunction
      name: assertNotSame
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<2>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertNotSame() requires two or three arguments; '> 
                          ($ Id.VSub_Pound '$#') <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [1811 1832]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [1866]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name shunit_message_>
                                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                                ) ($ Id.VSub_Number '$1')
                              )
                            }
                          spids: [1888]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [1872 1885]
                )
              ]
            )
            (C {<assertNotEquals>} {(DQ (${ Id.VSub_Name shunit_message_))} 
              {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [1921]
                )
              ]
            )
            (C {<unset>} {<shunit_message_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_NOT_SAME_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertNotSame --lineno "${LINENO:-}"'>)}
          spids: [1942]
        )
      ]
    )
    (command.ShFunction
      name: assertTrue
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<1>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertTrue() takes one or two arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [2027 2048]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [2082]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [2104]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [2088 2101]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_condition_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2119]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_match_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(DQ (${ Id.VSub_Name shunit_condition_))} 
                                {<Id.Lit_Other ':'>} {(SQ <'\\([0-9]*\\)'>)}
                              )
                            ]
                          )
                      )
                    }
                  spids: [2128]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                  spids: [2152]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-z>} 
                          {(DQ (${ Id.VSub_Name shunit_condition_))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                          spids: [2180]
                        )
                      ]
                    )
                  ]
                  spids: [2158 2173]
                )
                (if_arm
                  cond: [
                    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                      {(DQ (${ Id.VSub_Name shunit_match_))} {<-a>} {(DQ (${ Id.VSub_Name shunit_condition_))} {<Id.Lit_Equals '='>} 
                      {(DQ (${ Id.VSub_Name shunit_match_))} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(DQ (${ Id.VSub_Name shunit_condition_))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:shunit_return)
                              op: assign_op.Equal
                              rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                              spids: [2240]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [2186 2217]
                )
              ]
              else_action: [
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [(C {<eval>} {(DQ (${ Id.VSub_Name shunit_condition_))})]
                    )
                  redirects: [
                    (redir.Redir
                      op: <Id.Redir_Great '>'>
                      fd: -1
                      arg_word: {</dev/null>}
                    )
                    (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                      {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                          spids: [2284]
                        )
                      ]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(${ Id.VSub_Name shunit_return)} {<-eq>} {(${ Id.VSub_Name SHUNIT_TRUE)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<_shunit_assertPass>})]
                  spids: [2298 2315]
                )
              ]
              else_action: [(C {<_shunit_assertFail>} {(DQ (${ Id.VSub_Name shunit_message_))})]
            )
            (C {<unset>} {<shunit_message_>} {<shunit_condition_>} {<shunit_match_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_TRUE_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertTrue --lineno "${LINENO:-}"'>)}
          spids: [2357]
        )
      ]
    )
    (command.ShFunction
      name: assertFalse
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<1>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'assertFalse() quires one or two arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [2442 2463]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [2497]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [2519]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [2503 2516]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_condition_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [2534]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_match_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(DQ (${ Id.VSub_Name shunit_condition_))} 
                                {<Id.Lit_Other ':'>} {(SQ <'\\([0-9]*\\)'>)}
                              )
                            ]
                          )
                      )
                    }
                  spids: [2543]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                  spids: [2567]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-z>} 
                          {(DQ (${ Id.VSub_Name shunit_condition_))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                          spids: [2595]
                        )
                      ]
                    )
                  ]
                  spids: [2573 2588]
                )
                (if_arm
                  cond: [
                    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                      {(DQ (${ Id.VSub_Name shunit_match_))} {<-a>} {(DQ (${ Id.VSub_Name shunit_condition_))} {<Id.Lit_Equals '='>} 
                      {(DQ (${ Id.VSub_Name shunit_match_))} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(DQ (${ Id.VSub_Name shunit_condition_))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:shunit_return)
                              op: assign_op.Equal
                              rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                              spids: [2655]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [2601 2632]
                )
              ]
              else_action: [
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [(C {<eval>} {(DQ (${ Id.VSub_Name shunit_condition_))})]
                    )
                  redirects: [
                    (redir.Redir
                      op: <Id.Redir_Great '>'>
                      fd: -1
                      arg_word: {</dev/null>}
                    )
                    (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                      {($ Id.VSub_QMark '$?')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_return)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                          spids: [2699]
                        )
                      ]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(DQ (${ Id.VSub_Name shunit_return))} {<-eq>} {(DQ (${ Id.VSub_Name SHUNIT_TRUE))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<_shunit_assertPass>})]
                  spids: [2713 2734]
                )
              ]
              else_action: [(C {<_shunit_assertFail>} {(DQ (${ Id.VSub_Name shunit_message_))})]
            )
            (C {<unset>} {<shunit_message_>} {<shunit_condition_>} {<shunit_match_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(DQ (${ Id.VSub_Name shunit_return))}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_ASSERT_FALSE_)
          op: assign_op.Equal
          rhs: {(SQ <'eval assertFalse --lineno "${LINENO:-}"'>)}
          spids: [2778]
        )
      ]
    )
    (command.ShFunction
      name: fail
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-gt>} {<1>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'fail() requires zero or one arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [2828 2841]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [2875]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [2897]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [2881 2894]
                )
              ]
            )
            (C {<_shunit_assertFail>} {(DQ (${ Id.VSub_Name shunit_message_))})
            (C {<unset>} {<shunit_message_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name SHUNIT_FALSE)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_FAIL_)
          op: assign_op.Equal
          rhs: {(SQ <'eval fail --lineno "${LINENO:-}"'>)}
          spids: [2939]
        )
      ]
    )
    (command.ShFunction
      name: failNotEquals
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<2>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'failNotEquals() requires one or two arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [2985 3006]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [3040]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [3062]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [3046 3059]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_expected_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [3077]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_actual_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [3081]
                )
              ]
            )
            (C {<_shunit_assertFail>} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name shunit_message_>
                    suffix_op: 
                      (suffix_op.Unary
                        op_id: Id.VTest_ColonPlus
                        arg_word: {(${ Id.VSub_Name shunit_message_) <' '>}
                      )
                  ) <'expected:<'> (${ Id.VSub_Name shunit_expected_) <'> but was:<'> (${ Id.VSub_Name shunit_actual_) <'>'>
                )
              }
            )
            (C {<unset>} {<shunit_message_>} {<shunit_expected_>} {<shunit_actual_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name SHUNIT_FALSE)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_FAIL_NOT_EQUALS_)
          op: assign_op.Equal
          rhs: {(SQ <'eval failNotEquals --lineno "${LINENO:-}"'>)}
          spids: [3130]
        )
      ]
    )
    (command.ShFunction
      name: failSame
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<2>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'failSame() requires two or three arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [3176 3197]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [3231]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [3253]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [3237 3250]
                )
              ]
            )
            (C {<_shunit_assertFail>} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name shunit_message_>
                    suffix_op: 
                      (suffix_op.Unary
                        op_id: Id.VTest_ColonPlus
                        arg_word: {(${ Id.VSub_Name shunit_message_) <' '>}
                      )
                  ) <'expected not same'>
                )
              }
            )
            (C {<unset>} {<shunit_message_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name SHUNIT_FALSE)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_FAIL_SAME_)
          op: assign_op.Equal
          rhs: {(SQ <'eval failSame --lineno "${LINENO:-}"'>)}
          spids: [3301]
        )
      ]
    )
    (command.ShFunction
      name: failNotSame
      body: 
        (command.BraceGroup
          children: [
            (C {(${ Id.VSub_Name _SHUNIT_LINENO_)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-lt>} {<2>} {<-o>} {($ Id.VSub_Pound '$#')} {<-gt>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_error>} 
                      {
                        (DQ <'failNotEquals() requires one or two arguments; '> ($ Id.VSub_Pound '$#') 
                          <' given'>
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [3353 3374]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<_shunit_shouldSkip>})
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_TRUE)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_message_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __shunit_lineno)}
                  spids: [3408]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:shunit_message_)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name shunit_message_) ($ Id.VSub_Number '$1'))}
                          spids: [3430]
                        )
                      ]
                    )
                    (C {<shift>})
                  ]
                  spids: [3414 3427]
                )
              ]
            )
            (C {<failNotEquals>} {(DQ (${ Id.VSub_Name shunit_message_))} {(DQ ($ Id.VSub_Number '$1'))} 
              {(DQ ($ Id.VSub_Number '$2'))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_return)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [3462]
                )
              ]
            )
            (C {<unset>} {<shunit_message_>})
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {(${ Id.VSub_Name shunit_return)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_FAIL_NOT_SAME_)
          op: assign_op.Equal
          rhs: {(SQ <'eval failNotSame --lineno "${LINENO:-}"'>)}
          spids: [3483]
        )
      ]
    )
    (command.ShFunction
      name: startSkipping
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:__shunit_skip)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                      spids: [3529]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShFunction
      name: endSkipping
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:__shunit_skip)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                      spids: [3556]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShFunction
      name: isSkipping
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name __shunit_skip)}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShFunction
      name: suite_addTest
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_func_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Number 1>
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                      )
                    }
                  spids: [3686]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_suite)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: <Id.VSub_Name __shunit_suite>
                          suffix_op: 
                            (suffix_op.Unary
                              op_id: Id.VTest_ColonPlus
                              arg_word: {(${ Id.VSub_Name __shunit_suite) <' '>}
                            )
                        ) (${ Id.VSub_Name shunit_func_)
                      )
                    }
                  spids: [3694]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_testsTotal)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(${ Id.VSub_Name __shunit_testsTotal)} {<Id.Lit_Other '+'>} 
                                {<1>}
                              )
                            ]
                          )
                      )
                    }
                  spids: [3710]
                )
              ]
            )
            (C {<unset>} {<shunit_func_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_mktempDir
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.Simple
                          words: [{<exec>} {<mktemp>} {<-dqt>} {<shunit.XXXXXX>}]
                          redirects: [
                            (redir.Redir
                              op: <Id.Redir_Great '2>'>
                              fd: 2
                              arg_word: {</dev/null>}
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.ControlFlow token:<Id.ControlFlow_Return return>)
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-r>} 
                          {(SQ </dev/urandom>)} {<-a>} {<-x>} {(SQ </usr/bin/od>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_random_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (command.Simple
                                            words: [{</usr/bin/od>} {<-vAn>} {<-N4>} {<-tx4>}]
                                            redirects: [
                                              (redir.Redir
                                                op: <Id.Redir_Less '<'>
                                                fd: -1
                                                arg_word: {</dev/urandom>}
                                              )
                                            ]
                                          )
                                          (C {<sed>} {(SQ <'s/^[^0-9a-f]*//'>)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [3968]
                        )
                      ]
                    )
                  ]
                  spids: [3944 3965]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: <Id.VSub_Name RANDOM>
                                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                              )
                            )
                          } {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_random_)
                          op: assign_op.Equal
                          rhs: 
                            {(${ Id.VSub_Name RANDOM) (${ Id.VSub_Name RANDOM) 
                              (${ Id.VSub_Name RANDOM) ($ Id.VSub_Dollar '$$')
                            }
                          spids: [4020]
                        )
                      ]
                    )
                  ]
                  spids: [3997 4013]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_date_)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: <Id.Left_Backtick '`'>
                            command_list: 
                              (command.CommandList
                                children: [(C {<date>} {(SQ <'+%Y%m%d%H%M%S'>)})]
                              )
                          )
                        }
                      spids: [4040]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_random_)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: <Id.Left_Backtick '`'>
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {<expr>} {(DQ (${ Id.VSub_Name _shunit_date_))} {</>} 
                                    {($ Id.VSub_Dollar '$$')}
                                  )
                                ]
                              )
                          )
                        }
                      spids: [4052]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_tmpDir_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: <Id.VSub_Name TMPDIR>
                          suffix_op: 
                            (suffix_op.Unary
                              op_id: Id.VTest_ColonHyphen
                              arg_word: {<Id.Lit_Slash /> <tmp>}
                            )
                        ) </shunit.> (${ Id.VSub_Name _shunit_random_)
                      )
                    }
                  spids: [4074]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {<umask>} {<077>})
                            (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\m'>) <kdir>} 
                              {(DQ (${ Id.VSub_Name _shunit_tmpDir_))}
                            )
                          ]
                        )
                      ]
                    )
                )
                (C {<_shunit_fatal>} {(SQ <'could not create temporary directory! exiting'>)})
              ]
            )
            (C {<echo>} {(DQ (${ Id.VSub_Name _shunit_tmpDir_))})
            (C {<unset>} {<_shunit_date_>} {<_shunit_random_>} {<_shunit_tmpDir_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_mktempFunc
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: _shunit_func_
              iter_words: [{<oneTimeSetUp>} {<oneTimeTearDown>} {<setUp>} {<tearDown>} {<suite>} {<noexec>}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_file_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name __shunit_tmpDir) </> (${ Id.VSub_Name _shunit_func_))
                            }
                          spids: [4181]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\c'>) <at>}]
                      redirects: [
                        (redir.HereDoc
                          op: <Id.Redir_DLess '<<'>
                          fd: -1
                          here_begin: {<EOF>}
                          here_end_span_id: 4213
                          stdin_parts: [<'#! /bin/sh\n'> <'exit '> (${ Id.VSub_Name SHUNIT_TRUE) <'\n'>]
                        )
                        (redir.Redir
                          op: <Id.Redir_Great '>'>
                          fd: -1
                          arg_word: {(DQ (${ Id.VSub_Name _shunit_file_))}
                        )
                      ]
                    )
                    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\c'>) <hmod>} 
                      {<Id.Lit_Other '+'> <x>} {(DQ (${ Id.VSub_Name _shunit_file_))}
                    )
                  ]
                )
            )
            (C {<unset>} {<_shunit_file_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_cleanup
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_name_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [4270]
                )
              ]
            )
            (command.Case
              to_match: {(${ Id.VSub_Name _shunit_name_)}
              arms: [
                (case_arm
                  pat_list: [{<EXIT>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_signal_)
                          op: assign_op.Equal
                          rhs: {<0>}
                          spids: [4287]
                        )
                      ]
                    )
                  ]
                  spids: [4284 4285 4290 -1]
                )
                (case_arm
                  pat_list: [{<INT>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_signal_)
                          op: assign_op.Equal
                          rhs: {<2>}
                          spids: [4296]
                        )
                      ]
                    )
                  ]
                  spids: [4293 4294 4299 -1]
                )
                (case_arm
                  pat_list: [{<TERM>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_signal_)
                          op: assign_op.Equal
                          rhs: {<15>}
                          spids: [4305]
                        )
                      ]
                    )
                  ]
                  spids: [4302 4303 4308 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {<_shunit_error>} 
                      {(DQ <'unrecognized trap value ('> (${ Id.VSub_Name _shunit_name_) <')'>)}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_signal_)
                          op: assign_op.Equal
                          rhs: {<0>}
                          spids: [4326]
                        )
                      ]
                    )
                  ]
                  spids: [4311 4312 4330 -1]
                )
              ]
            )
            (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\r'>) <m>} {<-fr>} 
              {(DQ (${ Id.VSub_Name __shunit_tmpDir))}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(DQ (${ Id.VSub_Name _shunit_name_))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(SQ <EXIT>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_warn>} 
                      {
                        (DQ <'trapped and now handling the ('> (${ Id.VSub_Name _shunit_name_) 
                          <') signal'>
                        )
                      }
                    )
                    (C {<trap>} {<0>})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: 
                        {
                          (DQ 
                            (command_sub
                              left_token: <Id.Left_Backtick '`'>
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {<expr>} {(DQ (${ Id.VSub_Name _shunit_signal_))} 
                                      {<Id.Lit_Other '+'>} {<128>}
                                    )
                                  ]
                                )
                            )
                          )
                        }
                    )
                  ]
                  spids: [4358 4378]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(${ Id.VSub_Name __shunit_reportGenerated)} {<-eq>} {(${ Id.VSub_Name SHUNIT_FALSE)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<_shunit_assertFail>} {(SQ <'Unknown failure encountered running a test'>)})
                    (C {<_shunit_generateReport>})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {(${ Id.VSub_Name SHUNIT_ERROR)}
                    )
                  ]
                  spids: [4426 4444]
                )
              ]
            )
            (C {<unset>} {<_shunit_name_>} {<_shunit_signal_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_configureColor
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_color_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                  spids: [4496]
                )
              ]
            )
            (command.Case
              to_match: {($ Id.VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(SQ <always>)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_color_)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                          spids: [4517]
                        )
                      ]
                    )
                  ]
                  spids: [4512 4515 4522 -1]
                )
                (case_arm
                  pat_list: [{(SQ <auto>)}]
                  action: [
                    (command.Subshell
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Simple
                              words: [{<exec>} {<tput>}]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_Great '>'>
                                  fd: -1
                                  arg_word: {</dev/null>}
                                )
                                (redir.Redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  fd: 2
                                  arg_word: {<1>}
                                )
                              ]
                            )
                          ]
                        )
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-lt>} {<127>} 
                                  {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_shunit_tput_)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: <Id.Left_Backtick '`'>
                                        command_list: 
                                          (command.CommandList
                                            children: [(C {<tput>} {<colors>})]
                                          )
                                      )
                                    }
                                  spids: [4565]
                                )
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-eq>} {<0>} {<-a>} 
                                  {(DQ (${ Id.VSub_Name _shunit_tput_))} {<-ge>} {<16>} {<Id.Lit_RBracket ']'>}
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_shunit_color_)
                                      op: assign_op.Equal
                                      rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                                      spids: [4603]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [4549 4562]
                        )
                      ]
                    )
                  ]
                  spids: [4525 4528 4612 -1]
                )
                (case_arm pat_list:[{(SQ <none>)}] spids:[4615 4618 4620 -1])
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {<_shunit_fatal>} 
                      {
                        (DQ <"unrecognized SHUNIT_COLOR option '"> (${ Id.VSub_Name SHUNIT_COLOR) <"'">)
                      }
                    )
                  ]
                  spids: [4623 4624 4636 -1]
                )
              ]
            )
            (command.Case
              to_match: {(${ Id.VSub_Name _shunit_color_)}
              arms: [
                (case_arm
                  pat_list: [{(${ Id.VSub_Name SHUNIT_TRUE)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_none)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name __SHUNIT_ANSI_NONE)}
                          spids: [4658]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_red)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name __SHUNIT_ANSI_RED)}
                          spids: [4664]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_green)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name __SHUNIT_ANSI_GREEN)}
                          spids: [4670]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_yellow)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name __SHUNIT_ANSI_YELLOW)}
                          spids: [4676]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_cyan)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name __SHUNIT_ANSI_CYAN)}
                          spids: [4682]
                        )
                      ]
                    )
                  ]
                  spids: [4652 4655 4688 -1]
                )
                (case_arm
                  pat_list: [{(${ Id.VSub_Name SHUNIT_FALSE)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_none)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                          spids: [4697]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_red)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                          spids: [4702]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_green)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                          spids: [4707]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_yellow)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                          spids: [4712]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_ansi_cyan)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                          spids: [4717]
                        )
                      ]
                    )
                  ]
                  spids: [4691 4694 4722 -1]
                )
              ]
            )
            (C {<unset>} {<_shunit_color_>} {<_shunit_tput_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_execSuite
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: _shunit_test_
              iter_words: [{(${ Id.VSub_Name __shunit_suite)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:__shunit_testSuccess)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                          spids: [4771]
                        )
                      ]
                    )
                    (C {<endSkipping>})
                    (C {<setUp>})
                    (C {<echo>} {(DQ (${ Id.VSub_Name _shunit_test_))})
                    (C {<eval>} {(DQ (${ Id.VSub_Name _shunit_test_))})
                    (C {<tearDown>})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                                  {(${ Id.VSub_Name __shunit_testSuccess)} {<-eq>} {(${ Id.VSub_Name SHUNIT_TRUE)} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:__shunit_testsPassed)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: <Id.Left_Backtick '`'>
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {<expr>} {(${ Id.VSub_Name __shunit_testsPassed)} 
                                                {<Id.Lit_Other '+'>} {<1>}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [4849]
                                )
                              ]
                            )
                          ]
                          spids: [4829 4846]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:__shunit_testsFailed)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: <Id.Left_Backtick '`'>
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {<expr>} {(${ Id.VSub_Name __shunit_testsFailed)} 
                                            {<Id.Lit_Other '+'>} {<1>}
                                          )
                                        ]
                                      )
                                  )
                                }
                              spids: [4868]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {<unset>} {<_shunit_test_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_generateReport
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_ok_)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                  spids: [4923]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                  {(DQ (${ Id.VSub_Name __shunit_testsFailed))} {<-gt>} {<0>} {<-o>} {(${ Id.VSub_Name __shunit_testSuccess)} {<-eq>} {(${ Id.VSub_Name SHUNIT_FALSE)} 
                  {<Id.Lit_RBracket ']'>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_ok_)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                      spids: [4966]
                    )
                  ]
                )
              ]
            )
            (C {<echo>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'Ran '> (${ Id.VSub_Name __shunit_ansi_cyan) 
                        (${ Id.VSub_Name __shunit_testsTotal) (${ Id.VSub_Name __shunit_ansi_none)
                      )
                    }
                  spids: [4976]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(DQ (${ Id.VSub_Name __shunit_testsTotal))} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {(${ Id.VSub_Name __SHUNIT_CMD_ECHO_ESC)} 
                      {(DQ (${ Id.VSub_Name _shunit_msg_) <' test.'>)}
                    )
                  ]
                  spids: [4991 5008]
                )
              ]
              else_action: [
                (C {(${ Id.VSub_Name __SHUNIT_CMD_ECHO_ESC)} 
                  {(DQ (${ Id.VSub_Name _shunit_msg_) <' tests.'>)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_failures_)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [5042]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_skipped_)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [5047]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                  {(${ Id.VSub_Name __shunit_assertsFailed)} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_failures_)
                      op: assign_op.Equal
                      rhs: {(DQ <'failures='> (${ Id.VSub_Name __shunit_assertsFailed))}
                      spids: [5068]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                  {(${ Id.VSub_Name __shunit_assertsSkipped)} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_skipped_)
                      op: assign_op.Equal
                      rhs: {(DQ <'skipped='> (${ Id.VSub_Name __shunit_assertsSkipped))}
                      spids: [5093]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                          {(${ Id.VSub_Name _shunit_ok_)} {<-eq>} {(${ Id.VSub_Name SHUNIT_TRUE)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name __shunit_ansi_green) <OK> 
                                (${ Id.VSub_Name __shunit_ansi_none)
                              )
                            }
                          spids: [5123]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                          {(DQ (${ Id.VSub_Name _shunit_skipped_))} {<Id.Lit_RBracket ']'>}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ (${ Id.VSub_Name _shunit_msg_) <' ('> 
                                    (${ Id.VSub_Name __shunit_ansi_yellow) (${ Id.VSub_Name _shunit_skipped_) (${ Id.VSub_Name __shunit_ansi_none) <')'>
                                  )
                                }
                              spids: [5151]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [5103 5120]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ (${ Id.VSub_Name __shunit_ansi_red) <FAILED> 
                            (${ Id.VSub_Name __shunit_ansi_none)
                          )
                        }
                      spids: [5173]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ (${ Id.VSub_Name _shunit_msg_) <' ('> (${ Id.VSub_Name __shunit_ansi_red) 
                            (${ Id.VSub_Name _shunit_failures_) (${ Id.VSub_Name __shunit_ansi_none)
                          )
                        }
                      spids: [5185]
                    )
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                      {(DQ (${ Id.VSub_Name _shunit_skipped_))} {<Id.Lit_RBracket ']'>}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name _shunit_msg_) <','> 
                                (${ Id.VSub_Name __shunit_ansi_yellow) (${ Id.VSub_Name _shunit_skipped_) (${ Id.VSub_Name __shunit_ansi_none)
                              )
                            }
                          spids: [5219]
                        )
                      ]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                      op: assign_op.Equal
                      rhs: {(DQ (${ Id.VSub_Name _shunit_msg_) <')'>)}
                      spids: [5237]
                    )
                  ]
                )
              ]
            )
            (C {<echo>})
            (C {(${ Id.VSub_Name __SHUNIT_CMD_ECHO_ESC)} {(DQ (${ Id.VSub_Name _shunit_msg_))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_reportGenerated)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_TRUE)}
                  spids: [5264]
                )
              ]
            )
            (C {<unset>} {<_shunit_failures_>} {<_shunit_msg_>} {<_shunit_ok_>} {<_shunit_skipped_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_shouldSkip
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                  {(${ Id.VSub_Name __shunit_skip)} {<-eq>} {(${ Id.VSub_Name SHUNIT_FALSE)} {<Id.Lit_RBracket ']'>}
                )
                (command.ControlFlow
                  token: <Id.ControlFlow_Return return>
                  arg_word: {(${ Id.VSub_Name SHUNIT_FALSE)}
                )
              ]
            )
            (C {<_shunit_assertSkip>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_assertPass
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_assertsPassed)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(${ Id.VSub_Name __shunit_assertsPassed)} 
                                {<Id.Lit_Other '+'>} {<1>}
                              )
                            ]
                          )
                      )
                    }
                  spids: [5356]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_assertsTotal)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(${ Id.VSub_Name __shunit_assertsTotal)} {<Id.Lit_Other '+'>} 
                                {<1>}
                              )
                            ]
                          )
                      )
                    }
                  spids: [5372]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _shunit_assertFail
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_msg_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [5409]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_testSuccess)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name SHUNIT_FALSE)}
                  spids: [5414]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_assertsFailed)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(DQ (${ Id.VSub_Name __shunit_assertsFailed))} 
                                {<Id.Lit_Other '+'>} {<1>}
                              )
                            ]
                          )
                      )
                    }
                  spids: [5420]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_assertsTotal)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(DQ (${ Id.VSub_Name __shunit_assertsTotal))} 
                                {<Id.Lit_Other '+'>} {<1>}
                              )
                            ]
                          )
                      )
                    }
                  spids: [5438]
                )
              ]
            )
            (C {(${ Id.VSub_Name __SHUNIT_CMD_ECHO_ESC)} 
              {
                (DQ (${ Id.VSub_Name __shunit_ansi_red) <'ASSERT:'> 
                  (${ Id.VSub_Name __shunit_ansi_none) (${ Id.VSub_Name _shunit_msg_)
                )
              }
            )
            (C {<unset>} {<_shunit_msg_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_assertSkip
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_assertsSkipped)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(DQ (${ Id.VSub_Name __shunit_assertsSkipped))} 
                                {<Id.Lit_Other '+'>} {<1>}
                              )
                            ]
                          )
                      )
                    }
                  spids: [5503]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_assertsTotal)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<expr>} {(DQ (${ Id.VSub_Name __shunit_assertsTotal))} 
                                {<Id.Lit_Other '+'>} {<1>}
                              )
                            ]
                          )
                      )
                    }
                  spids: [5521]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _shunit_prepForSourcing
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_script_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [5566]
                )
              ]
            )
            (command.Case
              to_match: {(DQ (${ Id.VSub_Name _shunit_script_))}
              arms: [
                (case_arm
                  pat_list: [{</> <Id.Lit_Star '*'>} {<./> <Id.Lit_Star '*'>}]
                  action: [(C {<echo>} {(DQ (${ Id.VSub_Name _shunit_script_))})]
                  spids: [5581 5586 5596 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [(C {<echo>} {(DQ <./> (${ Id.VSub_Name _shunit_script_))})]
                  spids: [5599 5600 5611 -1]
                )
              ]
            )
            (C {<unset>} {<_shunit_script_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_escapeCharInStr
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                  {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>}
                )
                (command.ControlFlow token:<Id.ControlFlow_Return return>)
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_c_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [5679]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_s_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [5683]
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {<echo>} {(SQ ) (${ Id.VSub_Name _shunit_s_) (SQ )})
                (C {<sed>} 
                  {(SQ <'s/\\'>) (${ Id.VSub_Name _shunit_c_) (SQ <'/\\\\\\'>) 
                    (${ Id.VSub_Name _shunit_c_) (SQ </g>)
                  }
                )
              ]
              negated: F
            )
            (C {<unset>} {<_shunit_c_>} {<_shunit_s_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_escapeCharactersInString
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-n>} 
                  {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_RBracket ']'>}
                )
                (command.ControlFlow token:<Id.ControlFlow_Return return>)
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_str_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [5781]
                )
              ]
            )
            (command.ForEach
              iter_name: _shunit_char_
              iter_words: [{(SQ <'"'>)} {(SQ <'$'>)} {(DQ <"'">)} {(SQ <'`'>)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_shunit_str_)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (C {<_shunit_escapeCharInStr>} 
                                        {(DQ (${ Id.VSub_Name _shunit_char_))} {(DQ (${ Id.VSub_Name _shunit_str_))}
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [5820]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {<echo>} {(DQ (${ Id.VSub_Name _shunit_str_))})
            (C {<unset>} {<_shunit_char_>} {<_shunit_str_>})
          ]
        )
    )
    (command.ShFunction
      name: _shunit_extractTestFunctions
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_script_)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [5887]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_shunit_regex_)
                  op: assign_op.Equal
                  rhs: {(SQ <'^[ \t]*(function )*test[A-Za-z0-9_]* *\\(\\)'>)}
                  spids: [5900]
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {<egrep>} {(DQ (${ Id.VSub_Name _shunit_regex_))} 
                  {(DQ (${ Id.VSub_Name _shunit_script_))}
                )
                (C {<sed>} {(SQ <'s/^[^A-Za-z0-9_]*//;s/^function //;s/\\([A-Za-z0-9_]*\\).*/\\1/g'>)})
                (C {<xargs>})
              ]
              negated: F
            )
            (C {<unset>} {<_shunit_regex_>} {<_shunit_script_>})
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                  {($ Id.VSub_Pound '$#')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_script)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __SHUNIT_PARENT)}
                  spids: [5978]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__shunit_mode)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name __SHUNIT_MODE_SOURCED)}
                  spids: [5984]
                )
              ]
            )
          ]
          spids: [5962 5975]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:__shunit_script)
              op: assign_op.Equal
              rhs: {($ Id.VSub_Number '$1')}
              spids: [5992]
            )
          ]
        )
        (command.AndOr
          ops: [Id.Op_DPipe]
          children: [
            (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-r>} 
              {(DQ (${ Id.VSub_Name __shunit_script))} {<Id.Lit_RBracket ']'>}
            )
            (C {<_shunit_fatal>} {(DQ <'unable to read from '> (${ Id.VSub_Name __shunit_script))})
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:__shunit_mode)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name __SHUNIT_MODE_STANDALONE)}
              spids: [6022]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:__shunit_tmpDir)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                command_list: (command.CommandList children:[(C {<_shunit_mktempDir>})])
              )
            }
          spids: [6033]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHUNIT_TMPDIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name __shunit_tmpDir) </tmp>)}
          spids: [6047]
        )
      ]
    )
    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\m'>) <kdir>} 
      {(DQ (${ Id.VSub_Name SHUNIT_TMPDIR))}
    )
    (C {<trap>} {(SQ <'_shunit_cleanup EXIT'>)} {<0>})
    (C {<trap>} {(SQ <'_shunit_cleanup INT'>)} {<2>})
    (C {<trap>} {(SQ <'_shunit_cleanup TERM'>)} {<15>})
    (C {<_shunit_mktempFunc>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name __shunit_tmpDir) <':'> (${ Id.VSub_Name PATH))}
          spids: [6098]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{<noexec>}]
          redirects: [(redir.Redir op:<Id.Redir_Great '2>'> fd:2 arg_word:{</dev/null>})]
        )
        (C {<_shunit_fatal>} 
          {(SQ <'Please declare TMPDIR with path on partition with exec permission.'>)}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
                  {(DQ (${ Id.VSub_Name __shunit_mode))} {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name __SHUNIT_MODE_STANDALONE))} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<.>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_Backtick '`'>
                    command_list: 
                      (command.CommandList
                        children: [
                          (C {<_shunit_prepForSourcing>} {(DQ (${ Id.VSub_Name __shunit_script))})
                        ]
                      )
                  )
                )
              }
            )
          ]
          spids: [6138 6159]
        )
      ]
    )
    (C {<_shunit_configureColor>} {(DQ (${ Id.VSub_Name SHUNIT_COLOR))})
    (C {<oneTimeSetUp>})
    (C {<suite>})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} {<-z>} 
                  {(DQ (${ Id.VSub_Name __shunit_suite))} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shunit_funcs_)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {<_shunit_extractTestFunctions>} 
                                {(DQ (${ Id.VSub_Name __shunit_script))}
                              )
                            ]
                          )
                      )
                    }
                  spids: [6236]
                )
              ]
            )
            (command.ForEach
              iter_name: shunit_func_
              iter_words: [{(${ Id.VSub_Name shunit_funcs_)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [(C {<suite_addTest>} {(DQ (${ Id.VSub_Name shunit_func_))})]
                )
            )
          ]
          spids: [6218 6233]
        )
      ]
    )
    (C {<unset>} {<shunit_func_>} {<shunit_funcs_>})
    (C {<_shunit_execSuite>})
    (C {<oneTimeTearDown>})
    (C {<_shunit_generateReport>})
    (C {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\['>)} 
      {(DQ (${ Id.VSub_Name __shunit_testsFailed))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>}
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{($ Id.VSub_QMark '$?')})
  ]
)