(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'log --grep/--author/--regexp-ignore-case/-S/-G' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: test_log body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [22] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:kind) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [26] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:needle) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [30] ) ] ) (C {(shift)} {(3)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rest) op: assign_op.Equal rhs: {($ Id.VSub_At '$@')} spids: [39] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$kind')} arms: [ (case_arm pat_list: [{(--) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$kind') (Id.Lit_Equals '=') ($ Id.VSub_DollarName '$needle') } spids: [56] ) ] ) ] spids: [51 53 62 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:opt) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$kind') ($ Id.VSub_DollarName '$needle')} spids: [69] ) ] ) ] spids: [65 66 74 -1] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$expect')} arms: [ (case_arm pat_list: [{(expect_nomatch)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:match) op: assign_op.Equal rhs: {(nomatch)} spids: [91] ) ] ) ] spids: [87 88 95 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:match) op: assign_op.Equal rhs: {(match)} spids: [102] ) ] ) ] spids: [98 99 106 -1] ) ] ) (C {(test_expect_success)} { (DQ ('log ') ($ Id.VSub_DollarName '$kind') (braced_var_sub token: (Token id:Id.VSub_Name val:rest span_id:119) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {(' ') ($ Id.VSub_DollarName '$rest')} ) ) (' (') ($ Id.VSub_DollarName '$match') (')') ) } { (DQ ('\n') ('\t\tgit log ') ($ Id.VSub_DollarName '$rest') (' ') ($ Id.VSub_DollarName '$opt') (' --format=%H >actual &&\n') ('\t\ttest_cmp ') ($ Id.VSub_DollarName '$expect') (' actual\n') ('\t') ) } ) ] ) ) (command.ShFunction name: test_log_icase body: (command.BraceGroup children: [ (C {(test_log)} {($ Id.VSub_At '$@')} {(--regexp-ignore-case)}) (C {(test_log)} {($ Id.VSub_At '$@')} {(-i)}) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:177) (Token id:Id.Lit_Chars val:'\t>expect_nomatch &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\n' span_id:179) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:180) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify HEAD >expect_initial &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\n' span_id:185) (Token id:Id.Lit_Chars val:'\techo Picked >file &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:187) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:188) (Token id: Id.Lit_Chars val: '\tgit commit --author="Another Person <another@example.com>" -m second &&\n' span_id: 189 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify HEAD >expect_second\n' span_id:190) ) } ) (C {(test_log)} {(expect_initial)} {(--grep)} {(initial)}) (C {(test_log)} {(expect_nomatch)} {(--grep)} {(InItial)}) (C {(test_log_icase)} {(expect_initial)} {(--grep)} {(InItial)}) (C {(test_log_icase)} {(expect_nomatch)} {(--grep)} {(initail)}) (C {(test_log)} {(expect_second)} {(--author)} {(Person)}) (C {(test_log)} {(expect_nomatch)} {(--author)} {(person)}) (C {(test_log_icase)} {(expect_second)} {(--author)} {(person)}) (C {(test_log_icase)} {(expect_nomatch)} {(--author)} {(spreon)}) (C {(test_log)} {(expect_nomatch)} {(-G)} {(picked)}) (C {(test_log)} {(expect_second)} {(-G)} {(Picked)}) (C {(test_log_icase)} {(expect_nomatch)} {(-G)} {(pickle)}) (C {(test_log_icase)} {(expect_second)} {(-G)} {(picked)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log -G --textconv (missing textconv tool)' span_id:296))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:300) (Token id: Id.Lit_Chars val: '\techo "* diff=test" >.gitattributes &&\n' span_id: 301 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -c diff.test.textconv=missing log -Gfoo &&\n' span_id: 302 ) (Token id:Id.Lit_Chars val:'\trm .gitattributes\n' span_id:303) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log -G --no-textconv (missing textconv tool)' span_id:310))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id: Id.Lit_Chars val: '\techo "* diff=test" >.gitattributes &&\n' span_id: 315 ) (Token id: Id.Lit_Chars val: '\tgit -c diff.test.textconv=missing log -Gfoo --no-textconv >actual &&\n' span_id: 316 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect_nomatch actual &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\trm .gitattributes\n' span_id:318) ) } ) (C {(test_log)} {(expect_nomatch)} {(-S)} {(picked)}) (C {(test_log)} {(expect_second)} {(-S)} {(Picked)}) (C {(test_log_icase)} {(expect_second)} {(-S)} {(picked)}) (C {(test_log_icase)} {(expect_nomatch)} {(-S)} {(pickle)}) (C {(test_log)} {(expect_nomatch)} {(-S)} {(p.cked)} {(--pickaxe-regex)}) (C {(test_log)} {(expect_second)} {(-S)} {(P.cked)} {(--pickaxe-regex)}) (C {(test_log_icase)} {(expect_second)} {(-S)} {(p.cked)} {(--pickaxe-regex)}) (C {(test_log_icase)} {(expect_nomatch)} {(-S)} {(p.ckle)} {(--pickaxe-regex)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log -S --textconv (missing textconv tool)' span_id:399))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:403) (Token id: Id.Lit_Chars val: '\techo "* diff=test" >.gitattributes &&\n' span_id: 404 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -c diff.test.textconv=missing log -Sfoo &&\n' span_id: 405 ) (Token id:Id.Lit_Chars val:'\trm .gitattributes\n' span_id:406) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log -S --no-textconv (missing textconv tool)' span_id:413))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:417) (Token id: Id.Lit_Chars val: '\techo "* diff=test" >.gitattributes &&\n' span_id: 418 ) (Token id: Id.Lit_Chars val: '\tgit -c diff.test.textconv=missing log -Sfoo --no-textconv >actual &&\n' span_id: 419 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect_nomatch actual &&\n' span_id:420) (Token id:Id.Lit_Chars val:'\trm .gitattributes\n' span_id:421) ) } ) (C {(test_done)}) ] )