(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:stdoutF)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name TMPDIR>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(Lit_Slash /) (tmp)})
                  spids: [63 68]
                ) (/STDOUT)
              )
            }
          spids: [61]
        )
      ]
      spids: [61]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:stderrF)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name TMPDIR>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(Lit_Slash /) (tmp)})
                  spids: [74 79]
                ) (/STDERR)
              )
            }
          spids: [72]
        )
      ]
      spids: [72]
    )
    (C {(.)} {(./shflags_test_helpers)})
    (FuncDef
      name: testColumns
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cols)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(_flags_columns)})])
                        left_token: <Left_Backtick '`'>
                        spids: [100 102]
                      )
                    }
                  spids: [99]
                )
              ]
              spids: [99]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:value)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(expr)} {(DQ (${ VSub_Name cols))} {(Lit_Other ':')} 
                                {(SQ <'\\([0-9]*\\)'>)}
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [106 120]
                      )
                    }
                  spids: [105]
                )
              ]
              spids: [105]
            )
            (C {(assertNotNull)} {(DQ ('unexpected screen width (') (${ VSub_Name cols) (')'))} 
              {(DQ (${ VSub_Name value))}
            )
          ]
          spids: [96]
        )
      spids: [92 95]
    )
    (FuncDef
      name: testGetoptVers
      body: 
        (BraceGroup
          children: [
            (While
              cond: [(Sentence child:(C {(read)} {(desc)} {(mock)} {(want)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (C {(assertEquals)} {(DQ (${ VSub_Name desc))} 
                      {
                        (DQ 
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(_flags_getopt_vers)} {(DQ (${ VSub_Name mock))})]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [176 184]
                          )
                        )
                      } {(DQ (${ VSub_Name want))}
                    )
                  ]
                  spids: [164 194]
                )
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('standard mock_getopt_std ') (${ VSub_Name __FLAGS_GETOPT_VERS_STD) ('\n') 
                        ('enhanced mock_getopt_enh ') (${ VSub_Name __FLAGS_GETOPT_VERS_ENH) ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [196]
                )
              ]
            )
          ]
          spids: [146]
        )
      spids: [142 145]
    )
    (FuncDef
      name: mock_getopt_std
      body: 
        (BraceGroup
          children: [
            (Sentence child:(C {(echo)} {(SQ <' -- --foo'>)}) terminator:<Op_Semi ';'>)
            (Sentence
              child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
              terminator: <Op_Semi ';'>
            )
          ]
          spids: [222]
        )
      spids: [218 221]
    )
    (FuncDef
      name: mock_getopt_enh
      body: 
        (BraceGroup
          children: [
            (Sentence child:(C {(echo)} {(SQ <' --foo --'>)}) terminator:<Op_Semi ';'>)
            (Sentence
              child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
              terminator: <Op_Semi ';'>
            )
          ]
          spids: [245]
        )
      spids: [241 244]
    )
    (FuncDef
      name: testGenOptStr
      body: 
        (BraceGroup
          children: [
            (C {(_testGenOptStr)} {(SQ )} {(SQ )})
            (C {(DEFINE_boolean)} {(bool)} {(false)} {(SQ <'boolean value'>)} {(b)})
            (C {(_testGenOptStr)} {(SQ <b>)} {(SQ <bool>)})
            (C {(DEFINE_float)} {(float)} {(0.0)} {(SQ <'float value'>)} {(f)})
            (C {(_testGenOptStr)} {(SQ <'bf:'>)} {(SQ <'bool,float:'>)})
            (C {(DEFINE_integer)} {(int)} {(0)} {(SQ <'integer value'>)} {(i)})
            (C {(_testGenOptStr)} {(SQ <'bf:i:'>)} {(SQ <'bool,float:,int:'>)})
            (C {(DEFINE_string)} {(str)} {(0)} {(SQ <'string value'>)} {(s)})
            (C {(_testGenOptStr)} {(SQ <'bf:i:s:'>)} {(SQ <'bool,float:,int:,str:'>)})
            (C {(DEFINE_boolean)} {(help)} {(false)} {(SQ <'show help'>)} {(h)})
            (C {(_testGenOptStr)} {(SQ <'bf:i:s:h'>)} {(SQ <'bool,float:,int:,str:,help'>)})
          ]
          spids: [266]
        )
      spids: [262 265]
    )
    (FuncDef
      name: _testGenOptStr
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:short)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [412]
                )
              ]
              spids: [412]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:long)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [416]
                )
              ]
              spids: [416]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:result)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(_flags_genOptStr)} {(DQ (${ VSub_Name __FLAGS_OPTSTR_SHORT))})
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [422 430]
                      )
                    }
                  spids: [421]
                )
              ]
              spids: [421]
            )
            (C {(assertTrue)} {(SQ <'short option string generation failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(DQ (${ VSub_Name short))} {(DQ (${ VSub_Name result))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:result)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(_flags_genOptStr)} {(DQ (${ VSub_Name __FLAGS_OPTSTR_LONG))})
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [459 467]
                      )
                    }
                  spids: [458]
                )
              ]
              spids: [458]
            )
            (C {(assertTrue)} {(SQ <'long option string generation failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(DQ (${ VSub_Name long))} {(DQ (${ VSub_Name result))})
          ]
          spids: [409]
        )
      spids: [405 408]
    )
    (FuncDef
      name: testGetFlagInfo
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:__flags_blah_foobar)
                  op: Equal
                  rhs: {(SQ <1234>)}
                  spids: [503]
                )
              ]
              spids: [503]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rslt)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(_flags_getFlagInfo)} {(SQ <blah>)} {(SQ <foobar>)})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [511 521]
                      )
                    }
                  spids: [510]
                )
              ]
              spids: [510]
            )
            (C {(assertTrue)} {(SQ <'request for valid flag info failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <'invalid flag info returned'>)} 
              {(DQ (${ VSub_Name __flags_blah_foobar))} {(DQ (${ VSub_Name rslt))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rslt)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (SimpleCommand
                                words: [{(_flags_getFlagInfo)} {(SQ <blah>)} {(SQ <hubbabubba>)}]
                                redirects: [
                                  (Redir
                                    op_id: Redir_Great
                                    fd: -1
                                    arg_word: {(DQ (${ VSub_Name stdoutF))}
                                    spids: [565]
                                  )
                                  (Redir
                                    op_id: Redir_Great
                                    fd: 2
                                    arg_word: {(DQ (${ VSub_Name stderrF))}
                                    spids: [572]
                                  )
                                ]
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [554 578]
                      )
                    }
                  spids: [553]
                )
              ]
              spids: [553]
            )
            (C {(assertEquals)} {(SQ <'invalid flag did not result in an error'>)} 
              {(DQ (${ VSub_Name FLAGS_ERROR))} {($ VSub_QMark '$?')}
            )
            (C {(assertErrorMsg)} {(SQ <'missing flag info variable'>)})
          ]
          spids: [500]
        )
      spids: [496 499]
    )
    (FuncDef
      name: testItemInList
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:list)
                  op: Equal
                  rhs: {(SQ <'this is a test'>)}
                  spids: [612]
                )
              ]
              spids: [612]
            )
            (While
              cond: [(Sentence child:(C {(read)} {(desc)} {(item)} {(want)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_itemInList)} {(DQ (${ VSub_Name item))} {(DQ (${ VSub_Name list))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:got)
                          op: Equal
                          rhs: {($ VSub_QMark '$?')}
                          spids: [651]
                        )
                      ]
                      spids: [651]
                    )
                    (C {(assertEquals)} 
                      {(DQ (${ VSub_Name desc) (': itemInList(') (${ VSub_Name item) (')'))} {(DQ (${ VSub_Name got))} {(DQ (${ VSub_Name want))}
                    )
                  ]
                  spids: [633 681]
                )
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('lead_item       this  ') (${ VSub_Name FLAGS_TRUE) ('\n') 
                        ('middle_item     is    ') (${ VSub_Name FLAGS_TRUE) ('\n') ('last_item       test  ') (${ VSub_Name FLAGS_TRUE) ('\n') 
                        ('missing_item    asdf  ') (${ VSub_Name FLAGS_FALSE) ('\n') ('test_partial_te te    ') (${ VSub_Name FLAGS_FALSE) ('\n') 
                        ('test_partial_es es    ') (${ VSub_Name FLAGS_FALSE) ('\n') ('test_partial_st st    ') (${ VSub_Name FLAGS_FALSE) ('\n') 
                        ("empty_item      ''    ") (${ VSub_Name FLAGS_FALSE) ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [683]
                )
              ]
            )
            (C {(_flags_itemInList)} {(SQ <item>)} {(SQ )})
            (C {(assertFalse)} {(SQ <'empty lists should not match'>)} {($ VSub_QMark '$?')})
          ]
          spids: [609]
        )
      spids: [605 608]
    )
    (FuncDef
      name: testValidBool
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_BOOL_VALID)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validBool)} {(DQ (${ VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ VSub_Name value) (') did not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [771 796]
                )
              spids: [765 769]
            )
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_BOOL_INVALID)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validBool)} {(DQ (${ VSub_Name value))})
                    (C {(assertFalse)} {(DQ ('invalid value (') (${ VSub_Name value) (') validated'))} 
                      {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [815 840]
                )
              spids: [809 813]
            )
          ]
          spids: [753]
        )
      spids: [749 752]
    )
    (FuncDef
      name: _testValidFloat
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_INT_VALID)} {(${ VSub_Name TH_FLOAT_VALID)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validFloat)} {(DQ (${ VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ VSub_Name value) (') did not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [871 896]
                )
              spids: [861 869]
            )
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_FLOAT_INVALID)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validFloat)} {(DQ (${ VSub_Name value))})
                    (C {(assertFalse)} {(DQ ('invalid value (') (${ VSub_Name value) (') validated'))} 
                      {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [915 940]
                )
              spids: [909 913]
            )
          ]
          spids: [849]
        )
      spids: [845 848]
    )
    (FuncDef
      name: testValidFloatBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
              op_id: Op_DPipe
            )
            (C {(_testValidFloat)})
          ]
          spids: [949]
        )
      spids: [945 948]
    )
    (FuncDef
      name: testValidFloatExpr
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (FuncDef
                      name: _flags_useBuiltin
                      body: 
                        (BraceGroup
                          children: [
                            (Sentence
                              child: 
                                (ControlFlow
                                  token: <ControlFlow_Return return>
                                  arg_word: {(DQ (${ VSub_Name FLAGS_FALSE))}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [978]
                        )
                      spids: [974 977]
                    )
                    (C {(_testValidFloat)})
                  ]
                )
              spids: [971 995]
            )
          ]
          spids: [968]
        )
      spids: [964 967]
    )
    (FuncDef
      name: _testValidInt
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_INT_VALID)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validInt)} {(DQ (${ VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ VSub_Name value) (') did not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [1022 1047]
                )
              spids: [1016 1020]
            )
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_INT_INVALID)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validInt)} {(DQ (${ VSub_Name value))})
                    (C {(assertFalse)} 
                      {(DQ ('invalid value (') (${ VSub_Name value) (') should not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [1066 1091]
                )
              spids: [1060 1064]
            )
          ]
          spids: [1004]
        )
      spids: [1000 1003]
    )
    (FuncDef
      name: testValidIntBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
              op_id: Op_DPipe
            )
            (C {(_testValidInt)})
          ]
          spids: [1100]
        )
      spids: [1096 1099]
    )
    (FuncDef
      name: testValidIntExpr
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (FuncDef
                      name: _flags_useBuiltin
                      body: 
                        (BraceGroup
                          children: [
                            (Sentence
                              child: 
                                (ControlFlow
                                  token: <ControlFlow_Return return>
                                  arg_word: {(DQ (${ VSub_Name FLAGS_FALSE))}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [1129]
                        )
                      spids: [1125 1128]
                    )
                    (C {(_testValidInt)})
                  ]
                )
              spids: [1122 1146]
            )
          ]
          spids: [1119]
        )
      spids: [1115 1118]
    )
    (FuncDef
      name: _testMath
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:result)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(_flags_math)} {(1)})])
                        left_token: <Left_Backtick '`'>
                        spids: [1159 1163]
                      )
                    }
                  spids: [1158]
                )
              ]
              spids: [1158]
            )
            (C {(assertTrue)} {(SQ <'1 failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <1>)} {(1)} {(DQ (${ VSub_Name result))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:result)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(_flags_math)} {(SQ <'1 + 2'>)})])
                        left_token: <Left_Backtick '`'>
                        spids: [1192 1198]
                      )
                    }
                  spids: [1191]
                )
              ]
              spids: [1191]
            )
            (C {(assertTrue)} {(SQ <'1+2 failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <'1+2'>)} {(3)} {(DQ (${ VSub_Name result))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:result)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(_flags_math)} {(SQ <'1 + 2 + 3'>)})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [1227 1233]
                      )
                    }
                  spids: [1226]
                )
              ]
              spids: [1226]
            )
            (C {(assertTrue)} {(SQ <'1+2+3 failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <'1+2+3'>)} {(6)} {(DQ (${ VSub_Name result))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:result)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(_flags_math)})])
                        left_token: <Left_Backtick '`'>
                        spids: [1262 1264]
                      )
                    }
                  spids: [1261]
                )
              ]
              spids: [1261]
            )
            (C {(assertFalse)} {(SQ <'missing math succeeded'>)} {($ VSub_QMark '$?')})
          ]
          spids: [1155]
        )
      spids: [1151 1154]
    )
    (FuncDef
      name: testMathBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
              op_id: Op_DPipe
            )
            (C {(_testMath)})
          ]
          spids: [1282]
        )
      spids: [1278 1281]
    )
    (FuncDef
      name: testMathExpr
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (FuncDef
                      name: _flags_useBuiltin
                      body: 
                        (BraceGroup
                          children: [
                            (Sentence
                              child: 
                                (ControlFlow
                                  token: <ControlFlow_Return return>
                                  arg_word: {(DQ (${ VSub_Name FLAGS_FALSE))}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [1311]
                        )
                      spids: [1307 1310]
                    )
                    (C {(_testMath)})
                  ]
                )
              spids: [1304 1328]
            )
          ]
          spids: [1301]
        )
      spids: [1297 1300]
    )
    (FuncDef
      name: _testStrlen
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:len)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(_flags_strlen)})])
                        left_token: <Left_Backtick '`'>
                        spids: [1341 1343]
                      )
                    }
                  spids: [1340]
                )
              ]
              spids: [1340]
            )
            (C {(assertTrue)} {(SQ <'missing argument failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <'missing argument'>)} {(0)} {(DQ (${ VSub_Name len))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:len)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(_flags_strlen)} {(SQ )})])
                        left_token: <Left_Backtick '`'>
                        spids: [1372 1377]
                      )
                    }
                  spids: [1371]
                )
              ]
              spids: [1371]
            )
            (C {(assertTrue)} {(SQ <'empty argument failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <'empty argument'>)} {(0)} {(DQ (${ VSub_Name len))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:len)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(_flags_strlen)} {(abc123)})])
                        left_token: <Left_Backtick '`'>
                        spids: [1406 1410]
                      )
                    }
                  spids: [1405]
                )
              ]
              spids: [1405]
            )
            (C {(assertTrue)} {(SQ <'single-word failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <single-word>)} {(6)} {(DQ (${ VSub_Name len))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:len)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(_flags_strlen)} {(SQ <'This is a test'>)})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [1439 1445]
                      )
                    }
                  spids: [1438]
                )
              ]
              spids: [1438]
            )
            (C {(assertTrue)} {(SQ <'multi-word failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <multi-word>)} {(14)} {(DQ (${ VSub_Name len))})
          ]
          spids: [1337]
        )
      spids: [1333 1336]
    )
    (FuncDef
      name: testStrlenBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
              op_id: Op_DPipe
            )
            (C {(_testStrlen)})
          ]
          spids: [1478]
        )
      spids: [1474 1477]
    )
    (FuncDef
      name: testStrlenExpr
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (FuncDef
                      name: _flags_useBuiltin
                      body: 
                        (BraceGroup
                          children: [
                            (Sentence
                              child: 
                                (ControlFlow
                                  token: <ControlFlow_Return return>
                                  arg_word: {(DQ (${ VSub_Name FLAGS_FALSE))}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [1507]
                        )
                      spids: [1503 1506]
                    )
                    (C {(_testStrlen)})
                  ]
                )
              spids: [1500 1524]
            )
          ]
          spids: [1497]
        )
      spids: [1493 1496]
    )
    (FuncDef
      name: oneTimeSetUp
      body: 
        (BraceGroup
          children: [
            (C {(th_oneTimeSetUp)})
            (AndOr
              children: [
                (C {(_flags_useBuiltin)})
                (C {(th_warn)} {(SQ <'Shell built-ins not supported. Some tests will be skipped.'>)})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [1533]
        )
      spids: [1529 1532]
    )
    (FuncDef
      name: tearDown
      body: (BraceGroup children:[(C {(flags_reset)})] spids:[1559])
      spids: [1555 1558]
    )
    (AndOr
      children: [
        (C {(Lit_Other '[')} {(-n)} 
          {
            (DQ 
              (BracedVarSub
                token: <VSub_Name ZSH_VERSION>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                spids: [1578 1581]
              )
            )
          } {(Lit_Other ']')}
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:SHUNIT_PARENT)
              op: Equal
              rhs: {($ VSub_Number '$0')}
              spids: [1588]
            )
          ]
          spids: [1588]
        )
      ]
      op_id: Op_DAmp
    )
    (C {(.)} {(DQ (${ VSub_Name TH_SHUNIT))})
  ]
)