(command.CommandList
  children: [
    (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:64)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {(Id.Lit_Slash /) (tmp)}
                    )
                ) (/STDOUT)
              )
            }
          spids: [61]
        )
      ]
    )
    (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:75)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {(Id.Lit_Slash /) (tmp)}
                    )
                ) (/STDERR)
              )
            }
          spids: [72]
        )
      ]
    )
    (C {(.)} {(./shflags_test_helpers)})
    (command.ShFunction
      name: testColumns
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:cols)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:100)
                        command_list: (command.CommandList children:[(C {(_flags_columns)})])
                      )
                    }
                  spids: [99]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:value)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:108)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {(DQ (${ Id.VSub_Name cols))} {(Id.Lit_Other ':')} 
                                {(SQ (Token id:Id.Lit_Chars val:'\\([0-9]*\\)' span_id:126))}
                              )
                            ]
                          )
                      )
                    }
                  spids: [107]
                )
              ]
            )
            (C {(assertNotNull)} {(DQ ('unexpected screen width (') (${ Id.VSub_Name cols) (')'))} 
              {(DQ (${ Id.VSub_Name value))}
            )
          ]
        )
    )
    (command.ShFunction
      name: testGetoptVers
      body: 
        (command.BraceGroup
          children: [
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:161)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(desc)} {(mock)} {(want)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:170)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(assertEquals)} {(DQ (${ Id.VSub_Name desc))} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:184)
                            command_list: 
                              (command.CommandList
                                children: [(C {(_flags_getopt_vers)} {(DQ (${ Id.VSub_Name mock))})]
                              )
                          )
                        )
                      } {(DQ (${ Id.VSub_Name want))}
                    )
                  ]
                )
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:204)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 218
                  stdin_parts: [
                    ('standard mock_getopt_std ')
                    (${ Id.VSub_Name __FLAGS_GETOPT_VERS_STD)
                    ('\n')
                    ('enhanced mock_getopt_enh ')
                    (${ Id.VSub_Name __FLAGS_GETOPT_VERS_ENH)
                    ('\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: mock_getopt_std
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:' -- --foo' span_id:237))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:239)
            )
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:241)
                  arg_word: {(0)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:244)
            )
          ]
        )
    )
    (command.ShFunction
      name: mock_getopt_enh
      body: 
        (command.BraceGroup
          children: [
            (command.Sentence
              child: (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:' --foo --' span_id:260))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:262)
            )
            (command.Sentence
              child: 
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:264)
                  arg_word: {(0)}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:267)
            )
          ]
        )
    )
    (command.ShFunction
      name: testGenOptStr
      body: 
        (command.BraceGroup
          children: [
            (C {(_testGenOptStr)} {(SQ )} {(SQ )})
            (C {(DEFINE_boolean)} {(bool)} {(false)} 
              {(SQ (Token id:Id.Lit_Chars val:'boolean value' span_id:296))} {(b)}
            )
            (C {(_testGenOptStr)} {(SQ (Token id:Id.Lit_Chars val:b span_id:305))} 
              {(SQ (Token id:Id.Lit_Chars val:bool span_id:309))}
            )
            (C {(DEFINE_float)} {(float)} {(0.0)} 
              {(SQ (Token id:Id.Lit_Chars val:'float value' span_id:321))} {(f)}
            )
            (C {(_testGenOptStr)} {(SQ (Token id:Id.Lit_Chars val:'bf:' span_id:330))} 
              {(SQ (Token id:Id.Lit_Chars val:'bool,float:' span_id:334))}
            )
            (C {(DEFINE_integer)} {(int)} {(0)} 
              {(SQ (Token id:Id.Lit_Chars val:'integer value' span_id:346))} {(i)}
            )
            (C {(_testGenOptStr)} {(SQ (Token id:Id.Lit_Chars val:'bf:i:' span_id:355))} 
              {(SQ (Token id:Id.Lit_Chars val:'bool,float:,int:' span_id:359))}
            )
            (C {(DEFINE_string)} {(str)} {(0)} 
              {(SQ (Token id:Id.Lit_Chars val:'string value' span_id:371))} {(s)}
            )
            (C {(_testGenOptStr)} {(SQ (Token id:Id.Lit_Chars val:'bf:i:s:' span_id:380))} 
              {(SQ (Token id:Id.Lit_Chars val:'bool,float:,int:,str:' span_id:384))}
            )
            (C {(DEFINE_boolean)} {(help)} {(false)} 
              {(SQ (Token id:Id.Lit_Chars val:'show help' span_id:396))} {(h)}
            )
            (C {(_testGenOptStr)} {(SQ (Token id:Id.Lit_Chars val:'bf:i:s:h' span_id:405))} 
              {(SQ (Token id:Id.Lit_Chars val:'bool,float:,int:,str:,help' span_id:409))}
            )
          ]
        )
    )
    (command.ShFunction
      name: _testGenOptStr
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:short)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [422]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:long)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [426]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:432)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_genOptStr)} {(DQ (${ Id.VSub_Name __FLAGS_OPTSTR_SHORT))})
                            ]
                          )
                      )
                    }
                  spids: [431]
                )
              ]
            )
            (C {(assertTrue)} 
              {(SQ (Token id:Id.Lit_Chars val:'short option string generation failed' span_id:446))} {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(DQ (${ Id.VSub_Name short))} {(DQ (${ Id.VSub_Name result))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:469)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_genOptStr)} {(DQ (${ Id.VSub_Name __FLAGS_OPTSTR_LONG))})
                            ]
                          )
                      )
                    }
                  spids: [468]
                )
              ]
            )
            (C {(assertTrue)} 
              {(SQ (Token id:Id.Lit_Chars val:'long option string generation failed' span_id:485))} {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(DQ (${ Id.VSub_Name long))} {(DQ (${ Id.VSub_Name result))})
          ]
        )
    )
    (command.ShFunction
      name: testGetFlagInfo
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:__flags_blah_foobar)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:1234 span_id:517))}
                  spids: [515]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:rslt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:523)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_getFlagInfo)} 
                                {(SQ (Token id:Id.Lit_Chars val:blah span_id:529))} {(SQ (Token id:Id.Lit_Chars val:foobar span_id:533))}
                              )
                            ]
                          )
                      )
                    }
                  spids: [522]
                )
              ]
            )
            (C {(assertTrue)} 
              {(SQ (Token id:Id.Lit_Chars val:'request for valid flag info failed' span_id:541))} {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} 
              {(SQ (Token id:Id.Lit_Chars val:'invalid flag info returned' span_id:550))} {(DQ (${ Id.VSub_Name __flags_blah_foobar))} {(DQ (${ Id.VSub_Name rslt))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:rslt)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:568)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [
                                  {(_flags_getFlagInfo)}
                                  {(SQ (Token id:Id.Lit_Chars val:blah span_id:574))}
                                  {(SQ (Token id:Id.Lit_Chars val:hubbabubba span_id:578))}
                                ]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Great val:'>' span_id:581)
                                    fd: -1
                                    arg_word: {(DQ (${ Id.VSub_Name stdoutF))}
                                  )
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Great val:'2>' span_id:588)
                                    fd: 2
                                    arg_word: {(DQ (${ Id.VSub_Name stderrF))}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [567]
                )
              ]
            )
            (C {(assertEquals)} 
              {(SQ (Token id:Id.Lit_Chars val:'invalid flag did not result in an error' span_id:600))} {(DQ (${ Id.VSub_Name FLAGS_ERROR))} {($ Id.VSub_QMark '$?')}
            )
            (C {(assertErrorMsg)} 
              {(SQ (Token id:Id.Lit_Chars val:'missing flag info variable' span_id:615))}
            )
          ]
        )
    )
    (command.ShFunction
      name: testItemInList
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:list)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'this is a test' span_id:630))}
                  spids: [628]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:638)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(desc)} {(item)} {(want)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:647)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(_flags_itemInList)} {(DQ (${ Id.VSub_Name item))} {(DQ (${ Id.VSub_Name list))})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:got)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_QMark '$?')}
                          spids: [667]
                        )
                      ]
                    )
                    (C {(assertEquals)} 
                      {(DQ (${ Id.VSub_Name desc) (': itemInList(') (${ Id.VSub_Name item) (')'))} {(DQ (${ Id.VSub_Name got))} {(DQ (${ Id.VSub_Name want))}
                    )
                  ]
                )
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:699)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 743
                  stdin_parts: [
                    ('lead_item       this  ')
                    (${ Id.VSub_Name FLAGS_TRUE)
                    ('\n')
                    ('middle_item     is    ')
                    (${ Id.VSub_Name FLAGS_TRUE)
                    ('\n')
                    ('last_item       test  ')
                    (${ Id.VSub_Name FLAGS_TRUE)
                    ('\n')
                    ('missing_item    asdf  ')
                    (${ Id.VSub_Name FLAGS_FALSE)
                    ('\n')
                    ('test_partial_te te    ')
                    (${ Id.VSub_Name FLAGS_FALSE)
                    ('\n')
                    ('test_partial_es es    ')
                    (${ Id.VSub_Name FLAGS_FALSE)
                    ('\n')
                    ('test_partial_st st    ')
                    (${ Id.VSub_Name FLAGS_FALSE)
                    ('\n')
                    ("empty_item      ''    ")
                    (${ Id.VSub_Name FLAGS_FALSE)
                    ('\n')
                  ]
                )
              ]
            )
            (C {(_flags_itemInList)} {(SQ (Token id:Id.Lit_Chars val:item span_id:749))} {(SQ )})
            (C {(assertFalse)} 
              {(SQ (Token id:Id.Lit_Chars val:'empty lists should not match' span_id:759))} {($ Id.VSub_QMark '$?')}
            )
          ]
        )
    )
    (command.ShFunction
      name: testValidBool
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: value
              iter_words: [{(${ Id.VSub_Name TH_BOOL_VALID)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(_flags_validBool)} {(DQ (${ Id.VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ Id.VSub_Name value) (') did not validate'))} {($ Id.VSub_QMark '$?')}
                    )
                  ]
                )
            )
            (command.ForEach
              iter_name: value
              iter_words: [{(${ Id.VSub_Name TH_BOOL_INVALID)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(_flags_validBool)} {(DQ (${ Id.VSub_Name value))})
                    (C {(assertFalse)} 
                      {(DQ ('invalid value (') (${ Id.VSub_Name value) (') validated'))} {($ Id.VSub_QMark '$?')}
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: _testValidFloat
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: value
              iter_words: [{(${ Id.VSub_Name TH_INT_VALID)} {(${ Id.VSub_Name TH_FLOAT_VALID)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(_flags_validFloat)} {(DQ (${ Id.VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ Id.VSub_Name value) (') did not validate'))} {($ Id.VSub_QMark '$?')}
                    )
                  ]
                )
            )
            (command.ForEach
              iter_name: value
              iter_words: [{(${ Id.VSub_Name TH_FLOAT_INVALID)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(_flags_validFloat)} {(DQ (${ Id.VSub_Name value))})
                    (C {(assertFalse)} 
                      {(DQ ('invalid value (') (${ Id.VSub_Name value) (') validated'))} {($ Id.VSub_QMark '$?')}
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: testValidFloatBuiltin
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testValidFloat)})
          ]
        )
    )
    (command.ShFunction
      name: testValidFloatExpr
      body: 
        (command.BraceGroup
          children: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.ShFunction
                      name: _flags_useBuiltin
                      body: 
                        (command.BraceGroup
                          children: [
                            (command.Sentence
                              child: 
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:998)
                                  arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1005)
                            )
                          ]
                        )
                    )
                    (C {(_testValidFloat)})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: _testValidInt
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: value
              iter_words: [{(${ Id.VSub_Name TH_INT_VALID)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(_flags_validInt)} {(DQ (${ Id.VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ Id.VSub_Name value) (') did not validate'))} {($ Id.VSub_QMark '$?')}
                    )
                  ]
                )
            )
            (command.ForEach
              iter_name: value
              iter_words: [{(${ Id.VSub_Name TH_INT_INVALID)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(_flags_validInt)} {(DQ (${ Id.VSub_Name value))})
                    (C {(assertFalse)} 
                      {(DQ ('invalid value (') (${ Id.VSub_Name value) (') should not validate'))} {($ Id.VSub_QMark '$?')}
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: testValidIntBuiltin
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testValidInt)})
          ]
        )
    )
    (command.ShFunction
      name: testValidIntExpr
      body: 
        (command.BraceGroup
          children: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.ShFunction
                      name: _flags_useBuiltin
                      body: 
                        (command.BraceGroup
                          children: [
                            (command.Sentence
                              child: 
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:1149)
                                  arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1156)
                            )
                          ]
                        )
                    )
                    (C {(_testValidInt)})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: _testMath
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1177)
                        command_list: (command.CommandList children:[(C {(_flags_math)} {(1)})])
                      )
                    }
                  spids: [1176]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'1 failed' span_id:1189))} 
              {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(SQ (Token id:Id.Lit_Chars val:1 span_id:1198))} {(1)} 
              {(DQ (${ Id.VSub_Name result))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1212)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_math)} {(SQ (Token id:Id.Lit_Chars val:'1 + 2' span_id:1218))})
                            ]
                          )
                      )
                    }
                  spids: [1211]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'1+2 failed' span_id:1226))} 
              {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(SQ (Token id:Id.Lit_Chars val:'1+2' span_id:1235))} {(3)} 
              {(DQ (${ Id.VSub_Name result))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1249)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_math)} 
                                {(SQ (Token id:Id.Lit_Chars val:'1 + 2 + 3' span_id:1255))}
                              )
                            ]
                          )
                      )
                    }
                  spids: [1248]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'1+2+3 failed' span_id:1263))} 
              {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(SQ (Token id:Id.Lit_Chars val:'1+2+3' span_id:1272))} {(6)} 
              {(DQ (${ Id.VSub_Name result))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:result)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1286)
                        command_list: (command.CommandList children:[(C {(_flags_math)})])
                      )
                    }
                  spids: [1285]
                )
              ]
            )
            (C {(assertFalse)} {(SQ (Token id:Id.Lit_Chars val:'missing math succeeded' span_id:1296))} 
              {($ Id.VSub_QMark '$?')}
            )
          ]
        )
    )
    (command.ShFunction
      name: testMathBuiltin
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testMath)})
          ]
        )
    )
    (command.ShFunction
      name: testMathExpr
      body: 
        (command.BraceGroup
          children: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.ShFunction
                      name: _flags_useBuiltin
                      body: 
                        (command.BraceGroup
                          children: [
                            (command.Sentence
                              child: 
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:1339)
                                  arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1346)
                            )
                          ]
                        )
                    )
                    (C {(_testMath)})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: _testStrlen
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:len)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1367)
                        command_list: (command.CommandList children:[(C {(_flags_strlen)})])
                      )
                    }
                  spids: [1366]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'missing argument failed' span_id:1377))} 
              {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(SQ (Token id:Id.Lit_Chars val:'missing argument' span_id:1386))} {(0)} 
              {(DQ (${ Id.VSub_Name len))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:len)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1400)
                        command_list: (command.CommandList children:[(C {(_flags_strlen)} {(SQ )})])
                      )
                    }
                  spids: [1399]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'empty argument failed' span_id:1413))} 
              {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(SQ (Token id:Id.Lit_Chars val:'empty argument' span_id:1422))} {(0)} 
              {(DQ (${ Id.VSub_Name len))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:len)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1436)
                        command_list: 
                          (command.CommandList
                            children: [(C {(_flags_strlen)} {(abc123)})]
                          )
                      )
                    }
                  spids: [1435]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'single-word failed' span_id:1448))} 
              {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(SQ (Token id:Id.Lit_Chars val:single-word span_id:1457))} {(6)} 
              {(DQ (${ Id.VSub_Name len))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:len)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1471)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_flags_strlen)} 
                                {(SQ (Token id:Id.Lit_Chars val:'This is a test' span_id:1477))}
                              )
                            ]
                          )
                      )
                    }
                  spids: [1470]
                )
              ]
            )
            (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'multi-word failed' span_id:1485))} 
              {($ Id.VSub_QMark '$?')}
            )
            (C {(assertEquals)} {(SQ (Token id:Id.Lit_Chars val:multi-word span_id:1494))} {(14)} 
              {(DQ (${ Id.VSub_Name len))}
            )
          ]
        )
    )
    (command.ShFunction
      name: testStrlenBuiltin
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testStrlen)})
          ]
        )
    )
    (command.ShFunction
      name: testStrlenExpr
      body: 
        (command.BraceGroup
          children: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.ShFunction
                      name: _flags_useBuiltin
                      body: 
                        (command.BraceGroup
                          children: [
                            (command.Sentence
                              child: 
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:1543)
                                  arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1550)
                            )
                          ]
                        )
                    )
                    (C {(_testStrlen)})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: oneTimeSetUp
      body: 
        (command.BraceGroup
          children: [
            (C {(th_oneTimeSetUp)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(_flags_useBuiltin)})
                (C {(th_warn)} 
                  {
                    (SQ 
                      (Token
                        id: Id.Lit_Chars
                        val: 'Shell built-ins not supported. Some tests will be skipped.'
                        span_id: 1583
                      )
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction name:tearDown 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:1613)
                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: [1622]
            )
          ]
        )
      ]
    )
    (C {(.)} {(DQ (${ Id.VSub_Name TH_SHUNIT))})
  ]
)