(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expectedF) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:TMPDIR span_id:49) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (tmp)} ) ) (/expected) ) } spids: [46] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:returnF) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:TMPDIR span_id:60) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (tmp)} ) ) (/return) ) } spids: [57] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stdoutF) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:TMPDIR span_id:71) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (tmp)} ) ) (/STDOUT) ) } spids: [68] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stderrF) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:TMPDIR span_id:82) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (tmp)} ) ) (/STDERR) ) } spids: [79] ) ] ) (C {(.)} {(./shflags_test_helpers)}) (command.ShFunction name: testHelp body: (command.BraceGroup children: [ (C {(_testHelp)} {(SQ (Token id:Id.Lit_Chars val:-h span_id:109))}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(flags_getoptIsEnh)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:117) ) ] ) (C {(_testHelp)} {(SQ (Token id:Id.Lit_Chars val:--help span_id:123))}) ] ) ) (command.ShFunction name: _testHelp body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:flag) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [136] ) ] ) (C {(th_clearReturn)}) (command.Subshell command_list: (command.CommandList children: [ (command.Simple words: [{(FLAGS)} {(DQ (${ Id.VSub_Name flag))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:159) fd: -1 arg_word: {(DQ (${ Id.VSub_Name stdoutF))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:166) fd: 2 arg_word: {(DQ (${ Id.VSub_Name stderrF))} ) ] ) (command.Simple words: [{(echo)} {($ Id.VSub_QMark '$?')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:178) fd: -1 arg_word: {(DQ (${ Id.VSub_Name returnF))} ) ] ) ] ) ) (C {(assertFalse)} { (SQ (Token id: Id.Lit_Chars val: 'short help request should have returned a false exit code.' span_id: 194 ) ) } { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:200) command_list: (command.CommandList children:[(C {(th_queryReturn)})]) ) ) } ) (command.Simple words: [ {(grep)} {(SQ (Token id:Id.Lit_Chars val:'show this help' span_id:209))} {(DQ (${ Id.VSub_Name stderrF))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:218) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:grepped) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [222] ) ] ) (C {(assertTrue)} { (SQ (Token id: Id.Lit_Chars val: 'short request for help should have produced some help output.' span_id: 231 ) ) } {(${ Id.VSub_Name grepped)} ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name grepped)} {(-ne)} {(DQ (${ Id.VSub_Name FLAGS_TRUE))} {(Id.Lit_RBracket ']')} ) (C {(th_showOutput)}) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAGS_HELP) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'this is a test' span_id:272))} spids: [270] ) ] ) (command.Simple words: [{(FLAGS)} {(DQ (${ Id.VSub_Name flag))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:284) fd: -1 arg_word: {(DQ (${ Id.VSub_Name stdoutF))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:291) fd: 2 arg_word: {(DQ (${ Id.VSub_Name stderrF))} ) ] ) ] ) ) (command.Simple words: [ {(grep)} {(SQ (Token id:Id.Lit_Chars val:'this is a test' span_id:305))} {(DQ (${ Id.VSub_Name stderrF))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:314) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:grepped) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [318] ) ] ) (C {(assertTrue)} { (SQ (Token id: Id.Lit_Chars val: 'setting FLAGS_HELP did not produce expected result' span_id: 325 ) ) } {(${ Id.VSub_Name grepped)} ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name grepped)} {(-ne)} {(DQ (${ Id.VSub_Name FLAGS_TRUE))} {(Id.Lit_RBracket ']')} ) (C {(th_showOutput)}) ] ) (command.Subshell command_list: (command.CommandList children: [ (C {(DEFINE_boolean)} {(b)} {(false)} {(DQ ("help string containing a ' char"))} {(b)}) (command.Simple words: [{(FLAGS)} {(DQ (${ Id.VSub_Name flag))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:383) fd: -1 arg_word: {(DQ (${ Id.VSub_Name stdoutF))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:390) fd: 2 arg_word: {(DQ (${ Id.VSub_Name stderrF))} ) ] ) ] ) ) (command.Simple words: [ {(grep)} {(DQ ("help string containing a ' char"))} {(DQ (${ Id.VSub_Name stderrF))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:413) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:grepped) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [417] ) ] ) (C {(assertTrue)} {(DQ ("help strings containing apostrophes don't work"))} {(${ Id.VSub_Name grepped)} ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name grepped)} {(-ne)} {(DQ (${ Id.VSub_Name FLAGS_TRUE))} {(Id.Lit_RBracket ']')} ) (C {(th_showOutput)}) ] ) ] ) ) (command.ShFunction name: mock_flags_columns body: (command.BraceGroup children:[(C {(echo)} {(80)})]) ) (command.ShFunction name: _doDefines body: (command.BraceGroup children: [ (C {(DEFINE_boolean)} {(SQ (Token id:Id.Lit_Chars val:force span_id:479))} {(false)} {(SQ )} {(f)} ) ] ) ) (command.ShFunction name: testStandardHelpOutput body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [(C {(flags_getoptIsStd)}) (C {(startSkipping)})] ) (C {(_doDefines)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:help) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'USAGE: standard [flags] args' span_id:512))} spids: [510] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:519) fd: -1 arg_word: {(DQ (${ Id.VSub_Name expectedF))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:526) fd: -1 here_begin: {(EOF)} here_end_span_id: 537 stdin_parts: [ (${ Id.VSub_Name help) ('\n') ('flags:\n') (' -f (default: false)\n') (' -h show this help (default: false)\n') ] ) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.ShFunction name: _flags_columns body: (command.BraceGroup children: [ (command.Sentence child: (C {(mock_flags_columns)}) terminator: (Token id:Id.Op_Semi val:';' span_id:549) ) ] ) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAGS_HELP) op: assign_op.Equal rhs: {(${ Id.VSub_Name help)} spids: [554] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:558) ) (command.Simple words: [{(FLAGS)} {(-h)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:565) fd: -1 arg_word: {(DQ (${ Id.VSub_Name stdoutF))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:572) fd: 2 arg_word: {(DQ (${ Id.VSub_Name stderrF))} ) ] ) ] ) ) (command.Simple words: [{(diff)} {(DQ (${ Id.VSub_Name expectedF))} {(DQ (${ Id.VSub_Name stderrF))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:597) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r3turn) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [601] ) ] ) (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'unexpected help output' span_id:608))} {(${ Id.VSub_Name r3turn)} ) (C {(th_showOutput)} {(${ Id.VSub_Name r3turn)} {(DQ (${ Id.VSub_Name stdoutF))} {(DQ (${ Id.VSub_Name stderrF))} ) ] ) ) (command.ShFunction name: testEnhancedHelpOutput body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [(C {(flags_getoptIsEnh)}) (C {(startSkipping)})] ) (C {(_doDefines)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:help) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'USAGE: enhanced [flags] args' span_id:657))} spids: [655] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:664) fd: -1 arg_word: {(DQ (${ Id.VSub_Name expectedF))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:671) fd: -1 here_begin: {(EOF)} here_end_span_id: 682 stdin_parts: [ (${ Id.VSub_Name help) ('\n') ('flags:\n') (' -f,--[no]force: (default: false)\n') (' -h,--help: show this help (default: false)\n') ] ) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.ShFunction name: _flags_columns body: (command.BraceGroup children: [ (command.Sentence child: (C {(mock_flags_columns)}) terminator: (Token id:Id.Op_Semi val:';' span_id:694) ) ] ) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAGS_HELP) op: assign_op.Equal rhs: {(${ Id.VSub_Name help)} spids: [703] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:707) ) (command.Simple words: [{(FLAGS)} {(-h)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:714) fd: -1 arg_word: {(DQ (${ Id.VSub_Name stdoutF))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:721) fd: 2 arg_word: {(DQ (${ Id.VSub_Name stderrF))} ) ] ) ] ) ) (command.Simple words: [{(diff)} {(DQ (${ Id.VSub_Name expectedF))} {(DQ (${ Id.VSub_Name stderrF))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:746) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:differed) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [750] ) ] ) (C {(assertTrue)} {(SQ (Token id:Id.Lit_Chars val:'unexpected help output' span_id:757))} {(${ Id.VSub_Name differed)} ) (C {(th_showOutput)} {(${ Id.VSub_Name differed)} {(DQ (${ Id.VSub_Name stdoutF))} {(DQ (${ Id.VSub_Name stderrF))} ) ] ) ) (command.ShFunction name: oneTimeSetUp body: (command.BraceGroup children: [ (C {(th_oneTimeSetUp)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(flags_getoptIsStd)}) terminator: (Token id:Id.Op_Semi val:';' span_id:800) ) ] action: [ (C {(th_warn)} { (SQ (Token id: Id.Lit_Chars val: 'Standard version of getopt found. Enhanced tests will be skipped.' span_id: 808 ) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:812) ) ] spids: [797 802] ) ] ) (C {(th_warn)} { (SQ (Token id: Id.Lit_Chars val: 'Enhanced version of getopt found. Standard tests will be skipped.' span_id: 821 ) ) } ) ] ) ) (command.ShFunction name:setUp body:(command.BraceGroup children:[(C {(flags_reset)})])) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:ZSH_VERSION span_id:851) 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: [860] ) ] ) ] ) (C {(.)} {(DQ (${ Id.VSub_Name TH_SHUNIT))}) ] )