(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: <Id.VSub_Name TMPDIR> 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: <Id.VSub_Name TMPDIR> 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: <Id.Left_Backtick '`'> 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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (C {<expr>} {(DQ (${ Id.VSub_Name cols))} {<Id.Lit_Other ':'>} {(SQ <'\\([0-9]*\\)'>)} ) ] ) ) } 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: <Id.KW_While while> cond: [ (command.Sentence child: (C {<read>} {<desc>} {<mock>} {<want>}) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (C {<assertEquals>} {(DQ (${ Id.VSub_Name desc))} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<_flags_getopt_vers>} {(DQ (${ Id.VSub_Name mock))})] ) ) ) } {(DQ (${ Id.VSub_Name want))} ) ] ) redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> 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 <' -- --foo'>)}) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) terminator: <Id.Op_Semi _> ) ] ) ) (command.ShFunction name: mock_getopt_enh body: (command.BraceGroup children: [ (command.Sentence child: (C {<echo>} {(SQ <' --foo --'>)}) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) terminator: <Id.Op_Semi _> ) ] ) ) (command.ShFunction name: testGenOptStr body: (command.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'>)}) ] ) ) (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: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<_flags_genOptStr>} {(DQ (${ Id.VSub_Name __FLAGS_OPTSTR_SHORT))}) ] ) ) } spids: [431] ) ] ) (C {<assertTrue>} {(SQ <'short option string generation failed'>)} {($ 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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (C {<_flags_genOptStr>} {(DQ (${ Id.VSub_Name __FLAGS_OPTSTR_LONG))}) ] ) ) } spids: [468] ) ] ) (C {<assertTrue>} {(SQ <'long option string generation failed'>)} {($ 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 <1234>)} spids: [515] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rslt) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [(C {<_flags_getFlagInfo>} {(SQ <blah>)} {(SQ <foobar>)})] ) ) } spids: [522] ) ] ) (C {<assertTrue>} {(SQ <'request for valid flag info failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <'invalid flag info returned'>)} {(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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [ (command.Simple words: [{<_flags_getFlagInfo>} {(SQ <blah>)} {(SQ <hubbabubba>)}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ (${ Id.VSub_Name stdoutF))} ) (redir.Redir op: <Id.Redir_Great '2>'> fd: 2 arg_word: {(DQ (${ Id.VSub_Name stderrF))} ) ] ) ] ) ) } spids: [567] ) ] ) (C {<assertEquals>} {(SQ <'invalid flag did not result in an error'>)} {(DQ (${ Id.VSub_Name FLAGS_ERROR))} {($ Id.VSub_QMark '$?')} ) (C {<assertErrorMsg>} {(SQ <'missing flag info variable'>)}) ] ) ) (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 <'this is a test'>)} spids: [628] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (C {<read>} {<desc>} {<item>} {<want>}) terminator: <Id.Op_Semi _> ) ] 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: <Id.Redir_DLess '<<'> 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 <item>)} {(SQ )}) (C {<assertFalse>} {(SQ <'empty lists should not match'>)} {($ 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: <Id.ControlFlow_Return return> arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))} ) terminator: <Id.Op_Semi _> ) ] ) ) (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: <Id.ControlFlow_Return return> arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))} ) terminator: <Id.Op_Semi _> ) ] ) ) (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: <Id.Left_Backtick '`'> command_list: (command.CommandList children:[(C {<_flags_math>} {<1>})]) ) } spids: [1176] ) ] ) (C {<assertTrue>} {(SQ <'1 failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <1>)} {<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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [(C {<_flags_math>} {(SQ <'1 + 2'>)})] ) ) } spids: [1211] ) ] ) (C {<assertTrue>} {(SQ <'1+2 failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <'1+2'>)} {<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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [(C {<_flags_math>} {(SQ <'1 + 2 + 3'>)})] ) ) } spids: [1248] ) ] ) (C {<assertTrue>} {(SQ <'1+2+3 failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <'1+2+3'>)} {<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: <Id.Left_Backtick '`'> command_list: (command.CommandList children:[(C {<_flags_math>})]) ) } spids: [1285] ) ] ) (C {<assertFalse>} {(SQ <'missing math succeeded'>)} {($ 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: <Id.ControlFlow_Return return> arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))} ) terminator: <Id.Op_Semi _> ) ] ) ) (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: <Id.Left_Backtick '`'> command_list: (command.CommandList children:[(C {<_flags_strlen>})]) ) } spids: [1366] ) ] ) (C {<assertTrue>} {(SQ <'missing argument failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <'missing argument'>)} {<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: <Id.Left_Backtick '`'> command_list: (command.CommandList children:[(C {<_flags_strlen>} {(SQ )})]) ) } spids: [1399] ) ] ) (C {<assertTrue>} {(SQ <'empty argument failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <'empty argument'>)} {<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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [(C {<_flags_strlen>} {<abc123>})] ) ) } spids: [1435] ) ] ) (C {<assertTrue>} {(SQ <'single-word failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <single-word>)} {<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: <Id.Left_Backtick '`'> command_list: (command.CommandList children: [(C {<_flags_strlen>} {(SQ <'This is a test'>)})] ) ) } spids: [1470] ) ] ) (C {<assertTrue>} {(SQ <'multi-word failed'>)} {($ Id.VSub_QMark '$?')}) (C {<assertEquals>} {(SQ <multi-word>)} {<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: <Id.ControlFlow_Return return> arg_word: {(DQ (${ Id.VSub_Name FLAGS_FALSE))} ) terminator: <Id.Op_Semi _> ) ] ) ) (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 <'Shell built-ins not supported. Some tests will be skipped.'>)}) ] ) ] ) ) (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: <Id.VSub_Name ZSH_VERSION> 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))}) ] )