Merge branch 'cb/t7810-test-label-fix'
authorJunio C Hamano <gitster@pobox.com>
Wed, 6 Jul 2016 20:38:18 +0000 (13:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 6 Jul 2016 20:38:18 +0000 (13:38 -0700)
Test clean-up.

* cb/t7810-test-label-fix:
t7810: fix duplicated test title

1  2 
t/t7810-grep.sh
diff --combined t/t7810-grep.sh
index 960425a4ec6229cd2d15dac74f6fdf6deda4ec6c,63ce9866de51db9cc00a10c21c6a4a9727163ba7..bd8ea1191f1092ed7662c2258b82c156de7defce
@@@ -9,9 -9,7 +9,9 @@@ test_description='git grep various
  . ./test-lib.sh
  
  cat >hello.c <<EOF
 +#include <assert.h>
  #include <stdio.h>
 +
  int main(int argc, const char **argv)
  {
        printf("Hello world.\n");
@@@ -49,13 -47,6 +49,13 @@@ test_expect_success setup 
        echo vvv >t/v &&
        mkdir t/a &&
        echo vvv >t/a/v &&
 +      {
 +              echo "line without leading space1"
 +              echo " line with leading space1"
 +              echo " line with leading space2"
 +              echo " line with leading space3"
 +              echo "line without leading space2"
 +      } >space &&
        git add . &&
        test_tick &&
        git commit -m initial
@@@ -107,7 -98,7 +107,7 @@@ d
  
        test_expect_success "grep -w $L (w)" '
                : >expected &&
 -              test_must_fail git grep -n -w -e "^w" >actual &&
 +              test_must_fail git grep -n -w -e "^w" $H >actual &&
                test_cmp expected actual
        '
  
                test_cmp expected actual
        '
        test_expect_success "grep $L with grep.extendedRegexp=false" '
 -              echo "ab:a+bc" >expected &&
 -              git -c grep.extendedRegexp=false grep "a+b*c" ab >actual &&
 +              echo "${HC}ab:a+bc" >expected &&
 +              git -c grep.extendedRegexp=false grep "a+b*c" $H ab >actual &&
                test_cmp expected actual
        '
  
        test_expect_success "grep $L with grep.extendedRegexp=true" '
 -              echo "ab:abc" >expected &&
 -              git -c grep.extendedRegexp=true grep "a+b*c" ab >actual &&
 +              echo "${HC}ab:abc" >expected &&
 +              git -c grep.extendedRegexp=true grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.patterntype=basic" '
 +              echo "${HC}ab:a+bc" >expected &&
 +              git -c grep.patterntype=basic grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.patterntype=extended" '
 +              echo "${HC}ab:abc" >expected &&
 +              git -c grep.patterntype=extended grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.patterntype=fixed" '
 +              echo "${HC}ab:a+b*c" >expected &&
 +              git -c grep.patterntype=fixed grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success LIBPCRE "grep $L with grep.patterntype=perl" '
 +              echo "${HC}ab:a+b*c" >expected &&
 +              git -c grep.patterntype=perl grep "a\x{2b}b\x{2a}c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.patternType=default and grep.extendedRegexp=true" '
 +              echo "${HC}ab:abc" >expected &&
 +              git \
 +                      -c grep.patternType=default \
 +                      -c grep.extendedRegexp=true \
 +                      grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.extendedRegexp=true and grep.patternType=default" '
 +              echo "${HC}ab:abc" >expected &&
 +              git \
 +                      -c grep.extendedRegexp=true \
 +                      -c grep.patternType=default \
 +                      grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.patternType=extended and grep.extendedRegexp=false" '
 +              echo "${HC}ab:abc" >expected &&
 +              git \
 +                      -c grep.patternType=extended \
 +                      -c grep.extendedRegexp=false \
 +                      grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.patternType=basic and grep.extendedRegexp=true" '
 +              echo "${HC}ab:a+bc" >expected &&
 +              git \
 +                      -c grep.patternType=basic \
 +                      -c grep.extendedRegexp=true \
 +                      grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.extendedRegexp=false and grep.patternType=extended" '
 +              echo "${HC}ab:abc" >expected &&
 +              git \
 +                      -c grep.extendedRegexp=false \
 +                      -c grep.patternType=extended \
 +                      grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep $L with grep.extendedRegexp=true and grep.patternType=basic" '
 +              echo "${HC}ab:a+bc" >expected &&
 +              git \
 +                      -c grep.extendedRegexp=true \
 +                      -c grep.patternType=basic \
 +                      grep "a+b*c" $H ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep --count $L" '
 +              echo ${HC}ab:3 >expected &&
 +              git grep --count -e b $H -- ab >actual &&
 +              test_cmp expected actual
 +      '
 +
 +      test_expect_success "grep --count -h $L" '
 +              echo 3 >expected &&
 +              git grep --count -h -e b $H -- ab >actual &&
                test_cmp expected actual
        '
  done
@@@ -355,7 -256,7 +355,7 @@@ test_expect_success 'grep -l -C' 
  cat >expected <<EOF
  file:5
  EOF
- test_expect_success 'grep -l -C' '
+ test_expect_success 'grep -c -C' '
        git grep -c -C1 foo >actual &&
        test_cmp expected actual
  '
@@@ -443,11 -344,6 +443,11 @@@ test_expect_success 'grep -f, multiple 
        test_cmp expected actual
  '
  
 +test_expect_success 'grep, multiple patterns' '
 +      git grep "$(cat patterns)" >actual &&
 +      test_cmp expected actual
 +'
 +
  cat >expected <<EOF
  file:foo mmap bar
  file:foo_mmap bar
@@@ -491,6 -387,17 +491,6 @@@ test_expect_success 'grep -q, silently 
        test_cmp empty actual
  '
  
 -# Create 1024 file names that sort between "y" and "z" to make sure
 -# the two files are handled by different calls to an external grep.
 -# This depends on MAXARGS in builtin-grep.c being 1024 or less.
 -c32="0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v"
 -test_expect_success 'grep -C1, hunk mark between files' '
 -      for a in $c32; do for b in $c32; do : >y-$a$b; done; done &&
 -      git add y-?? &&
 -      git grep -C1 "^[yz]" >actual &&
 -      test_cmp expected actual
 -'
 -
  test_expect_success 'grep -C1 hunk mark between files' '
        git grep -C1 "^[yz]" >actual &&
        test_cmp expected actual
@@@ -516,41 -423,31 +516,41 @@@ test_expect_success 'log grep setup' 
  
  test_expect_success 'log grep (1)' '
        git log --author=author --pretty=tformat:%s >actual &&
 -      ( echo third ; echo initial ) >expect &&
 +      {
 +              echo third && echo initial
 +      } >expect &&
        test_cmp expect actual
  '
  
  test_expect_success 'log grep (2)' '
        git log --author=" * " -F --pretty=tformat:%s >actual &&
 -      ( echo second ) >expect &&
 +      {
 +              echo second
 +      } >expect &&
        test_cmp expect actual
  '
  
  test_expect_success 'log grep (3)' '
        git log --author="^A U" --pretty=tformat:%s >actual &&
 -      ( echo third ; echo initial ) >expect &&
 +      {
 +              echo third && echo initial
 +      } >expect &&
        test_cmp expect actual
  '
  
  test_expect_success 'log grep (4)' '
        git log --author="frotz\.com>$" --pretty=tformat:%s >actual &&
 -      ( echo second ) >expect &&
 +      {
 +              echo second
 +      } >expect &&
        test_cmp expect actual
  '
  
  test_expect_success 'log grep (5)' '
        git log --author=Thor -F --pretty=tformat:%s >actual &&
 -      ( echo third ; echo initial ) >expect &&
 +      {
 +              echo third && echo initial
 +      } >expect &&
        test_cmp expect actual
  '
  
@@@ -560,49 -457,11 +560,49 @@@ test_expect_success 'log grep (6)' 
        test_cmp expect actual
  '
  
 -test_expect_success 'log --grep --author implicitly uses all-match' '
 -      # grep matches initial and second but not third
 -      # author matches only initial and third
 -      git log --author="A U Thor" --grep=s --grep=l --format=%s >actual &&
 -      echo initial >expect &&
 +test_expect_success 'log grep (7)' '
 +      git log -g --grep-reflog="commit: third" --pretty=tformat:%s >actual &&
 +      echo third >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log grep (8)' '
 +      git log -g --grep-reflog="commit: third" --grep-reflog="commit: second" --pretty=tformat:%s >actual &&
 +      {
 +              echo third && echo second
 +      } >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log grep (9)' '
 +      git log -g --grep-reflog="commit: third" --author="Thor" --pretty=tformat:%s >actual &&
 +      echo third >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log grep (9)' '
 +      git log -g --grep-reflog="commit: third" --author="non-existant" --pretty=tformat:%s >actual &&
 +      : >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log --grep-reflog can only be used under -g' '
 +      test_must_fail git log --grep-reflog="commit: third"
 +'
 +
 +test_expect_success 'log with multiple --grep uses union' '
 +      git log --grep=i --grep=r --format=%s >actual &&
 +      {
 +              echo fourth && echo third && echo initial
 +      } >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log --all-match with multiple --grep uses intersection' '
 +      git log --all-match --grep=i --grep=r --format=%s >actual &&
 +      {
 +              echo third
 +      } >expect &&
        test_cmp expect actual
  '
  
@@@ -614,47 -473,7 +614,47 @@@ test_expect_success 'log with multiple 
        test_cmp expect actual
  '
  
 -test_expect_success 'log with --grep and multiple --author uses all-match' '
 +test_expect_success 'log --all-match with multiple --author still uses union' '
 +      git log --all-match --author="Thor" --author="Aster" --format=%s >actual &&
 +      {
 +          echo third && echo second && echo initial
 +      } >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log --grep --author uses intersection' '
 +      # grep matches only third and fourth
 +      # author matches only initial and third
 +      git log --author="A U Thor" --grep=r --format=%s >actual &&
 +      {
 +              echo third
 +      } >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log --grep --grep --author takes union of greps and intersects with author' '
 +      # grep matches initial and second but not third
 +      # author matches only initial and third
 +      git log --author="A U Thor" --grep=s --grep=l --format=%s >actual &&
 +      {
 +              echo initial
 +      } >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log ---all-match -grep --author --author still takes union of authors and intersects with grep' '
 +      # grep matches only initial and third
 +      # author matches all but second
 +      git log --all-match --author="Thor" --author="Night" --grep=i --format=%s >actual &&
 +      {
 +          echo third && echo initial
 +      } >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log --grep --author --author takes union of authors and intersects with grep' '
 +      # grep matches only initial and third
 +      # author matches all but second
        git log --author="Thor" --author="Night" --grep=i --format=%s >actual &&
        {
            echo third && echo initial
        test_cmp expect actual
  '
  
 -test_expect_success 'log with --grep and multiple --author uses all-match' '
 -      git log --author="Thor" --author="Night" --grep=q --format=%s >actual &&
 -      >expect &&
 +test_expect_success 'log --all-match --grep --grep --author takes intersection' '
 +      # grep matches only third
 +      # author matches only initial and third
 +      git log --all-match --author="A U Thor" --grep=i --grep=r --format=%s >actual &&
 +      {
 +              echo third
 +      } >expect &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log --author does not search in timestamp' '
 +      : >expect &&
 +      git log --author="$GIT_AUTHOR_DATE" >actual &&
 +      test_cmp expect actual
 +'
 +
 +test_expect_success 'log --committer does not search in timestamp' '
 +      : >expect &&
 +      git log --committer="$GIT_COMMITTER_DATE" >actual &&
        test_cmp expect actual
  '
  
@@@ -717,7 -520,6 +717,7 @@@ test_expect_success 'grep -p' 
  
  cat >expected <<EOF
  hello.c-#include <stdio.h>
 +hello.c-
  hello.c=int main(int argc, const char **argv)
  hello.c-{
  hello.c-      printf("Hello world.\n");
@@@ -743,16 -545,6 +743,16 @@@ test_expect_success 'grep -W' 
        test_cmp expected actual
  '
  
 +cat >expected <<EOF
 +hello.c-#include <assert.h>
 +hello.c:#include <stdio.h>
 +EOF
 +
 +test_expect_success 'grep -W shows no trailing empty lines' '
 +      git grep -W stdio >actual &&
 +      test_cmp expected actual
 +'
 +
  cat >expected <<EOF
  hello.c=      printf("Hello world.\n");
  hello.c:      return 0;
@@@ -804,12 -596,12 +804,12 @@@ test_expect_success 'outside of git rep
        } >non/expect.full &&
        echo file2:world >non/expect.sub &&
        (
 -              GIT_CEILING_DIRECTORIES="$(pwd)/non/git" &&
 +              GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
                export GIT_CEILING_DIRECTORIES &&
                cd non/git &&
                test_must_fail git grep o &&
                git grep --no-index o >../actual.full &&
 -              test_cmp ../expect.full ../actual.full
 +              test_cmp ../expect.full ../actual.full &&
                cd sub &&
                test_must_fail git grep o &&
                git grep --no-index o >../../actual.sub &&
  
        echo ".*o*" >non/git/.gitignore &&
        (
 -              GIT_CEILING_DIRECTORIES="$(pwd)/non/git" &&
 +              GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
                export GIT_CEILING_DIRECTORIES &&
                cd non/git &&
                test_must_fail git grep o &&
                test_cmp ../expect.full ../actual.full &&
  
                {
 -                      echo ".gitignore:.*o*"
 +                      echo ".gitignore:.*o*" &&
                        cat ../expect.full
                } >../expect.with.ignored &&
                git grep --no-index --no-exclude o >../actual.full &&
        )
  '
  
 +test_expect_success 'outside of git repository with fallbackToNoIndex' '
 +      rm -fr non &&
 +      mkdir -p non/git/sub &&
 +      echo hello >non/git/file1 &&
 +      echo world >non/git/sub/file2 &&
 +      cat <<-\EOF >non/expect.full &&
 +      file1:hello
 +      sub/file2:world
 +      EOF
 +      echo file2:world >non/expect.sub &&
 +      (
 +              GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
 +              export GIT_CEILING_DIRECTORIES &&
 +              cd non/git &&
 +              test_must_fail git -c grep.fallbackToNoIndex=false grep o &&
 +              git -c grep.fallbackToNoIndex=true grep o >../actual.full &&
 +              test_cmp ../expect.full ../actual.full &&
 +              cd sub &&
 +              test_must_fail git -c grep.fallbackToNoIndex=false grep o &&
 +              git -c grep.fallbackToNoIndex=true grep o >../../actual.sub &&
 +              test_cmp ../../expect.sub ../../actual.sub
 +      ) &&
 +
 +      echo ".*o*" >non/git/.gitignore &&
 +      (
 +              GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
 +              export GIT_CEILING_DIRECTORIES &&
 +              cd non/git &&
 +              test_must_fail git -c grep.fallbackToNoIndex=false grep o &&
 +              git -c grep.fallbackToNoIndex=true grep --exclude-standard o >../actual.full &&
 +              test_cmp ../expect.full ../actual.full &&
 +
 +              {
 +                      echo ".gitignore:.*o*" &&
 +                      cat ../expect.full
 +              } >../expect.with.ignored &&
 +              git -c grep.fallbackToNoIndex grep --no-exclude o >../actual.full &&
 +              test_cmp ../expect.with.ignored ../actual.full
 +      )
 +'
 +
  test_expect_success 'inside git repository but with --no-index' '
        rm -fr is &&
        mkdir -p is/git/sub &&
        )
  '
  
 +test_expect_success 'grep --no-index descends into repos, but not .git' '
 +      rm -fr non &&
 +      mkdir -p non/git &&
 +      (
 +              GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
 +              export GIT_CEILING_DIRECTORIES &&
 +              cd non/git &&
 +
 +              echo magic >file &&
 +              git init repo &&
 +              (
 +                      cd repo &&
 +                      echo magic >file &&
 +                      git add file &&
 +                      git commit -m foo &&
 +                      echo magic >.git/file
 +              ) &&
 +
 +              cat >expect <<-\EOF &&
 +              file
 +              repo/file
 +              EOF
 +              git grep -l --no-index magic >actual &&
 +              test_cmp expect actual
 +      )
 +'
 +
  test_expect_success 'setup double-dash tests' '
  cat >double-dash <<EOF &&
  --
@@@ -1036,146 -760,48 +1036,146 @@@ test_expect_success 'grep -G invalidpat
        test_must_fail git grep -G "a["
  '
  
 +test_expect_success 'grep invalidpattern properly dies with grep.patternType=basic' '
 +      test_must_fail git -c grep.patterntype=basic grep "a["
 +'
 +
  test_expect_success 'grep -E invalidpattern properly dies ' '
        test_must_fail git grep -E "a["
  '
  
 +test_expect_success 'grep invalidpattern properly dies with grep.patternType=extended' '
 +      test_must_fail git -c grep.patterntype=extended grep "a["
 +'
 +
  test_expect_success LIBPCRE 'grep -P invalidpattern properly dies ' '
        test_must_fail git grep -P "a["
  '
  
 +test_expect_success LIBPCRE 'grep invalidpattern properly dies with grep.patternType=perl' '
 +      test_must_fail git -c grep.patterntype=perl grep "a["
 +'
 +
  test_expect_success 'grep -G -E -F pattern' '
        echo "ab:a+b*c" >expected &&
        git grep -G -E -F "a+b*c" ab >actual &&
        test_cmp expected actual
  '
  
 +test_expect_success 'grep pattern with grep.patternType=basic, =extended, =fixed' '
 +      echo "ab:a+b*c" >expected &&
 +      git \
 +              -c grep.patterntype=basic \
 +              -c grep.patterntype=extended \
 +              -c grep.patterntype=fixed \
 +              grep "a+b*c" ab >actual &&
 +      test_cmp expected actual
 +'
 +
  test_expect_success 'grep -E -F -G pattern' '
        echo "ab:a+bc" >expected &&
        git grep -E -F -G "a+b*c" ab >actual &&
        test_cmp expected actual
  '
  
 +test_expect_success 'grep pattern with grep.patternType=extended, =fixed, =basic' '
 +      echo "ab:a+bc" >expected &&
 +      git \
 +              -c grep.patterntype=extended \
 +              -c grep.patterntype=fixed \
 +              -c grep.patterntype=basic \
 +              grep "a+b*c" ab >actual &&
 +      test_cmp expected actual
 +'
 +
  test_expect_success 'grep -F -G -E pattern' '
        echo "ab:abc" >expected &&
        git grep -F -G -E "a+b*c" ab >actual &&
        test_cmp expected actual
  '
  
 +test_expect_success 'grep pattern with grep.patternType=fixed, =basic, =extended' '
 +      echo "ab:abc" >expected &&
 +      git \
 +              -c grep.patterntype=fixed \
 +              -c grep.patterntype=basic \
 +              -c grep.patterntype=extended \
 +              grep "a+b*c" ab >actual &&
 +      test_cmp expected actual
 +'
 +
  test_expect_success 'grep -G -F -P -E pattern' '
        >empty &&
        test_must_fail git grep -G -F -P -E "a\x{2b}b\x{2a}c" ab >actual &&
        test_cmp empty actual
  '
  
 +test_expect_success 'grep pattern with grep.patternType=fixed, =basic, =perl, =extended' '
 +      >empty &&
 +      test_must_fail git \
 +              -c grep.patterntype=fixed \
 +              -c grep.patterntype=basic \
 +              -c grep.patterntype=perl \
 +              -c grep.patterntype=extended \
 +              grep "a\x{2b}b\x{2a}c" ab >actual &&
 +      test_cmp empty actual
 +'
 +
  test_expect_success LIBPCRE 'grep -G -F -E -P pattern' '
        echo "ab:a+b*c" >expected &&
        git grep -G -F -E -P "a\x{2b}b\x{2a}c" ab >actual &&
        test_cmp expected actual
  '
  
 -test_config() {
 -      git config "$1" "$2" &&
 -      test_when_finished "git config --unset $1"
 -}
 +test_expect_success LIBPCRE 'grep pattern with grep.patternType=fixed, =basic, =extended, =perl' '
 +      echo "ab:a+b*c" >expected &&
 +      git \
 +              -c grep.patterntype=fixed \
 +              -c grep.patterntype=basic \
 +              -c grep.patterntype=extended \
 +              -c grep.patterntype=perl \
 +              grep "a\x{2b}b\x{2a}c" ab >actual &&
 +      test_cmp expected actual
 +'
 +
 +test_expect_success LIBPCRE 'grep -P pattern with grep.patternType=fixed' '
 +      echo "ab:a+b*c" >expected &&
 +      git \
 +              -c grep.patterntype=fixed \
 +              grep -P "a\x{2b}b\x{2a}c" ab >actual &&
 +      test_cmp expected actual
 +'
 +
 +test_expect_success 'grep -F pattern with grep.patternType=basic' '
 +      echo "ab:a+b*c" >expected &&
 +      git \
 +              -c grep.patterntype=basic \
 +              grep -F "*c" ab >actual &&
 +      test_cmp expected actual
 +'
 +
 +test_expect_success 'grep -G pattern with grep.patternType=fixed' '
 +      {
 +              echo "ab:a+b*c"
 +              echo "ab:a+bc"
 +      } >expected &&
 +      git \
 +              -c grep.patterntype=fixed \
 +              grep -G "a+b" ab >actual &&
 +      test_cmp expected actual
 +'
 +
 +test_expect_success 'grep -E pattern with grep.patternType=fixed' '
 +      {
 +              echo "ab:a+b*c"
 +              echo "ab:a+bc"
 +              echo "ab:abc"
 +      } >expected &&
 +      git \
 +              -c grep.patterntype=fixed \
 +              grep -E "a+" ab >actual &&
 +      test_cmp expected actual
 +'
  
  cat >expected <<EOF
  hello.c<RED>:<RESET>int main(int argc, const char **argv)
@@@ -1245,8 -871,8 +1245,8 @@@ test_expect_success 'grep --heading' 
  
  cat >expected <<EOF
  <BOLD;GREEN>hello.c<RESET>
 -2:int main(int argc, const <BLACK;BYELLOW>char<RESET> **argv)
 -6:    /* <BLACK;BYELLOW>char<RESET> ?? */
 +4:int main(int argc, const <BLACK;BYELLOW>char<RESET> **argv)
 +8:    /* <BLACK;BYELLOW>char<RESET> ?? */
  
  <BOLD;GREEN>hello_world<RESET>
  3:Hel<BLACK;BYELLOW>lo_w<RESET>orld
@@@ -1267,114 -893,4 +1267,114 @@@ test_expect_success 'mimic ack-grep --g
        test_cmp expected actual
  '
  
 +cat >expected <<EOF
 +space: line with leading space1
 +space: line with leading space2
 +space: line with leading space3
 +EOF
 +
 +test_expect_success LIBPCRE 'grep -E "^ "' '
 +      git grep -E "^ " space >actual &&
 +      test_cmp expected actual
 +'
 +
 +test_expect_success LIBPCRE 'grep -P "^ "' '
 +      git grep -P "^ " space >actual &&
 +      test_cmp expected actual
 +'
 +
 +cat >expected <<EOF
 +space-line without leading space1
 +space: line <RED>with <RESET>leading space1
 +space: line <RED>with <RESET>leading <RED>space2<RESET>
 +space: line <RED>with <RESET>leading space3
 +space:line without leading <RED>space2<RESET>
 +EOF
 +
 +test_expect_success 'grep --color -e A -e B with context' '
 +      test_config color.grep.context          normal &&
 +      test_config color.grep.filename         normal &&
 +      test_config color.grep.function         normal &&
 +      test_config color.grep.linenumber       normal &&
 +      test_config color.grep.matchContext     normal &&
 +      test_config color.grep.matchSelected    red &&
 +      test_config color.grep.selected         normal &&
 +      test_config color.grep.separator        normal &&
 +
 +      git grep --color=always -C2 -e "with " -e space2  space |
 +      test_decode_color >actual &&
 +      test_cmp expected actual
 +'
 +
 +cat >expected <<EOF
 +space-line without leading space1
 +space- line with leading space1
 +space: line <RED>with <RESET>leading <RED>space2<RESET>
 +space- line with leading space3
 +space-line without leading space2
 +EOF
 +
 +test_expect_success 'grep --color -e A --and -e B with context' '
 +      test_config color.grep.context          normal &&
 +      test_config color.grep.filename         normal &&
 +      test_config color.grep.function         normal &&
 +      test_config color.grep.linenumber       normal &&
 +      test_config color.grep.matchContext     normal &&
 +      test_config color.grep.matchSelected    red &&
 +      test_config color.grep.selected         normal &&
 +      test_config color.grep.separator        normal &&
 +
 +      git grep --color=always -C2 -e "with " --and -e space2  space |
 +      test_decode_color >actual &&
 +      test_cmp expected actual
 +'
 +
 +cat >expected <<EOF
 +space-line without leading space1
 +space: line <RED>with <RESET>leading space1
 +space- line with leading space2
 +space: line <RED>with <RESET>leading space3
 +space-line without leading space2
 +EOF
 +
 +test_expect_success 'grep --color -e A --and --not -e B with context' '
 +      test_config color.grep.context          normal &&
 +      test_config color.grep.filename         normal &&
 +      test_config color.grep.function         normal &&
 +      test_config color.grep.linenumber       normal &&
 +      test_config color.grep.matchContext     normal &&
 +      test_config color.grep.matchSelected    red &&
 +      test_config color.grep.selected         normal &&
 +      test_config color.grep.separator        normal &&
 +
 +      git grep --color=always -C2 -e "with " --and --not -e space2  space |
 +      test_decode_color >actual &&
 +      test_cmp expected actual
 +'
 +
 +cat >expected <<EOF
 +hello.c-
 +hello.c=int main(int argc, const char **argv)
 +hello.c-{
 +hello.c:      pr<RED>int<RESET>f("<RED>Hello<RESET> world.\n");
 +hello.c-      return 0;
 +hello.c-      /* char ?? */
 +hello.c-}
 +EOF
 +
 +test_expect_success 'grep --color -e A --and -e B -p with context' '
 +      test_config color.grep.context          normal &&
 +      test_config color.grep.filename         normal &&
 +      test_config color.grep.function         normal &&
 +      test_config color.grep.linenumber       normal &&
 +      test_config color.grep.matchContext     normal &&
 +      test_config color.grep.matchSelected    red &&
 +      test_config color.grep.selected         normal &&
 +      test_config color.grep.separator        normal &&
 +
 +      git grep --color=always -p -C3 -e int --and -e Hello --no-index hello.c |
 +      test_decode_color >actual &&
 +      test_cmp expected actual
 +'
 +
  test_done