(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:expectedF)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:TMPDIR span_id:49)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {(Id.Lit_Slash /) (tmp)}
                    )
                ) (/expected)
              )
            }
          spids: [46]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:returnF)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:TMPDIR span_id:60)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {(Id.Lit_Slash /) (tmp)}
                    )
                ) (/return)
              )
            }
          spids: [57]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:stdoutF)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:TMPDIR span_id:71)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {(Id.Lit_Slash /) (tmp)}
                    )
                ) (/STDOUT)
              )
            }
          spids: [68]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:stderrF)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:TMPDIR span_id:82)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {(Id.Lit_Slash /) (tmp)}
                    )
                ) (/STDERR)
              )
            }
          spids: [79]
        )
      ]
    )
    (C {(.)} {(./shflags_test_helpers)})
    (command.ShFunction
      name: testHelp
      body: 
        (command.BraceGroup
          children: [
            (C {(_testHelp)} {(SQ (Token id:Id.Lit_Chars val:-h span_id:109))})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(flags_getoptIsEnh)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:117)
                )
              ]
            )
            (C {(_testHelp)} {(SQ (Token id:Id.Lit_Chars val:--help span_id:123))})
          ]
        )
    )
    (command.ShFunction
      name: _testHelp
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:flag)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [136]
                )
              ]
            )
            (C {(th_clearReturn)})
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.Simple
                      words: [{(FLAGS)} {(DQ (${ Id.VSub_Name flag))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:159)
                          fd: -1
                          arg_word: {(DQ (${ Id.VSub_Name stdoutF))}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'2>' span_id:166)
                          fd: 2
                          arg_word: {(DQ (${ Id.VSub_Name stderrF))}
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(echo)} {($ Id.VSub_QMark '$?')}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:178)
                          fd: -1
                          arg_word: {(DQ (${ Id.VSub_Name returnF))}
                        )
                      ]
                    )
                  ]
                )
            )
            (C {(assertFalse)} 
              {
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: 'short help request should have returned a false exit code.'
                    span_id: 194
                  )
                )
              } 
              {
                (DQ 
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:200)
                    command_list: (command.CommandList children:[(C {(th_queryReturn)})])
                  )
                )
              }
            )
            (command.Simple
              words: [
                {(grep)}
                {(SQ (Token id:Id.Lit_Chars val:'show this help' span_id:209))}
                {(DQ (${ Id.VSub_Name stderrF))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:218)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:grepped)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [222]
                )
              ]
            )
            (C {(assertTrue)} 
              {
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: 'short request for help should have produced some help output.'
                    span_id: 231
                  )
                )
              } {(${ Id.VSub_Name grepped)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name grepped)} {(-ne)} 
                  {(DQ (${ Id.VSub_Name FLAGS_TRUE))} {(Id.Lit_RBracket ']')}
                )
                (C {(th_showOutput)})
              ]
            )
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FLAGS_HELP)
                          op: assign_op.Equal
                          rhs: {(SQ (Token id:Id.Lit_Chars val:'this is a test' span_id:272))}
                          spids: [270]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(FLAGS)} {(DQ (${ Id.VSub_Name flag))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:284)
                          fd: -1
                          arg_word: {(DQ (${ Id.VSub_Name stdoutF))}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'2>' span_id:291)
                          fd: 2
                          arg_word: {(DQ (${ Id.VSub_Name stderrF))}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.Simple
              words: [
                {(grep)}
                {(SQ (Token id:Id.Lit_Chars val:'this is a test' span_id:305))}
                {(DQ (${ Id.VSub_Name stderrF))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:314)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:grepped)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [318]
                )
              ]
            )
            (C {(assertTrue)} 
              {
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: 'setting FLAGS_HELP did not produce expected result'
                    span_id: 325
                  )
                )
              } {(${ Id.VSub_Name grepped)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name grepped)} {(-ne)} 
                  {(DQ (${ Id.VSub_Name FLAGS_TRUE))} {(Id.Lit_RBracket ']')}
                )
                (C {(th_showOutput)})
              ]
            )
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (C {(DEFINE_boolean)} {(b)} {(false)} {(DQ ("help string containing a ' char"))} {(b)})
                    (command.Simple
                      words: [{(FLAGS)} {(DQ (${ Id.VSub_Name flag))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:383)
                          fd: -1
                          arg_word: {(DQ (${ Id.VSub_Name stdoutF))}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'2>' span_id:390)
                          fd: 2
                          arg_word: {(DQ (${ Id.VSub_Name stderrF))}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.Simple
              words: [
                {(grep)}
                {(DQ ("help string containing a ' char"))}
                {(DQ (${ Id.VSub_Name stderrF))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:413)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:grepped)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [417]
                )
              ]
            )
            (C {(assertTrue)} {(DQ ("help strings containing apostrophes don't work"))} 
              {(${ Id.VSub_Name grepped)}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name grepped)} {(-ne)} 
                  {(DQ (${ Id.VSub_Name FLAGS_TRUE))} {(Id.Lit_RBracket ']')}
                )
                (C {(th_showOutput)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: mock_flags_columns
      body: (command.BraceGroup children:[(C {(echo)} {(80)})])
    )
    (command.ShFunction
      name: _doDefines
      body: 
        (command.BraceGroup
          children: [
            (C {(DEFINE_boolean)} {(SQ (Token id:Id.Lit_Chars val:force span_id:479))} {(false)} {(SQ )} 
              {(f)}
            )
          ]
        )
    )
    (command.ShFunction
      name: testStandardHelpOutput
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(flags_getoptIsStd)}) (C {(startSkipping)})]
            )
            (C {(_doDefines)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:help)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'USAGE: standard [flags] args' span_id:512))}
                  spids: [510]
                )
              ]
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:519)
                  fd: -1
                  arg_word: {(DQ (${ Id.VSub_Name expectedF))}
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:526)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 537
                  stdin_parts: [
                    (${ Id.VSub_Name help)
                    ('\n')
                    ('flags:\n')
                    ('  -f  (default: false)\n')
                    ('  -h  show this help (default: false)\n')
                  ]
                )
              ]
            )
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.ShFunction
                      name: _flags_columns
                      body: 
                        (command.BraceGroup
                          children: [
                            (command.Sentence
                              child: (C {(mock_flags_columns)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:549)
                            )
                          ]
                        )
                    )
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:FLAGS_HELP)
                              op: assign_op.Equal
                              rhs: {(${ Id.VSub_Name help)}
                              spids: [554]
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:558)
                    )
                    (command.Simple
                      words: [{(FLAGS)} {(-h)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:565)
                          fd: -1
                          arg_word: {(DQ (${ Id.VSub_Name stdoutF))}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'2>' span_id:572)
                          fd: 2
                          arg_word: {(DQ (${ Id.VSub_Name stderrF))}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.Simple
              words: [{(diff)} {(DQ (${ Id.VSub_Name expectedF))} {(DQ (${ Id.VSub_Name stderrF))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:597)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:r3turn)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [601]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'unexpected help output' span_id:608))} 
              {(${ Id.VSub_Name r3turn)}
            )
            (C {(th_showOutput)} {(${ Id.VSub_Name r3turn)} {(DQ (${ Id.VSub_Name stdoutF))} 
              {(DQ (${ Id.VSub_Name stderrF))}
            )
          ]
        )
    )
    (command.ShFunction
      name: testEnhancedHelpOutput
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(flags_getoptIsEnh)}) (C {(startSkipping)})]
            )
            (C {(_doDefines)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:help)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'USAGE: enhanced [flags] args' span_id:657))}
                  spids: [655]
                )
              ]
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:664)
                  fd: -1
                  arg_word: {(DQ (${ Id.VSub_Name expectedF))}
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:671)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 682
                  stdin_parts: [
                    (${ Id.VSub_Name help)
                    ('\n')
                    ('flags:\n')
                    ('  -f,--[no]force:  (default: false)\n')
                    ('  -h,--help:  show this help (default: false)\n')
                  ]
                )
              ]
            )
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.ShFunction
                      name: _flags_columns
                      body: 
                        (command.BraceGroup
                          children: [
                            (command.Sentence
                              child: (C {(mock_flags_columns)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:694)
                            )
                          ]
                        )
                    )
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:FLAGS_HELP)
                              op: assign_op.Equal
                              rhs: {(${ Id.VSub_Name help)}
                              spids: [703]
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:707)
                    )
                    (command.Simple
                      words: [{(FLAGS)} {(-h)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:714)
                          fd: -1
                          arg_word: {(DQ (${ Id.VSub_Name stdoutF))}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'2>' span_id:721)
                          fd: 2
                          arg_word: {(DQ (${ Id.VSub_Name stderrF))}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.Simple
              words: [{(diff)} {(DQ (${ Id.VSub_Name expectedF))} {(DQ (${ Id.VSub_Name stderrF))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:746)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:differed)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [750]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'unexpected help output' span_id:757))} 
              {(${ Id.VSub_Name differed)}
            )
            (C {(th_showOutput)} {(${ Id.VSub_Name differed)} {(DQ (${ Id.VSub_Name stdoutF))} 
              {(DQ (${ Id.VSub_Name stderrF))}
            )
          ]
        )
    )
    (command.ShFunction
      name: oneTimeSetUp
      body: 
        (command.BraceGroup
          children: [
            (C {(th_oneTimeSetUp)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(flags_getoptIsStd)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:800)
                    )
                  ]
                  action: [
                    (C {(th_warn)} 
                      {
                        (SQ 
                          (Token
                            id: Id.Lit_Chars
                            val: 'Standard version of getopt found. Enhanced tests will be skipped.'
                            span_id: 808
                          )
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:812)
                    )
                  ]
                  spids: [797 802]
                )
              ]
            )
            (C {(th_warn)} 
              {
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: 'Enhanced version of getopt found. Standard tests will be skipped.'
                    span_id: 821
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction name:setUp body:(command.BraceGroup children:[(C {(flags_reset)})]))
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-n)} 
          {
            (DQ 
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:ZSH_VERSION span_id:851)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
              )
            )
          } {(Id.Lit_RBracket ']')}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:SHUNIT_PARENT)
              op: assign_op.Equal
              rhs: {($ Id.VSub_Number '$0')}
              spids: [860]
            )
          ]
        )
      ]
    )
    (C {(.)} {(DQ (${ Id.VSub_Name TH_SHUNIT))})
  ]
)