(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:'git grep various.\n' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:26)
          fd: -1
          arg_word: {(hello.c)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:29)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 48
          stdin_parts: [
            ('#include <assert.h>\n')
            ('#include <stdio.h>\n')
            ('\n')
            ('int main(int argc, const char **argv)\n')
            ('{\n')
            ('\tprintf(')
            (Id.Right_DoubleQuote '"')
            ('Hello world.')
            (Id.Lit_Other '\\')
            (n)
            (Id.Right_DoubleQuote '"')
            (');\n')
            ('\treturn 0;\n')
            ('\t/* char ?? */\n')
            ('}\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:55) (Token id:Id.Lit_Chars val:'\t{\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\t\techo foo mmap bar\n' span_id:57) (Token id:Id.Lit_Chars val:'\t\techo foo_mmap bar\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\t\techo foo_mmap bar mmap\n' span_id:59) (Token id:Id.Lit_Chars val:'\t\techo foo mmap bar_mmap\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\t\techo foo_mmap bar mmap baz\n' span_id:61) (Token id:Id.Lit_Chars val:'\t} >file &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\t{\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\t\techo Hello world\n' span_id:64) (Token id:Id.Lit_Chars val:'\t\techo HeLLo world\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\t\techo Hello_world\n' span_id:66) (Token id:Id.Lit_Chars val:'\t\techo HeLLo_world\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\t} >hello_world &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\t{\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\t\techo "a+b*c"\n' span_id:70) (Token id:Id.Lit_Chars val:'\t\techo "a+bc"\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\t\techo "abc"\n' span_id:72) (Token id:Id.Lit_Chars val:'\t} >ab &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\techo vvv >v &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\techo ww w >w &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\techo x x xx x >x &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\techo y yy >y &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\techo zzz > z &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\tmkdir t &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\techo test >t/t &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\techo vvv >t/v &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\tmkdir t/a &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\techo vvv >t/a/v &&\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:84) (Token id:Id.Lit_Chars val:'\t\techo "line without leading space1"\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\t\techo " line with leading space1"\n' span_id:86) (Token id:Id.Lit_Chars val:'\t\techo " line with leading space2"\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\t\techo " line with leading space3"\n' span_id:88) (Token id:Id.Lit_Chars val:'\t\techo "line without leading space2"\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\t} >space &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgit commit -m initial\n' span_id:93)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep should not segfault with a bad input' span_id:100))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git grep "("\n' span_id:105)
        )
      }
    )
    (command.ForEach
      iter_name: H
      iter_words: [{(HEAD)} {(SQ )}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$H'))}
              arms: [
                (case_arm
                  pat_list: [{(HEAD)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:HC)
                          op: assign_op.Equal
                          rhs: {(SQ (Token id:Id.Lit_Chars val:'HEAD:' span_id:137))}
                          spids: [135]
                        )
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:L)
                          op: assign_op.Equal
                          rhs: {(SQ (Token id:Id.Lit_Chars val:HEAD span_id:142))}
                          spids: [140]
                        )
                      ]
                    )
                  ]
                  spids: [132 133 145 -1]
                )
                (case_arm
                  pat_list: [{(SQ )}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:HC)
                          op: assign_op.Equal
                          rhs: (word.Empty)
                          spids: [152]
                        )
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:L)
                          op: assign_op.Equal
                          rhs: {(SQ (Token id:Id.Lit_Chars val:'in working tree' span_id:156))}
                          spids: [154]
                        )
                      ]
                    )
                  ]
                  spids: [148 150 159 -1]
                )
              ]
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:174) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:175) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}file:1:foo mmap bar\n' span_id:176) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}file:3:foo_mmap bar mmap\n'
                    span_id: 177
                  ) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}file:4:foo mmap bar_mmap\n' span_id:178) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}file:5:foo_mmap bar mmap baz\n'
                    span_id: 179
                  ) (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:180) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit -c grep.linenumber=false grep -n -w -e mmap $H >actual &&\n'
                    span_id: 181
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:182) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:183)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:197) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}file:1:foo mmap bar\n' span_id:198) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}file:3:foo_mmap bar mmap\n'
                    span_id: 199
                  ) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}file:4:foo mmap bar_mmap\n' span_id:200) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}file:5:foo_mmap bar mmap baz\n'
                    span_id: 201
                  ) (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:202) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit -c grep.linenumber=true grep -w -e mmap $H >actual &&\n'
                    span_id: 203
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:204) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:205)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:218) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:219) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}file:foo mmap bar\n' span_id:220) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}file:foo_mmap bar mmap\n'
                    span_id: 221
                  ) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}file:foo mmap bar_mmap\n' span_id:222) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}file:foo_mmap bar mmap baz\n'
                    span_id: 223
                  ) (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:224) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\tgit -c grep.linenumber=true grep --no-line-number -w -e mmap $H >actual &&\n'
                    span_id: 225
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:226) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:227)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L') (' (w)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) 
                  (Token id:Id.Lit_Chars val:'\t\t: >expected &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git grep -n -w -e "^w" $H >actual &&\n' span_id:243) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 244
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:245)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L') (' (x)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:259) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:260) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}x:1:x x xx x\n' span_id:261) 
                  (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\t\tgit grep -n -w -e "x xx* x" $H >actual &&\n' span_id:263) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 264
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:265)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L') (' (y-1)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:279) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:280) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}y:1:y yy\n' span_id:281) 
                  (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t\tgit grep -n -w -e "^y" $H >actual &&\n' span_id:283) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 284
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:285)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L') (' (y-2)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:299) 
                  (Token id:Id.Lit_Chars val:'\t\t: >expected &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\t\tif git grep -n -w -e "^y y" $H >actual\n' span_id:301) 
                  (Token id:Id.Lit_Chars val:'\t\tthen\n' span_id:302) (Token id:Id.Lit_Chars val:'\t\t\techo should not have matched\n' span_id:303) 
                  (Token id:Id.Lit_Chars val:'\t\t\tcat actual\n' span_id:304) (Token id:Id.Lit_Chars val:'\t\t\tfalse\n' span_id:305) 
                  (Token id:Id.Lit_Chars val:'\t\telse\n' span_id:306) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expected actual\n' span_id:307) 
                  (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:308) (Token id:Id.Lit_Chars val:'\t' span_id:309)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep -w ') ($ Id.VSub_DollarName '$L') (' (z)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:323) 
                  (Token id:Id.Lit_Chars val:'\t\t: >expected &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\t\tif git grep -n -w -e "^z" $H >actual\n' span_id:325) 
                  (Token id:Id.Lit_Chars val:'\t\tthen\n' span_id:326) (Token id:Id.Lit_Chars val:'\t\t\techo should not have matched\n' span_id:327) 
                  (Token id:Id.Lit_Chars val:'\t\t\tcat actual\n' span_id:328) (Token id:Id.Lit_Chars val:'\t\t\tfalse\n' span_id:329) 
                  (Token id:Id.Lit_Chars val:'\t\telse\n' span_id:330) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expected actual\n' span_id:331) 
                  (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:332) (Token id:Id.Lit_Chars val:'\t' span_id:333)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' (t-1)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:347) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}t/t:1:test" >expected &&\n'
                    span_id: 348
                  ) (Token id:Id.Lit_Chars val:'\t\tgit grep -n -e test $H >actual &&\n' span_id:349) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 350
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:351)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' (t-2)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:365) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}t:1:test" >expected &&\n'
                    span_id: 366
                  ) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:367) 
                  (Token id:Id.Lit_Chars val:'\t\t\tcd t &&\n' span_id:368) (Token id:Id.Lit_Chars val:'\t\t\tgit grep -n -e test $H\n' span_id:369) 
                  (Token id:Id.Lit_Chars val:'\t\t) >actual &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:371) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:372)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' (t-3)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:386) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}t/t:1:test" >expected &&\n'
                    span_id: 387
                  ) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:388) 
                  (Token id:Id.Lit_Chars val:'\t\t\tcd t &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\t\t\tgit grep --full-name -n -e test $H\n' span_id:390) 
                  (Token id:Id.Lit_Chars val:'\t\t) >actual &&\n' span_id:391) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:392) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:393)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('grep -c ') ($ Id.VSub_DollarName '$L') (' (no /dev/null)'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:407) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t! git grep -c test $H | grep /dev/null\n'
                    span_id: 408
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:409)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --max-depth -1 ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:422) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:423) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}t/a/v:1:vvv\n' span_id:424) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}t/v:1:vvv\n'
                    span_id: 425
                  ) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}v:1:vvv\n' span_id:426) 
                  (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\t\tgit grep --max-depth -1 -n -e vvv $H >actual &&\n' span_id:428) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 429
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:430)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --max-depth 0 ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:443) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:444) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}v:1:vvv\n' span_id:445) 
                  (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:446) (Token id:Id.Lit_Chars val:'\t\tgit grep --max-depth 0 -n -e vvv $H >actual &&\n' span_id:447) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 448
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:449)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ("grep --max-depth 0 -- '*' ") ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:462) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:463) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}t/a/v:1:vvv\n' span_id:464) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}t/v:1:vvv\n'
                    span_id: 465
                  ) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}v:1:vvv\n' span_id:466) 
                  (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:467) (Token id:Id.Lit_Chars val:'\t\tgit grep --max-depth 0 -n -e vvv $H -- "*" >actual &&\n' span_id:468) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 469
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:470)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --max-depth 1 ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:483) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:484) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}t/v:1:vvv\n' span_id:485) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}v:1:vvv\n'
                    span_id: 486
                  ) (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:487) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit grep --max-depth 1 -n -e vvv $H >actual &&\n'
                    span_id: 488
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:489) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:490)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --max-depth 0 -- t ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:503) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:504) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}t/v:1:vvv\n' span_id:505) 
                  (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:506) (Token id:Id.Lit_Chars val:'\t\tgit grep --max-depth 0 -n -e vvv $H -- t >actual &&\n' span_id:507) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 508
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:509)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --max-depth 0 -- . t ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:522) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:523) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}t/v:1:vvv\n' span_id:524) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}v:1:vvv\n'
                    span_id: 525
                  ) (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:526) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit grep --max-depth 0 -n -e vvv $H -- . t >actual &&\n'
                    span_id: 527
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:528) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:529)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --max-depth 0 -- t . ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:542) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:543) (Token id:Id.Lit_Chars val:'\t\t\techo ${HC}t/v:1:vvv\n' span_id:544) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\techo ${HC}v:1:vvv\n'
                    span_id: 545
                  ) (Token id:Id.Lit_Chars val:'\t\t} >expected &&\n' span_id:546) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit grep --max-depth 0 -n -e vvv $H -- t . >actual &&\n'
                    span_id: 547
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:548) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:549)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' with grep.extendedRegexp=false'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:562) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:a+bc" >expected &&\n'
                    span_id: 563
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit -c grep.extendedRegexp=false grep "a+b*c" $H ab >actual &&\n'
                    span_id: 564
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:565) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:566)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' with grep.extendedRegexp=true'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:580) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:abc" >expected &&\n'
                    span_id: 581
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit -c grep.extendedRegexp=true grep "a+b*c" $H ab >actual &&\n'
                    span_id: 582
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:583) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:584)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' with grep.patterntype=basic'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:598) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:a+bc" >expected &&\n'
                    span_id: 599
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit -c grep.patterntype=basic grep "a+b*c" $H ab >actual &&\n'
                    span_id: 600
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:601) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:602)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' with grep.patterntype=extended'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:616) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:abc" >expected &&\n'
                    span_id: 617
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit -c grep.patterntype=extended grep "a+b*c" $H ab >actual &&\n'
                    span_id: 618
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:619) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:620)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' with grep.patterntype=fixed'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:634) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:a+b*c" >expected &&\n'
                    span_id: 635
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit -c grep.patterntype=fixed grep "a+b*c" $H ab >actual &&\n'
                    span_id: 636
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:637) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:638)
                )
              }
            )
            (C {(test_expect_success)} {(LIBPCRE)} 
              {(DQ ('grep ') ($ Id.VSub_DollarName '$L') (' with grep.patterntype=perl'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:654) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:a+b*c" >expected &&\n'
                    span_id: 655
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\tgit -c grep.patterntype=perl grep "a\\x{2b}b\\x{2a}c" $H ab >actual &&\n'
                    span_id: 656
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:657) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:658)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('grep ') ($ Id.VSub_DollarName '$L') 
                  (' with grep.patternType=default and grep.extendedRegexp=true')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:672) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:abc" >expected &&\n'
                    span_id: 673
                  ) (Token id:Id.Lit_Chars val:'\t\tgit \\\n' span_id:674) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t-c grep.patternType=default \\\n'
                    span_id: 675
                  ) (Token id:Id.Lit_Chars val:'\t\t\t-c grep.extendedRegexp=true \\\n' span_id:676) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgrep "a+b*c" $H ab >actual &&\n'
                    span_id: 677
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:678) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:679)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('grep ') ($ Id.VSub_DollarName '$L') 
                  (' with grep.extendedRegexp=true and grep.patternType=default')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:693) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:abc" >expected &&\n'
                    span_id: 694
                  ) (Token id:Id.Lit_Chars val:'\t\tgit \\\n' span_id:695) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t-c grep.extendedRegexp=true \\\n'
                    span_id: 696
                  ) (Token id:Id.Lit_Chars val:'\t\t\t-c grep.patternType=default \\\n' span_id:697) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgrep "a+b*c" $H ab >actual &&\n'
                    span_id: 698
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:699) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:700)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('grep ') ($ Id.VSub_DollarName '$L') 
                  (' with grep.patternType=extended and grep.extendedRegexp=false')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:714) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:abc" >expected &&\n'
                    span_id: 715
                  ) (Token id:Id.Lit_Chars val:'\t\tgit \\\n' span_id:716) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t-c grep.patternType=extended \\\n'
                    span_id: 717
                  ) (Token id:Id.Lit_Chars val:'\t\t\t-c grep.extendedRegexp=false \\\n' span_id:718) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgrep "a+b*c" $H ab >actual &&\n'
                    span_id: 719
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:720) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:721)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('grep ') ($ Id.VSub_DollarName '$L') 
                  (' with grep.patternType=basic and grep.extendedRegexp=true')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:735) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:a+bc" >expected &&\n'
                    span_id: 736
                  ) (Token id:Id.Lit_Chars val:'\t\tgit \\\n' span_id:737) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t-c grep.patternType=basic \\\n'
                    span_id: 738
                  ) (Token id:Id.Lit_Chars val:'\t\t\t-c grep.extendedRegexp=true \\\n' span_id:739) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgrep "a+b*c" $H ab >actual &&\n'
                    span_id: 740
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:741) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:742)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('grep ') ($ Id.VSub_DollarName '$L') 
                  (' with grep.extendedRegexp=false and grep.patternType=extended')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:756) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:abc" >expected &&\n'
                    span_id: 757
                  ) (Token id:Id.Lit_Chars val:'\t\tgit \\\n' span_id:758) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t-c grep.extendedRegexp=false \\\n'
                    span_id: 759
                  ) (Token id:Id.Lit_Chars val:'\t\t\t-c grep.patternType=extended \\\n' span_id:760) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgrep "a+b*c" $H ab >actual &&\n'
                    span_id: 761
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:762) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:763)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ('grep ') ($ Id.VSub_DollarName '$L') 
                  (' with grep.extendedRegexp=true and grep.patternType=basic')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:777) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo "${HC}ab:a+bc" >expected &&\n'
                    span_id: 778
                  ) (Token id:Id.Lit_Chars val:'\t\tgit \\\n' span_id:779) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t-c grep.extendedRegexp=true \\\n'
                    span_id: 780
                  ) (Token id:Id.Lit_Chars val:'\t\t\t-c grep.patternType=basic \\\n' span_id:781) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgrep "a+b*c" $H ab >actual &&\n'
                    span_id: 782
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:783) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:784)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --count ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:797) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo ${HC}ab:3 >expected &&\n'
                    span_id: 798
                  ) (Token id:Id.Lit_Chars val:'\t\tgit grep --count -e b $H -- ab >actual &&\n' span_id:799) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 800
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:801)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('grep --count -h ') ($ Id.VSub_DollarName '$L'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:814) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\techo 3 >expected &&\n'
                    span_id: 815
                  ) (Token id:Id.Lit_Chars val:'\t\tgit grep --count -h -e b $H -- ab >actual &&\n' span_id:816) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expected actual\n'
                    span_id: 817
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:818)
                )
              }
            )
          ]
        )
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:826)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:829)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 834
          stdin_parts: [('file\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -l -C' span_id:838))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:842) 
          (Token id:Id.Lit_Chars val:'\tgit grep -l -C1 foo >actual &&\n' span_id:843) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:844)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:850)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:853)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 858
          stdin_parts: [('file:5\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -c -C' span_id:862))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:866) 
          (Token id:Id.Lit_Chars val:'\tgit grep -c -C1 foo >actual &&\n' span_id:867) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:868)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -L -C' span_id:875))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:879) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files >expected &&\n' span_id:880) (Token id:Id.Lit_Chars val:'\tgit grep -L -C1 nonexistent_string >actual &&\n' span_id:881) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:882)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:888)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:891)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 896
          stdin_parts: [('file:foo mmap bar_mmap\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -e A --and -e B' span_id:901))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:905) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -e "foo mmap" --and -e bar_mmap >actual &&\n'
            span_id: 906
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:907)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:913)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:916)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 922
          stdin_parts: [('file:foo_mmap bar mmap\n') ('file:foo_mmap bar mmap baz\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep ( -e A --or -e B ) --and -e B' span_id:928))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:932) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep \\( -e foo_ --or -e baz \\) \\\n'
            span_id: 933
          ) (Token id:Id.Lit_Chars val:'\t\t--and -e " mmap" >actual &&\n' span_id:934) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:935)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:941)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:944)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 949
          stdin_parts: [('file:foo mmap bar\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -e A --and --not -e B' span_id:954))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:958) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -e "foo mmap" --and --not -e bar_mmap >actual &&\n'
            span_id: 959
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:960)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep should ignore GREP_OPTIONS' span_id:967))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:971) 
          (Token
            id: Id.Lit_Chars
            val: '\tGREP_OPTIONS=-v git grep " mmap bar\\$" >actual &&\n'
            span_id: 972
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:973)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -f, non-existent file' span_id:980))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:984) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git grep -f patterns\n' span_id:985)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:991)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:994)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1003
          stdin_parts: [
            ('file:foo mmap bar\n')
            ('file:foo_mmap bar\n')
            ('file:foo_mmap bar mmap\n')
            ('file:foo mmap bar_mmap\n')
            ('file:foo_mmap bar mmap baz\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1007)
          fd: -1
          arg_word: {(pattern)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1010)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1015
          stdin_parts: [('mmap\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -f, one pattern' span_id:1020))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1024) 
          (Token id:Id.Lit_Chars val:'\tgit grep -f pattern >actual &&\n' span_id:1025) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1026)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1032)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1035)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1047
          stdin_parts: [
            ('file:foo mmap bar\n')
            ('file:foo_mmap bar\n')
            ('file:foo_mmap bar mmap\n')
            ('file:foo mmap bar_mmap\n')
            ('file:foo_mmap bar mmap baz\n')
            ('t/a/v:vvv\n')
            ('t/v:vvv\n')
            ('v:vvv\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1051)
          fd: -1
          arg_word: {(patterns)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1054)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1060
          stdin_parts: [('mmap\n') ('vvv\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -f, multiple patterns' span_id:1065))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1069) 
          (Token id:Id.Lit_Chars val:'\tgit grep -f patterns >actual &&\n' span_id:1070) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1071)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep, multiple patterns' span_id:1078))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1082) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep "$(cat patterns)" >actual &&\n'
            span_id: 1083
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1084)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1090)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1093)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1105
          stdin_parts: [
            ('file:foo mmap bar\n')
            ('file:foo_mmap bar\n')
            ('file:foo_mmap bar mmap\n')
            ('file:foo mmap bar_mmap\n')
            ('file:foo_mmap bar mmap baz\n')
            ('t/a/v:vvv\n')
            ('t/v:vvv\n')
            ('v:vvv\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1109)
          fd: -1
          arg_word: {(patterns)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1112)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1121
          stdin_parts: [('\n') ('mmap\n') ('\n') ('vvv\n') ('\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -f, ignore empty lines' span_id:1126))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1130) 
          (Token id:Id.Lit_Chars val:'\tgit grep -f patterns >actual &&\n' span_id:1131) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1132)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep -f, ignore empty lines, read patterns from stdin'
            span_id: 1139
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1143) 
          (Token id:Id.Lit_Chars val:'\tgit grep -f - <patterns >actual &&\n' span_id:1144) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1145)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1151)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1154)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1161
          stdin_parts: [('y:y yy\n') ('--\n') ('z:zzz\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -q, silently report matches' span_id:1166))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1170) 
          (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:1171) (Token id:Id.Lit_Chars val:'\tgit grep -q mmap >actual &&\n' span_id:1172) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual &&\n' span_id:1173) (Token id:Id.Lit_Chars val:'\ttest_must_fail git grep -q qfwfq >actual &&\n' span_id:1174) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual\n' span_id:1175)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -C1 hunk mark between files' span_id:1182))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1186) 
          (Token id:Id.Lit_Chars val:'\tgit grep -C1 "^[yz]" >actual &&\n' span_id:1187) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1188)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep setup' span_id:1195))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1199) 
          (Token id:Id.Lit_Chars val:'\techo a >>file &&\n' span_id:1200) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1201) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_AUTHOR_NAME="With * Asterisk" \\\n'
            span_id: 1202
          ) (Token id:Id.Lit_Chars val:'\tGIT_AUTHOR_EMAIL="xyzzy@frotz.com" \\\n' span_id:1203) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m "second" &&\n' span_id:1204) (Token id:Id.Lit_Chars val:'\n' span_id:1205) 
          (Token id:Id.Lit_Chars val:'\techo a >>file &&\n' span_id:1206) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1207) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m "third" &&\n' span_id:1208) (Token id:Id.Lit_Chars val:'\n' span_id:1209) 
          (Token id:Id.Lit_Chars val:'\techo a >>file &&\n' span_id:1210) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1211) 
          (Token id:Id.Lit_Chars val:'\tGIT_AUTHOR_NAME="Night Fall" \\\n' span_id:1212) (Token id:Id.Lit_Chars val:'\tGIT_AUTHOR_EMAIL="nitfol@frobozz.com" \\\n' span_id:1213) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m "fourth"\n' span_id:1214)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (1)' span_id:1221))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1225) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author=author --pretty=tformat:%s >actual &&\n'
            span_id: 1226
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1227) 
          (Token id:Id.Lit_Chars val:'\t\techo third && echo initial\n' span_id:1228) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1229) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1230)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (2)' span_id:1237))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1241) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author=" * " -F --pretty=tformat:%s >actual &&\n'
            span_id: 1242
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1243) 
          (Token id:Id.Lit_Chars val:'\t\techo second\n' span_id:1244) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1245) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1246)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (3)' span_id:1253))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1257) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author="^A U" --pretty=tformat:%s >actual &&\n'
            span_id: 1258
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1259) 
          (Token id:Id.Lit_Chars val:'\t\techo third && echo initial\n' span_id:1260) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1261) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1262)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (4)' span_id:1269))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1273) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author="frotz\\.com>$" --pretty=tformat:%s >actual &&\n'
            span_id: 1274
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1275) 
          (Token id:Id.Lit_Chars val:'\t\techo second\n' span_id:1276) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1277) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1278)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (5)' span_id:1285))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1289) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author=Thor -F --pretty=tformat:%s >actual &&\n'
            span_id: 1290
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1291) 
          (Token id:Id.Lit_Chars val:'\t\techo third && echo initial\n' span_id:1292) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1293) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1294)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (6)' span_id:1301))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1305) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author=-0700  --pretty=tformat:%s >actual &&\n'
            span_id: 1306
          ) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:1307) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1308)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (7)' span_id:1315))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1319) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log -g --grep-reflog="commit: third" --pretty=tformat:%s >actual &&\n'
            span_id: 1320
          ) (Token id:Id.Lit_Chars val:'\techo third >expect &&\n' span_id:1321) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1322)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (8)' span_id:1329))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1333) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit log -g --grep-reflog="commit: third" --grep-reflog="commit: second" --pretty=tformat:%s >actual &&\n'
            span_id: 1334
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1335) 
          (Token id:Id.Lit_Chars val:'\t\techo third && echo second\n' span_id:1336) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1337) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1338)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (9)' span_id:1345))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1349) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit log -g --grep-reflog="commit: third" --author="Thor" --pretty=tformat:%s >actual &&\n'
            span_id: 1350
          ) (Token id:Id.Lit_Chars val:'\techo third >expect &&\n' span_id:1351) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1352)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'log grep (9)' span_id:1359))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1363) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit log -g --grep-reflog="commit: third" --author="non-existent" --pretty=tformat:%s >actual &&\n'
            span_id: 1364
          ) (Token id:Id.Lit_Chars val:'\t: >expect &&\n' span_id:1365) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1366)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'log --grep-reflog can only be used under -g' span_id:1373))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1377) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git log --grep-reflog="commit: third"\n'
            span_id: 1378
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'log with multiple --grep uses union' span_id:1385))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1389) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --grep=i --grep=r --format=%s >actual &&\n'
            span_id: 1390
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1391) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo fourth && echo third && echo initial\n'
            span_id: 1392
          ) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1393) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1394)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'log --all-match with multiple --grep uses intersection'
            span_id: 1401
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1405) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --all-match --grep=i --grep=r --format=%s >actual &&\n'
            span_id: 1406
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1407) 
          (Token id:Id.Lit_Chars val:'\t\techo third\n' span_id:1408) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1409) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1410)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'log with multiple --author uses union' span_id:1417))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1421) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author="Thor" --author="Aster" --format=%s >actual &&\n'
            span_id: 1422
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1423) 
          (Token
            id: Id.Lit_Chars
            val: '\t    echo third && echo second && echo initial\n'
            span_id: 1424
          ) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1425) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1426)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'log --all-match with multiple --author still uses union'
            span_id: 1433
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1437) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --all-match --author="Thor" --author="Aster" --format=%s >actual &&\n'
            span_id: 1438
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1439) 
          (Token
            id: Id.Lit_Chars
            val: '\t    echo third && echo second && echo initial\n'
            span_id: 1440
          ) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1441) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1442)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'log --grep --author uses intersection' span_id:1449))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1453) 
          (Token
            id: Id.Lit_Chars
            val: '\t# grep matches only third and fourth\n'
            span_id: 1454
          ) (Token id:Id.Lit_Chars val:'\t# author matches only initial and third\n' span_id:1455) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author="A U Thor" --grep=r --format=%s >actual &&\n'
            span_id: 1456
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1457) 
          (Token id:Id.Lit_Chars val:'\t\techo third\n' span_id:1458) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1459) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1460)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'log --grep --grep --author takes union of greps and intersects with author'
            span_id: 1467
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1471) 
          (Token
            id: Id.Lit_Chars
            val: '\t# grep matches initial and second but not third\n'
            span_id: 1472
          ) (Token id:Id.Lit_Chars val:'\t# author matches only initial and third\n' span_id:1473) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author="A U Thor" --grep=s --grep=l --format=%s >actual &&\n'
            span_id: 1474
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1475) 
          (Token id:Id.Lit_Chars val:'\t\techo initial\n' span_id:1476) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1477) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1478)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'log ---all-match -grep --author --author still takes union of authors and intersects with grep'
            span_id: 1485
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1489) 
          (Token
            id: Id.Lit_Chars
            val: '\t# grep matches only initial and third\n'
            span_id: 1490
          ) (Token id:Id.Lit_Chars val:'\t# author matches all but second\n' span_id:1491) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit log --all-match --author="Thor" --author="Night" --grep=i --format=%s >actual &&\n'
            span_id: 1492
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1493) 
          (Token id:Id.Lit_Chars val:'\t    echo third && echo initial\n' span_id:1494) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1495) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1496)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'log --grep --author --author takes union of authors and intersects with grep'
            span_id: 1503
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1507) 
          (Token
            id: Id.Lit_Chars
            val: '\t# grep matches only initial and third\n'
            span_id: 1508
          ) (Token id:Id.Lit_Chars val:'\t# author matches all but second\n' span_id:1509) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --author="Thor" --author="Night" --grep=i --format=%s >actual &&\n'
            span_id: 1510
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1511) 
          (Token id:Id.Lit_Chars val:'\t    echo third && echo initial\n' span_id:1512) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1513) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1514)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'log --all-match --grep --grep --author takes intersection'
            span_id: 1521
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1525) 
          (Token id:Id.Lit_Chars val:'\t# grep matches only third\n' span_id:1526) (Token id:Id.Lit_Chars val:'\t# author matches only initial and third\n' span_id:1527) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit log --all-match --author="A U Thor" --grep=i --grep=r --format=%s >actual &&\n'
            span_id: 1528
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1529) 
          (Token id:Id.Lit_Chars val:'\t\techo third\n' span_id:1530) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1531) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1532)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'log --author does not search in timestamp' span_id:1539))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1543) 
          (Token id:Id.Lit_Chars val:'\t: >expect &&\n' span_id:1544) (Token id:Id.Lit_Chars val:'\tgit log --author="$GIT_AUTHOR_DATE" >actual &&\n' span_id:1545) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1546)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'log --committer does not search in timestamp' span_id:1553))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1557) 
          (Token id:Id.Lit_Chars val:'\t: >expect &&\n' span_id:1558) (Token id:Id.Lit_Chars val:'\tgit log --committer="$GIT_COMMITTER_DATE" >actual &&\n' span_id:1559) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1560)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep with CE_VALID file' span_id:1567))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1571) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --assume-unchanged t/t &&\n'
            span_id: 1572
          ) (Token id:Id.Lit_Chars val:'\trm t/t &&\n' span_id:1573) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git grep test)" = "t/t:test" &&\n'
            span_id: 1574
          ) (Token id:Id.Lit_Chars val:'\tgit update-index --no-assume-unchanged t/t &&\n' span_id:1575) 
          (Token id:Id.Lit_Chars val:'\tgit checkout t/t\n' span_id:1576)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1582)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1585)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1591
          stdin_parts: [('hello.c=#include <stdio.h>\n') ('hello.c:\treturn 0;\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -p with userdiff' span_id:1596))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1600) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config diff.custom.funcname "^#" &&\n'
            span_id: 1601
          ) (Token id:Id.Lit_Chars val:'\techo "hello.c diff=custom" >.gitattributes &&\n' span_id:1602) 
          (Token id:Id.Lit_Chars val:'\tgit grep -p return >actual &&\n' span_id:1603) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1604)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1610)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1613)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1619
          stdin_parts: [('hello.c=int main(int argc, const char **argv)\n') ('hello.c:\treturn 0;\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -p' span_id:1624))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1628) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:1629) (Token id:Id.Lit_Chars val:'\tgit grep -p return >actual &&\n' span_id:1630) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1631)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1637)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1640)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1656
          stdin_parts: [
            ('hello.c-#include <stdio.h>\n')
            ('hello.c-\n')
            ('hello.c=int main(int argc, const char **argv)\n')
            ('hello.c-{\n')
            ('hello.c-\tprintf(')
            (Id.Right_DoubleQuote '"')
            ('Hello world.')
            (Id.Lit_Other '\\')
            (n)
            (Id.Right_DoubleQuote '"')
            (');\n')
            ('hello.c:\treturn 0;\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -p -B5' span_id:1661))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1665) 
          (Token id:Id.Lit_Chars val:'\tgit grep -p -B5 return >actual &&\n' span_id:1666) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1667)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1673)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1676)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1692
          stdin_parts: [
            ('hello.c=int main(int argc, const char **argv)\n')
            ('hello.c-{\n')
            ('hello.c-\tprintf(')
            (Id.Right_DoubleQuote '"')
            ('Hello world.')
            (Id.Lit_Other '\\')
            (n)
            (Id.Right_DoubleQuote '"')
            (');\n')
            ('hello.c:\treturn 0;\n')
            ('hello.c-\t/* char ?? */\n')
            ('hello.c-}\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -W' span_id:1697))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1701) 
          (Token id:Id.Lit_Chars val:'\tgit grep -W return >actual &&\n' span_id:1702) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1703)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1709)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1712)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1718
          stdin_parts: [('hello.c-#include <assert.h>\n') ('hello.c:#include <stdio.h>\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -W shows no trailing empty lines' span_id:1723))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1727) 
          (Token id:Id.Lit_Chars val:'\tgit grep -W stdio >actual &&\n' span_id:1728) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1729)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1735)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1738)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1751
          stdin_parts: [
            ('hello.c=\tprintf(')
            (Id.Right_DoubleQuote '"')
            ('Hello world.')
            (Id.Lit_Other '\\')
            (n)
            (Id.Right_DoubleQuote '"')
            (');\n')
            ('hello.c:\treturn 0;\n')
            ('hello.c-\t/* char ?? */\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -W with userdiff' span_id:1756))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1760) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .gitattributes" &&\n'
            span_id: 1761
          ) (Token id:Id.Lit_Chars val:'\tgit config diff.custom.xfuncname "(printf.*|})$" &&\n' span_id:1762) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "hello.c diff=custom" >.gitattributes &&\n'
            span_id: 1763
          ) (Token id:Id.Lit_Chars val:'\tgit grep -W return >actual &&\n' span_id:1764) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1765)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep from a subdirectory to search wider area (1)'
            span_id: 1772
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1776) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p s &&\n' span_id:1777) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1778) 
          (Token id:Id.Lit_Chars val:'\t\tcd s && git grep "x x x" ..\n' span_id:1779) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1780)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep from a subdirectory to search wider area (2)'
            span_id: 1787
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1791) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p s &&\n' span_id:1792) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1793) 
          (Token id:Id.Lit_Chars val:'\t\tcd s || exit 1\n' span_id:1794) (Token id:Id.Lit_Chars val:'\t\t( git grep xxyyzz .. >out ; echo $? >status )\n' span_id:1795) 
          (Token id:Id.Lit_Chars val:'\t\t! test -s out &&\n' span_id:1796) (Token id:Id.Lit_Chars val:'\t\ttest 1 = $(cat status)\n' span_id:1797) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:1798)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1804)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1807)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1812
          stdin_parts: [('hello.c:int main(int argc, const char **argv)\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -Fi' span_id:1817))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1821) 
          (Token id:Id.Lit_Chars val:'\tgit grep -Fi "CHAR *" >actual &&\n' span_id:1822) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1823)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'outside of git repository' span_id:1830))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1834) 
          (Token id:Id.Lit_Chars val:'\trm -fr non &&\n' span_id:1835) (Token id:Id.Lit_Chars val:'\tmkdir -p non/git/sub &&\n' span_id:1836) 
          (Token id:Id.Lit_Chars val:'\techo hello >non/git/file1 &&\n' span_id:1837) (Token id:Id.Lit_Chars val:'\techo world >non/git/sub/file2 &&\n' span_id:1838) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:1839) (Token id:Id.Lit_Chars val:'\t\techo file1:hello &&\n' span_id:1840) 
          (Token id:Id.Lit_Chars val:'\t\techo sub/file2:world\n' span_id:1841) (Token id:Id.Lit_Chars val:'\t} >non/expect.full &&\n' span_id:1842) 
          (Token
            id: Id.Lit_Chars
            val: '\techo file2:world >non/expect.sub &&\n'
            span_id: 1843
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1844) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_CEILING_DIRECTORIES="$(pwd)/non" &&\n'
            span_id: 1845
          ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:1846) 
          (Token id:Id.Lit_Chars val:'\t\tcd non/git &&\n' span_id:1847) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git grep o &&\n' span_id:1848) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep --no-index o >../actual.full &&\n'
            span_id: 1849
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.full ../actual.full &&\n' span_id:1850) 
          (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:1851) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git grep o &&\n' span_id:1852) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep --no-index o >../../actual.sub &&\n'
            span_id: 1853
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../../expect.sub ../../actual.sub\n' span_id:1854) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1855) (Token id:Id.Lit_Chars val:'\n' span_id:1856) 
          (Token id:Id.Lit_Chars val:'\techo ".*o*" >non/git/.gitignore &&\n' span_id:1857) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1858) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_CEILING_DIRECTORIES="$(pwd)/non" &&\n'
            span_id: 1859
          ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:1860) 
          (Token id:Id.Lit_Chars val:'\t\tcd non/git &&\n' span_id:1861) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git grep o &&\n' span_id:1862) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep --no-index --exclude-standard o >../actual.full &&\n'
            span_id: 1863
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.full ../actual.full &&\n' span_id:1864) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1865) (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:1866) 
          (Token id:Id.Lit_Chars val:'\t\t\techo ".gitignore:.*o*" &&\n' span_id:1867) (Token id:Id.Lit_Chars val:'\t\t\tcat ../expect.full\n' span_id:1868) 
          (Token id:Id.Lit_Chars val:'\t\t} >../expect.with.ignored &&\n' span_id:1869) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep --no-index --no-exclude o >../actual.full &&\n'
            span_id: 1870
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.with.ignored ../actual.full\n' span_id:1871) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:1872)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'outside of git repository with fallbackToNoIndex'
            span_id: 1879
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1883) 
          (Token id:Id.Lit_Chars val:'\trm -fr non &&\n' span_id:1884) (Token id:Id.Lit_Chars val:'\tmkdir -p non/git/sub &&\n' span_id:1885) 
          (Token id:Id.Lit_Chars val:'\techo hello >non/git/file1 &&\n' span_id:1886) (Token id:Id.Lit_Chars val:'\techo world >non/git/sub/file2 &&\n' span_id:1887) 
          (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >non/expect.full &&\n' span_id:1888) (Token id:Id.Lit_Chars val:'\tfile1:hello\n' span_id:1889) 
          (Token id:Id.Lit_Chars val:'\tsub/file2:world\n' span_id:1890) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1891) 
          (Token
            id: Id.Lit_Chars
            val: '\techo file2:world >non/expect.sub &&\n'
            span_id: 1892
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1893) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_CEILING_DIRECTORIES="$(pwd)/non" &&\n'
            span_id: 1894
          ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:1895) 
          (Token id:Id.Lit_Chars val:'\t\tcd non/git &&\n' span_id:1896) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git -c grep.fallbackToNoIndex=false grep o &&\n'
            span_id: 1897
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit -c grep.fallbackToNoIndex=true grep o >../actual.full &&\n'
            span_id: 1898
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.full ../actual.full &&\n' span_id:1899) 
          (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:1900) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git -c grep.fallbackToNoIndex=false grep o &&\n'
            span_id: 1901
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit -c grep.fallbackToNoIndex=true grep o >../../actual.sub &&\n'
            span_id: 1902
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../../expect.sub ../../actual.sub\n' span_id:1903) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1904) (Token id:Id.Lit_Chars val:'\n' span_id:1905) 
          (Token id:Id.Lit_Chars val:'\techo ".*o*" >non/git/.gitignore &&\n' span_id:1906) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1907) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_CEILING_DIRECTORIES="$(pwd)/non" &&\n'
            span_id: 1908
          ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:1909) 
          (Token id:Id.Lit_Chars val:'\t\tcd non/git &&\n' span_id:1910) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git -c grep.fallbackToNoIndex=false grep o &&\n'
            span_id: 1911
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -c grep.fallbackToNoIndex=true grep --exclude-standard o >../actual.full &&\n'
            span_id: 1912
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.full ../actual.full &&\n' span_id:1913) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1914) (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:1915) 
          (Token id:Id.Lit_Chars val:'\t\t\techo ".gitignore:.*o*" &&\n' span_id:1916) (Token id:Id.Lit_Chars val:'\t\t\tcat ../expect.full\n' span_id:1917) 
          (Token id:Id.Lit_Chars val:'\t\t} >../expect.with.ignored &&\n' span_id:1918) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit -c grep.fallbackToNoIndex grep --no-exclude o >../actual.full &&\n'
            span_id: 1919
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.with.ignored ../actual.full\n' span_id:1920) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:1921)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'inside git repository but with --no-index' span_id:1928))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1932) 
          (Token id:Id.Lit_Chars val:'\trm -fr is &&\n' span_id:1933) (Token id:Id.Lit_Chars val:'\tmkdir -p is/git/sub &&\n' span_id:1934) 
          (Token id:Id.Lit_Chars val:'\techo hello >is/git/file1 &&\n' span_id:1935) (Token id:Id.Lit_Chars val:'\techo world >is/git/sub/file2 &&\n' span_id:1936) 
          (Token id:Id.Lit_Chars val:'\techo ".*o*" >is/git/.gitignore &&\n' span_id:1937) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1938) 
          (Token id:Id.Lit_Chars val:'\t\techo file1:hello &&\n' span_id:1939) (Token id:Id.Lit_Chars val:'\t\techo sub/file2:world\n' span_id:1940) 
          (Token id:Id.Lit_Chars val:'\t} >is/expect.unignored &&\n' span_id:1941) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1942) 
          (Token id:Id.Lit_Chars val:'\t\techo ".gitignore:.*o*" &&\n' span_id:1943) (Token id:Id.Lit_Chars val:'\t\tcat is/expect.unignored\n' span_id:1944) 
          (Token id:Id.Lit_Chars val:'\t} >is/expect.full &&\n' span_id:1945) (Token id:Id.Lit_Chars val:'\t: >is/expect.empty &&\n' span_id:1946) 
          (Token id:Id.Lit_Chars val:'\techo file2:world >is/expect.sub &&\n' span_id:1947) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1948) 
          (Token id:Id.Lit_Chars val:'\t\tcd is/git &&\n' span_id:1949) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1950) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git grep o >../actual.full &&\n'
            span_id: 1951
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.empty ../actual.full &&\n' span_id:1952) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1953) (Token id:Id.Lit_Chars val:'\t\tgit grep --untracked o >../actual.unignored &&\n' span_id:1954) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_cmp ../expect.unignored ../actual.unignored &&\n'
            span_id: 1955
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1956) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep --no-index o >../actual.full &&\n'
            span_id: 1957
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.full ../actual.full &&\n' span_id:1958) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1959) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep --no-index --exclude-standard o >../actual.unignored &&\n'
            span_id: 1960
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../expect.unignored ../actual.unignored &&\n' span_id:1961) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1962) (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:1963) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git grep o >../../actual.sub &&\n'
            span_id: 1964
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../../expect.empty ../../actual.sub &&\n' span_id:1965) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1966) (Token id:Id.Lit_Chars val:'\t\tgit grep --no-index o >../../actual.sub &&\n' span_id:1967) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_cmp ../../expect.sub ../../actual.sub &&\n'
            span_id: 1968
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1969) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep --untracked o >../../actual.sub &&\n'
            span_id: 1970
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp ../../expect.sub ../../actual.sub\n' span_id:1971) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:1972)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep --no-index descends into repos, but not .git'
            span_id: 1979
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1983) 
          (Token id:Id.Lit_Chars val:'\trm -fr non &&\n' span_id:1984) (Token id:Id.Lit_Chars val:'\tmkdir -p non/git &&\n' span_id:1985) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1986) (Token id:Id.Lit_Chars val:'\t\tGIT_CEILING_DIRECTORIES="$(pwd)/non" &&\n' span_id:1987) 
          (Token
            id: Id.Lit_Chars
            val: '\t\texport GIT_CEILING_DIRECTORIES &&\n'
            span_id: 1988
          ) (Token id:Id.Lit_Chars val:'\t\tcd non/git &&\n' span_id:1989) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1990) (Token id:Id.Lit_Chars val:'\t\techo magic >file &&\n' span_id:1991) 
          (Token id:Id.Lit_Chars val:'\t\tgit init repo &&\n' span_id:1992) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1993) 
          (Token id:Id.Lit_Chars val:'\t\t\tcd repo &&\n' span_id:1994) (Token id:Id.Lit_Chars val:'\t\t\techo magic >file &&\n' span_id:1995) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add file &&\n' span_id:1996) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m foo &&\n' span_id:1997) 
          (Token id:Id.Lit_Chars val:'\t\t\techo magic >.git/file\n' span_id:1998) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:1999) (Token id:Id.Lit_Chars val:'\n' span_id:2000) 
          (Token id:Id.Lit_Chars val:'\t\tcat >expect <<-\\EOF &&\n' span_id:2001) (Token id:Id.Lit_Chars val:'\t\tfile\n' span_id:2002) 
          (Token id:Id.Lit_Chars val:'\t\trepo/file\n' span_id:2003) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:2004) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit grep -l --no-index magic >actual &&\n'
            span_id: 2005
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:2006) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:2007)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup double-dash tests' span_id:2014))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2018) 
          (Token id:Id.Lit_Chars val:'cat >double-dash <<EOF &&\n' span_id:2019) (Token id:Id.Lit_Chars val:'--\n' span_id:2020) (Token id:Id.Lit_Chars val:'->\n' span_id:2021) 
          (Token id:Id.Lit_Chars val:'other\n' span_id:2022) (Token id:Id.Lit_Chars val:'EOF\n' span_id:2023) 
          (Token id:Id.Lit_Chars val:'git add double-dash\n' span_id:2024)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2030)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2033)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2038
          stdin_parts: [('double-dash:->\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -- pattern' span_id:2042))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2046) 
          (Token id:Id.Lit_Chars val:'\tgit grep -- "->" >actual &&\n' span_id:2047) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2048)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -- pattern -- pathspec' span_id:2054))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2058) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -- "->" -- double-dash >actual &&\n'
            span_id: 2059
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2060)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -e pattern -- path' span_id:2066))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2070) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -e "->" -- double-dash >actual &&\n'
            span_id: 2071
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2072)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2078)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2081)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2086
          stdin_parts: [('double-dash:--\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -e -- -- path' span_id:2090))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2094) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -e -- -- double-dash >actual &&\n'
            span_id: 2095
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2096)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2102)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2105)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2117
          stdin_parts: [
            ('hello.c:int main(int argc, const char **argv)\n')
            ('hello.c:\tprintf(')
            (Id.Right_DoubleQuote '"')
            ('Hello world.')
            (Id.Lit_Other '\\')
            (n)
            (Id.Right_DoubleQuote '"')
            (');\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep --perl-regexp pattern' span_id:2124))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2128) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --perl-regexp "\\p{Ps}.*?\\p{Pe}" hello.c >actual &&\n'
            span_id: 2129
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2130)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -P pattern' span_id:2139))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2143) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -P "\\p{Ps}.*?\\p{Pe}" hello.c >actual &&\n'
            span_id: 2144
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2145)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep pattern with grep.extendedRegexp=true' span_id:2152))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2156) 
          (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:2157) (Token id:Id.Lit_Chars val:'\ttest_must_fail git -c grep.extendedregexp=true \\\n' span_id:2158) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgrep "\\p{Ps}.*?\\p{Pe}" hello.c >actual &&\n'
            span_id: 2159
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual\n' span_id:2160)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -P pattern with grep.extendedRegexp=true' span_id:2169))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2173) 
          (Token id:Id.Lit_Chars val:'\tgit -c grep.extendedregexp=true \\\n' span_id:2174) (Token id:Id.Lit_Chars val:'\t\tgrep -P "\\p{Ps}.*?\\p{Pe}" hello.c >actual &&\n' span_id:2175) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2176)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -P -v pattern' span_id:2185))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2189) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:2190) (Token id:Id.Lit_Chars val:'\t\techo "ab:a+b*c"\n' span_id:2191) 
          (Token id:Id.Lit_Chars val:'\t\techo "ab:a+bc"\n' span_id:2192) (Token id:Id.Lit_Chars val:'\t} >expected &&\n' span_id:2193) 
          (Token id:Id.Lit_Chars val:'\tgit grep -P -v "abc" ab >actual &&\n' span_id:2194) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2195)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -P -i pattern' span_id:2204))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2208) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:2209) (Token id:Id.Lit_Chars val:'\thello.c:\tprintf("Hello world.\\n");\n' span_id:2210) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2211) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -P -i "PRINTF\\([^\\d]+\\)" hello.c >actual &&\n'
            span_id: 2212
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2213)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -P -w pattern' span_id:2222))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2226) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:2227) (Token id:Id.Lit_Chars val:'\t\techo "hello_world:Hello world"\n' span_id:2228) 
          (Token id:Id.Lit_Chars val:'\t\techo "hello_world:HeLLo world"\n' span_id:2229) (Token id:Id.Lit_Chars val:'\t} >expected &&\n' span_id:2230) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep -P -w "He((?i)ll)o" hello_world >actual &&\n'
            span_id: 2231
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2232)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -G invalidpattern properly dies ' span_id:2239))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2243) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git grep -G "a["\n' span_id:2244)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep invalidpattern properly dies with grep.patternType=basic'
            span_id: 2251
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2255) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -c grep.patterntype=basic grep "a["\n'
            span_id: 2256
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -E invalidpattern properly dies ' span_id:2263))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2267) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git grep -E "a["\n' span_id:2268)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep invalidpattern properly dies with grep.patternType=extended'
            span_id: 2275
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2279) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -c grep.patterntype=extended grep "a["\n'
            span_id: 2280
          )
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -P invalidpattern properly dies ' span_id:2289))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2293) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git grep -P "a["\n' span_id:2294)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep invalidpattern properly dies with grep.patternType=perl'
            span_id: 2303
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2307) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -c grep.patterntype=perl grep "a["\n'
            span_id: 2308
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -G -E -F pattern' span_id:2315))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2319) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+b*c" >expected &&\n' span_id:2320) (Token id:Id.Lit_Chars val:'\tgit grep -G -E -F "a+b*c" ab >actual &&\n' span_id:2321) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2322)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep pattern with grep.patternType=basic, =extended, =fixed'
            span_id: 2329
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2333) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+b*c" >expected &&\n' span_id:2334) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2335) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=basic \\\n' span_id:2336) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=extended \\\n' span_id:2337) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2338) (Token id:Id.Lit_Chars val:'\t\tgrep "a+b*c" ab >actual &&\n' span_id:2339) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2340)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -E -F -G pattern' span_id:2347))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2351) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+bc" >expected &&\n' span_id:2352) (Token id:Id.Lit_Chars val:'\tgit grep -E -F -G "a+b*c" ab >actual &&\n' span_id:2353) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2354)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep pattern with grep.patternType=extended, =fixed, =basic'
            span_id: 2361
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2365) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+bc" >expected &&\n' span_id:2366) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2367) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=extended \\\n' span_id:2368) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2369) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=basic \\\n' span_id:2370) (Token id:Id.Lit_Chars val:'\t\tgrep "a+b*c" ab >actual &&\n' span_id:2371) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2372)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep -F -G -E pattern' span_id:2379))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2383) 
          (Token id:Id.Lit_Chars val:'\techo "ab:abc" >expected &&\n' span_id:2384) (Token id:Id.Lit_Chars val:'\tgit grep -F -G -E "a+b*c" ab >actual &&\n' span_id:2385) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2386)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep pattern with grep.patternType=fixed, =basic, =extended'
            span_id: 2393
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2397) 
          (Token id:Id.Lit_Chars val:'\techo "ab:abc" >expected &&\n' span_id:2398) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2399) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2400) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=basic \\\n' span_id:2401) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=extended \\\n' span_id:2402) (Token id:Id.Lit_Chars val:'\t\tgrep "a+b*c" ab >actual &&\n' span_id:2403) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2404)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -G -F -P -E pattern' span_id:2411))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2415) 
          (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:2416) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep -G -F -P -E "a\\x{2b}b\\x{2a}c" ab >actual &&\n'
            span_id: 2417
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual\n' span_id:2418)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep pattern with grep.patternType=fixed, =basic, =perl, =extended'
            span_id: 2425
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2429) 
          (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:2430) (Token id:Id.Lit_Chars val:'\ttest_must_fail git \\\n' span_id:2431) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2432) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=basic \\\n' span_id:2433) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=perl \\\n' span_id:2434) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=extended \\\n' span_id:2435) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgrep "a\\x{2b}b\\x{2a}c" ab >actual &&\n'
            span_id: 2436
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp empty actual\n' span_id:2437)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -G -F -E -P pattern' span_id:2446))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2450) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+b*c" >expected &&\n' span_id:2451) (Token id:Id.Lit_Chars val:'\tgit grep -G -F -E -P "a\\x{2b}b\\x{2a}c" ab >actual &&\n' span_id:2452) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2453)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep pattern with grep.patternType=fixed, =basic, =extended, =perl'
            span_id: 2462
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2466) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+b*c" >expected &&\n' span_id:2467) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2468) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2469) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=basic \\\n' span_id:2470) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=extended \\\n' span_id:2471) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=perl \\\n' span_id:2472) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgrep "a\\x{2b}b\\x{2a}c" ab >actual &&\n'
            span_id: 2473
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2474)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -P pattern with grep.patternType=fixed' span_id:2483))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2487) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+b*c" >expected &&\n' span_id:2488) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2489) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2490) (Token id:Id.Lit_Chars val:'\t\tgrep -P "a\\x{2b}b\\x{2a}c" ab >actual &&\n' span_id:2491) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2492)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -F pattern with grep.patternType=basic' span_id:2499))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2503) 
          (Token id:Id.Lit_Chars val:'\techo "ab:a+b*c" >expected &&\n' span_id:2504) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2505) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=basic \\\n' span_id:2506) (Token id:Id.Lit_Chars val:'\t\tgrep -F "*c" ab >actual &&\n' span_id:2507) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2508)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -G pattern with grep.patternType=fixed' span_id:2515))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2519) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:2520) (Token id:Id.Lit_Chars val:'\t\techo "ab:a+b*c"\n' span_id:2521) 
          (Token id:Id.Lit_Chars val:'\t\techo "ab:a+bc"\n' span_id:2522) (Token id:Id.Lit_Chars val:'\t} >expected &&\n' span_id:2523) 
          (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2524) (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2525) 
          (Token id:Id.Lit_Chars val:'\t\tgrep -G "a+b" ab >actual &&\n' span_id:2526) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2527)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep -E pattern with grep.patternType=fixed' span_id:2534))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2538) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:2539) (Token id:Id.Lit_Chars val:'\t\techo "ab:a+b*c"\n' span_id:2540) 
          (Token id:Id.Lit_Chars val:'\t\techo "ab:a+bc"\n' span_id:2541) (Token id:Id.Lit_Chars val:'\t\techo "ab:abc"\n' span_id:2542) 
          (Token id:Id.Lit_Chars val:'\t} >expected &&\n' span_id:2543) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:2544) 
          (Token id:Id.Lit_Chars val:'\t\t-c grep.patterntype=fixed \\\n' span_id:2545) (Token id:Id.Lit_Chars val:'\t\tgrep -E "a+" ab >actual &&\n' span_id:2546) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2547)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2553)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2556)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2568
          stdin_parts: [
            ('hello.c<RED>:<RESET>int main(int argc, const char **argv)\n')
            ('hello.c<RED>-<RESET>{\n')
            ('<RED>--<RESET>\n')
            ('hello.c<RED>:<RESET>\t/* char ?? */\n')
            ('hello.c<RED>-<RESET>}\n')
            ('<RED>--<RESET>\n')
            ('hello_world<RED>:<RESET>Hello_world\n')
            ('hello_world<RED>-<RESET>HeLLo_world\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep --color, separator' span_id:2573))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2577) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.context\t\tnormal &&\n'
            span_id: 2578
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.filename\t\tnormal &&\n' span_id:2579) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.function\t\tnormal &&\n'
            span_id: 2580
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.linenumber\tnormal &&\n' span_id:2581) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.match\t\tnormal &&\n'
            span_id: 2582
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.selected\t\tnormal &&\n' span_id:2583) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.separator\tred &&\n'
            span_id: 2584
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2585) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --color=always -A1 -e char -e lo_w hello.c hello_world |\n'
            span_id: 2586
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >actual &&\n' span_id:2587) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2588)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2594)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2597)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2605
          stdin_parts: [
            ('hello.c:int main(int argc, const char **argv)\n')
            ('hello.c:\t/* char ?? */\n')
            ('\n')
            ('hello_world:Hello_world\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep --break' span_id:2610))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2614) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --break -e char -e lo_w hello.c hello_world >actual &&\n'
            span_id: 2615
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2616)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2622)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2625)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2637
          stdin_parts: [
            ('hello.c:int main(int argc, const char **argv)\n')
            ('hello.c-{\n')
            ('--\n')
            ('hello.c:\t/* char ?? */\n')
            ('hello.c-}\n')
            ('\n')
            ('hello_world:Hello_world\n')
            ('hello_world-HeLLo_world\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep --break with context' span_id:2642))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2646) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --break -A1 -e char -e lo_w hello.c hello_world >actual &&\n'
            span_id: 2647
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2648)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2654)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2657)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2666
          stdin_parts: [
            ('hello.c\n')
            ('int main(int argc, const char **argv)\n')
            ('\t/* char ?? */\n')
            ('hello_world\n')
            ('Hello_world\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'grep --heading' span_id:2671))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2675) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --heading -e char -e lo_w hello.c hello_world >actual &&\n'
            span_id: 2676
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2677)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2683)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2686)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2696
          stdin_parts: [
            ('<BOLD;GREEN>hello.c<RESET>\n')
            ('4:int main(int argc, const <BLACK;BYELLOW>char<RESET> **argv)\n')
            ('8:\t/* <BLACK;BYELLOW>char<RESET> ?? */\n')
            ('\n')
            ('<BOLD;GREEN>hello_world<RESET>\n')
            ('3:Hel<BLACK;BYELLOW>lo_w<RESET>orld\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mimic ack-grep --group' span_id:2701))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2705) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.context\t\tnormal &&\n'
            span_id: 2706
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.filename\t\t"bold green" &&\n' span_id:2707) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.function\t\tnormal &&\n'
            span_id: 2708
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.linenumber\tnormal &&\n' span_id:2709) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.match\t\t"black yellow" &&\n'
            span_id: 2710
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.selected\t\tnormal &&\n' span_id:2711) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.separator\tnormal &&\n'
            span_id: 2712
          ) (Token id:Id.Lit_Chars val:'\n' span_id:2713) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --break --heading -n --color \\\n'
            span_id: 2714
          ) (Token id:Id.Lit_Chars val:'\t\t-e char -e lo_w hello.c hello_world |\n' span_id:2715) 
          (Token id:Id.Lit_Chars val:'\ttest_decode_color >actual &&\n' span_id:2716) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2717)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2723)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2726)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2733
          stdin_parts: [
            ('space: line with leading space1\n')
            ('space: line with leading space2\n')
            ('space: line with leading space3\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(LIBPCRE)} {(SQ (Token id:Id.Lit_Chars val:'grep -E "^ "' span_id:2740))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2744) 
          (Token id:Id.Lit_Chars val:'\tgit grep -E "^ " space >actual &&\n' span_id:2745) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2746)
        )
      }
    )
    (C {(test_expect_success)} {(LIBPCRE)} {(SQ (Token id:Id.Lit_Chars val:'grep -P "^ "' span_id:2755))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2759) 
          (Token id:Id.Lit_Chars val:'\tgit grep -P "^ " space >actual &&\n' span_id:2760) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2761)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2767)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2770)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2779
          stdin_parts: [
            ('space-line without leading space1\n')
            ('space: line <RED>with <RESET>leading space1\n')
            ('space: line <RED>with <RESET>leading <RED>space2<RESET>\n')
            ('space: line <RED>with <RESET>leading space3\n')
            ('space:line without leading <RED>space2<RESET>\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep --color -e A -e B with context' span_id:2784))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2788) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.context\t\tnormal &&\n'
            span_id: 2789
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.filename\t\tnormal &&\n' span_id:2790) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.function\t\tnormal &&\n'
            span_id: 2791
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.linenumber\tnormal &&\n' span_id:2792) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.matchContext\tnormal &&\n'
            span_id: 2793
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.matchSelected\tred &&\n' span_id:2794) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.selected\t\tnormal &&\n'
            span_id: 2795
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.separator\tnormal &&\n' span_id:2796) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2797) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --color=always -C2 -e "with " -e space2  space |\n'
            span_id: 2798
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >actual &&\n' span_id:2799) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2800)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2806)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2809)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2818
          stdin_parts: [
            ('space-line without leading space1\n')
            ('space- line with leading space1\n')
            ('space: line <RED>with <RESET>leading <RED>space2<RESET>\n')
            ('space- line with leading space3\n')
            ('space-line without leading space2\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep --color -e A --and -e B with context' span_id:2823))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2827) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.context\t\tnormal &&\n'
            span_id: 2828
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.filename\t\tnormal &&\n' span_id:2829) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.function\t\tnormal &&\n'
            span_id: 2830
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.linenumber\tnormal &&\n' span_id:2831) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.matchContext\tnormal &&\n'
            span_id: 2832
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.matchSelected\tred &&\n' span_id:2833) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.selected\t\tnormal &&\n'
            span_id: 2834
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.separator\tnormal &&\n' span_id:2835) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2836) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --color=always -C2 -e "with " --and -e space2  space |\n'
            span_id: 2837
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >actual &&\n' span_id:2838) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2839)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2845)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2848)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2857
          stdin_parts: [
            ('space-line without leading space1\n')
            ('space: line <RED>with <RESET>leading space1\n')
            ('space- line with leading space2\n')
            ('space: line <RED>with <RESET>leading space3\n')
            ('space-line without leading space2\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep --color -e A --and --not -e B with context'
            span_id: 2862
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2866) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.context\t\tnormal &&\n'
            span_id: 2867
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.filename\t\tnormal &&\n' span_id:2868) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.function\t\tnormal &&\n'
            span_id: 2869
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.linenumber\tnormal &&\n' span_id:2870) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.matchContext\tnormal &&\n'
            span_id: 2871
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.matchSelected\tred &&\n' span_id:2872) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.selected\t\tnormal &&\n'
            span_id: 2873
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.separator\tnormal &&\n' span_id:2874) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2875) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --color=always -C2 -e "with " --and --not -e space2  space |\n'
            span_id: 2876
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >actual &&\n' span_id:2877) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2878)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2884)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2887)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2904
          stdin_parts: [
            ('hello.c-\n')
            ('hello.c=int main(int argc, const char **argv)\n')
            ('hello.c-{\n')
            ('hello.c:\tpr<RED>int<RESET>f(')
            (Id.Right_DoubleQuote '"')
            ('<RED>Hello<RESET> world.')
            (Id.Lit_Other '\\')
            (n)
            (Id.Right_DoubleQuote '"')
            (');\n')
            ('hello.c-\treturn 0;\n')
            ('hello.c-\t/* char ?? */\n')
            ('hello.c-}\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep --color -e A --and -e B -p with context' span_id:2909))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2913) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.context\t\tnormal &&\n'
            span_id: 2914
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.filename\t\tnormal &&\n' span_id:2915) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.function\t\tnormal &&\n'
            span_id: 2916
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.linenumber\tnormal &&\n' span_id:2917) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.matchContext\tnormal &&\n'
            span_id: 2918
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.matchSelected\tred &&\n' span_id:2919) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config color.grep.selected\t\tnormal &&\n'
            span_id: 2920
          ) (Token id:Id.Lit_Chars val:'\ttest_config color.grep.separator\tnormal &&\n' span_id:2921) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2922) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --color=always -p -C3 -e int --and -e Hello --no-index hello.c |\n'
            span_id: 2923
          ) (Token id:Id.Lit_Chars val:'\ttest_decode_color >actual &&\n' span_id:2924) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:2925)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep can find things only in the work tree' span_id:2932))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2936) 
          (Token id:Id.Lit_Chars val:'\t: >work-tree-only &&\n' span_id:2937) (Token id:Id.Lit_Chars val:'\tgit add work-tree-only &&\n' span_id:2938) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rm -f work-tree-only" &&\n'
            span_id: 2939
          ) (Token id:Id.Lit_Chars val:'\techo "find in work tree" >work-tree-only &&\n' span_id:2940) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit grep --quiet "find in work tree" &&\n'
            span_id: 2941
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet --cached "find in work tree" &&\n'
            span_id: 2942
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet "find in work tree" HEAD\n'
            span_id: 2943
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep can find things only in the work tree (i-t-a)'
            span_id: 2950
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2954) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "intend to add this" >intend-to-add &&\n'
            span_id: 2955
          ) (Token id:Id.Lit_Chars val:'\tgit add -N intend-to-add &&\n' span_id:2956) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rm -f intend-to-add" &&\n'
            span_id: 2957
          ) (Token id:Id.Lit_Chars val:'\tgit grep --quiet "intend to add this" &&\n' span_id:2958) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet --cached "intend to add this" &&\n'
            span_id: 2959
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet "intend to add this" HEAD\n'
            span_id: 2960
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep does not search work tree with assume unchanged'
            span_id: 2967
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2971) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "intend to add this" >intend-to-add &&\n'
            span_id: 2972
          ) (Token id:Id.Lit_Chars val:'\tgit add -N intend-to-add &&\n' span_id:2973) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --assume-unchanged intend-to-add &&\n'
            span_id: 2974
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git rm -f intend-to-add" &&\n' span_id:2975) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet "intend to add this" &&\n'
            span_id: 2976
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet --cached "intend to add this" &&\n'
            span_id: 2977
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet "intend to add this" HEAD\n'
            span_id: 2978
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep can find things only in the index' span_id:2985))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2989) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "only in the index" >cache-this &&\n'
            span_id: 2990
          ) (Token id:Id.Lit_Chars val:'\tgit add cache-this &&\n' span_id:2991) 
          (Token id:Id.Lit_Chars val:'\trm cache-this &&\n' span_id:2992) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git rm --cached cache-this" &&\n' span_id:2993) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet "only in the index" &&\n'
            span_id: 2994
          ) (Token id:Id.Lit_Chars val:'\tgit grep --quiet --cached "only in the index" &&\n' span_id:2995) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git grep --quiet "only in the index" HEAD\n'
            span_id: 2996
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'grep does not report i-t-a with -L --cached' span_id:3003))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3007) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "intend to add this" >intend-to-add &&\n'
            span_id: 3008
          ) (Token id:Id.Lit_Chars val:'\tgit add -N intend-to-add &&\n' span_id:3009) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rm -f intend-to-add" &&\n'
            span_id: 3010
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files | grep -v "^intend-to-add\\$" >expected &&\n'
            span_id: 3011
          ) (Token id:Id.Lit_Chars val:'\tgit grep -L --cached "nonexistent_string" >actual &&\n' span_id:3012) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:3013)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'grep does not report i-t-a and assume unchanged with -L'
            span_id: 3020
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3024) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "intend to add this" >intend-to-add-assume-unchanged &&\n'
            span_id: 3025
          ) (Token id:Id.Lit_Chars val:'\tgit add -N intend-to-add-assume-unchanged &&\n' span_id:3026) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rm -f intend-to-add-assume-unchanged" &&\n'
            span_id: 3027
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --assume-unchanged intend-to-add-assume-unchanged &&\n'
            span_id: 3028
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files | grep -v "^intend-to-add-assume-unchanged\\$" >expected &&\n'
            span_id: 3029
          ) (Token id:Id.Lit_Chars val:'\tgit grep -L "nonexistent_string" >actual &&\n' span_id:3030) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:3031)
        )
      }
    )
    (C {(test_done)})
  ]
)