(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))}) ] )