(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: 16777215
                  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: T
                  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: [223]
        )
      spids: [219 222]
    )
    (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: [246]
        )
      spids: [242 245]
    )
    (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: [267]
        )
      spids: [263 266]
    )
    (FuncDef
      name: _testGenOptStr
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:short)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [413]
                )
              ]
              spids: [413]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:long)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [417]
                )
              ]
              spids: [417]
            )
            (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: [423 431]
                      )
                    }
                  spids: [422]
                )
              ]
              spids: [422]
            )
            (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: [460 468]
                      )
                    }
                  spids: [459]
                )
              ]
              spids: [459]
            )
            (C {(assertTrue)} {(SQ <'long option string generation failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(DQ (${ VSub_Name long))} {(DQ (${ VSub_Name result))})
          ]
          spids: [410]
        )
      spids: [406 409]
    )
    (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: [504]
                )
              ]
              spids: [504]
            )
            (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: [512 522]
                      )
                    }
                  spids: [511]
                )
              ]
              spids: [511]
            )
            (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: 16777215
                                    arg_word: {(DQ (${ VSub_Name stdoutF))}
                                    spids: [566]
                                  )
                                  (Redir
                                    op_id: Redir_Great
                                    fd: 2
                                    arg_word: {(DQ (${ VSub_Name stderrF))}
                                    spids: [573]
                                  )
                                ]
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [555 579]
                      )
                    }
                  spids: [554]
                )
              ]
              spids: [554]
            )
            (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: [501]
        )
      spids: [497 500]
    )
    (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: [613]
                )
              ]
              spids: [613]
            )
            (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: [652]
                        )
                      ]
                      spids: [652]
                    )
                    (C {(assertEquals)} 
                      {(DQ (${ VSub_Name desc) (': itemInList(') (${ VSub_Name item) (')'))} {(DQ (${ VSub_Name got))} {(DQ (${ VSub_Name want))}
                    )
                  ]
                  spids: [634 682]
                )
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  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: T
                  spids: [684]
                )
              ]
            )
            (C {(_flags_itemInList)} {(SQ <item>)} {(SQ )})
            (C {(assertFalse)} {(SQ <'empty lists should not match'>)} {($ VSub_QMark '$?')})
          ]
          spids: [610]
        )
      spids: [606 609]
    )
    (FuncDef
      name: testValidBool
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_BOOL_VALID)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validBool)} {(DQ (${ VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ VSub_Name value) (') did not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [773 798]
                )
              spids: [767 771]
            )
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_BOOL_INVALID)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validBool)} {(DQ (${ VSub_Name value))})
                    (C {(assertFalse)} {(DQ ('invalid value (') (${ VSub_Name value) (') validated'))} 
                      {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [817 842]
                )
              spids: [811 815]
            )
          ]
          spids: [755]
        )
      spids: [751 754]
    )
    (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: F
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validFloat)} {(DQ (${ VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ VSub_Name value) (') did not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [873 898]
                )
              spids: [863 871]
            )
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_FLOAT_INVALID)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validFloat)} {(DQ (${ VSub_Name value))})
                    (C {(assertFalse)} {(DQ ('invalid value (') (${ VSub_Name value) (') validated'))} 
                      {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [917 942]
                )
              spids: [911 915]
            )
          ]
          spids: [851]
        )
      spids: [847 850]
    )
    (FuncDef
      name: testValidFloatBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testValidFloat)})
          ]
          spids: [951]
        )
      spids: [947 950]
    )
    (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: [980]
                        )
                      spids: [976 979]
                    )
                    (C {(_testValidFloat)})
                  ]
                )
              spids: [973 997]
            )
          ]
          spids: [970]
        )
      spids: [966 969]
    )
    (FuncDef
      name: _testValidInt
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_INT_VALID)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validInt)} {(DQ (${ VSub_Name value))})
                    (C {(assertTrue)} 
                      {(DQ ('valid value (') (${ VSub_Name value) (') did not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [1024 1049]
                )
              spids: [1018 1022]
            )
            (ForEach
              iter_name: value
              iter_words: [{(${ VSub_Name TH_INT_INVALID)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(_flags_validInt)} {(DQ (${ VSub_Name value))})
                    (C {(assertFalse)} 
                      {(DQ ('invalid value (') (${ VSub_Name value) (') should not validate'))} {($ VSub_QMark '$?')}
                    )
                  ]
                  spids: [1068 1093]
                )
              spids: [1062 1066]
            )
          ]
          spids: [1006]
        )
      spids: [1002 1005]
    )
    (FuncDef
      name: testValidIntBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testValidInt)})
          ]
          spids: [1102]
        )
      spids: [1098 1101]
    )
    (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: [1131]
                        )
                      spids: [1127 1130]
                    )
                    (C {(_testValidInt)})
                  ]
                )
              spids: [1124 1148]
            )
          ]
          spids: [1121]
        )
      spids: [1117 1120]
    )
    (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: [1161 1165]
                      )
                    }
                  spids: [1160]
                )
              ]
              spids: [1160]
            )
            (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: [1194 1200]
                      )
                    }
                  spids: [1193]
                )
              ]
              spids: [1193]
            )
            (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: [1229 1235]
                      )
                    }
                  spids: [1228]
                )
              ]
              spids: [1228]
            )
            (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: [1264 1266]
                      )
                    }
                  spids: [1263]
                )
              ]
              spids: [1263]
            )
            (C {(assertFalse)} {(SQ <'missing math succeeded'>)} {($ VSub_QMark '$?')})
          ]
          spids: [1157]
        )
      spids: [1153 1156]
    )
    (FuncDef
      name: testMathBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testMath)})
          ]
          spids: [1284]
        )
      spids: [1280 1283]
    )
    (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: [1313]
                        )
                      spids: [1309 1312]
                    )
                    (C {(_testMath)})
                  ]
                )
              spids: [1306 1330]
            )
          ]
          spids: [1303]
        )
      spids: [1299 1302]
    )
    (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: [1343 1345]
                      )
                    }
                  spids: [1342]
                )
              ]
              spids: [1342]
            )
            (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: [1374 1379]
                      )
                    }
                  spids: [1373]
                )
              ]
              spids: [1373]
            )
            (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: [1408 1412]
                      )
                    }
                  spids: [1407]
                )
              ]
              spids: [1407]
            )
            (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: [1441 1447]
                      )
                    }
                  spids: [1440]
                )
              ]
              spids: [1440]
            )
            (C {(assertTrue)} {(SQ <'multi-word failed'>)} {($ VSub_QMark '$?')})
            (C {(assertEquals)} {(SQ <multi-word>)} {(14)} {(DQ (${ VSub_Name len))})
          ]
          spids: [1339]
        )
      spids: [1335 1338]
    )
    (FuncDef
      name: testStrlenBuiltin
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              children: [(C {(_flags_useBuiltin)}) (C {(startSkipping)})]
            )
            (C {(_testStrlen)})
          ]
          spids: [1480]
        )
      spids: [1476 1479]
    )
    (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: [1509]
                        )
                      spids: [1505 1508]
                    )
                    (C {(_testStrlen)})
                  ]
                )
              spids: [1502 1526]
            )
          ]
          spids: [1499]
        )
      spids: [1495 1498]
    )
    (FuncDef
      name: oneTimeSetUp
      body: 
        (BraceGroup
          children: [
            (C {(th_oneTimeSetUp)})
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(_flags_useBuiltin)})
                (C {(th_warn)} {(SQ <'Shell built-ins not supported. Some tests will be skipped.'>)})
              ]
            )
          ]
          spids: [1535]
        )
      spids: [1531 1534]
    )
    (FuncDef
      name: tearDown
      body: (BraceGroup children:[(C {(flags_reset)})] spids:[1561])
      spids: [1557 1560]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [
        (C {(Lit_Other '[')} {(-n)} 
          {
            (DQ 
              (BracedVarSub
                token: <VSub_Name ZSH_VERSION>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(EmptyPart)})
                spids: [1580 1583]
              )
            )
          } {(Lit_Other ']')}
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:SHUNIT_PARENT)
              op: Equal
              rhs: {($ VSub_Number '$0')}
              spids: [1590]
            )
          ]
          spids: [1590]
        )
      ]
    )
    (C {(.)} {(DQ (${ VSub_Name TH_SHUNIT))})
  ]
)