t0040-parse-options: improve test coverage
[gitweb.git] / t / t6302-for-each-ref-filter.sh
index fe4796cc9c8b91210f98af8703f1b58e32e757c3..70afb44271a38024d89d0e266bafa009961508de 100755 (executable)
@@ -5,11 +5,14 @@ test_description='test for-each-refs usage of ref-filter APIs'
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-gpg.sh
 
-if ! test_have_prereq GPG
-then
-       skip_all="skipping for-each-ref tests, GPG not available"
-       test_done
-fi
+test_prepare_expect () {
+       if test_have_prereq GPG
+       then
+               cat
+       else
+               sed '/signed/d'
+       fi
+}
 
 test_expect_success 'setup some history and refs' '
        test_commit one &&
@@ -17,8 +20,13 @@ test_expect_success 'setup some history and refs' '
        test_commit three &&
        git checkout -b side &&
        test_commit four &&
-       git tag -s -m "A signed tag message" signed-tag &&
-       git tag -s -m "Annonated doubly" double-tag signed-tag &&
+       git tag -m "An annotated tag" annotated-tag &&
+       git tag -m "Annonated doubly" doubly-annotated-tag annotated-tag &&
+       if test_have_prereq GPG
+       then
+               git tag -s -m "A signed tag" signed-tag &&
+               git tag -s -m "Signed doubly" doubly-signed-tag signed-tag
+       fi &&
        git checkout master &&
        git update-ref refs/odd/spot master
 '
@@ -34,8 +42,9 @@ test_expect_success 'filtering with --points-at' '
 '
 
 test_expect_success 'check signed tags with --points-at' '
-       sed -e "s/Z$//" >expect <<-\EOF &&
+       test_prepare_expect <<-\EOF | sed -e "s/Z$//" >expect &&
        refs/heads/side Z
+       refs/tags/annotated-tag four
        refs/tags/four Z
        refs/tags/signed-tag four
        EOF
@@ -56,9 +65,11 @@ test_expect_success 'filtering with --merged' '
 '
 
 test_expect_success 'filtering with --no-merged' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        refs/heads/side
-       refs/tags/double-tag
+       refs/tags/annotated-tag
+       refs/tags/doubly-annotated-tag
+       refs/tags/doubly-signed-tag
        refs/tags/four
        refs/tags/signed-tag
        EOF
@@ -67,11 +78,13 @@ test_expect_success 'filtering with --no-merged' '
 '
 
 test_expect_success 'filtering with --contains' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        refs/heads/master
        refs/heads/side
        refs/odd/spot
-       refs/tags/double-tag
+       refs/tags/annotated-tag
+       refs/tags/doubly-annotated-tag
+       refs/tags/doubly-signed-tag
        refs/tags/four
        refs/tags/signed-tag
        refs/tags/three
@@ -86,11 +99,13 @@ test_expect_success '%(color) must fail' '
 '
 
 test_expect_success 'left alignment is default' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        refname is refs/heads/master  |refs/heads/master
        refname is refs/heads/side    |refs/heads/side
        refname is refs/odd/spot      |refs/odd/spot
-       refname is refs/tags/double-tag|refs/tags/double-tag
+       refname is refs/tags/annotated-tag|refs/tags/annotated-tag
+       refname is refs/tags/doubly-annotated-tag|refs/tags/doubly-annotated-tag
+       refname is refs/tags/doubly-signed-tag|refs/tags/doubly-signed-tag
        refname is refs/tags/four     |refs/tags/four
        refname is refs/tags/one      |refs/tags/one
        refname is refs/tags/signed-tag|refs/tags/signed-tag
@@ -102,11 +117,13 @@ test_expect_success 'left alignment is default' '
 '
 
 test_expect_success 'middle alignment' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        | refname is refs/heads/master |refs/heads/master
        |  refname is refs/heads/side  |refs/heads/side
        |   refname is refs/odd/spot   |refs/odd/spot
-       |refname is refs/tags/double-tag|refs/tags/double-tag
+       |refname is refs/tags/annotated-tag|refs/tags/annotated-tag
+       |refname is refs/tags/doubly-annotated-tag|refs/tags/doubly-annotated-tag
+       |refname is refs/tags/doubly-signed-tag|refs/tags/doubly-signed-tag
        |  refname is refs/tags/four   |refs/tags/four
        |   refname is refs/tags/one   |refs/tags/one
        |refname is refs/tags/signed-tag|refs/tags/signed-tag
@@ -118,11 +135,13 @@ test_expect_success 'middle alignment' '
 '
 
 test_expect_success 'right alignment' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        |  refname is refs/heads/master|refs/heads/master
        |    refname is refs/heads/side|refs/heads/side
        |      refname is refs/odd/spot|refs/odd/spot
-       |refname is refs/tags/double-tag|refs/tags/double-tag
+       |refname is refs/tags/annotated-tag|refs/tags/annotated-tag
+       |refname is refs/tags/doubly-annotated-tag|refs/tags/doubly-annotated-tag
+       |refname is refs/tags/doubly-signed-tag|refs/tags/doubly-signed-tag
        |     refname is refs/tags/four|refs/tags/four
        |      refname is refs/tags/one|refs/tags/one
        |refname is refs/tags/signed-tag|refs/tags/signed-tag
@@ -133,14 +152,60 @@ test_expect_success 'right alignment' '
        test_cmp expect actual
 '
 
+test_prepare_expect >expect <<-\EOF
+|       refname is refs/heads/master       |refs/heads/master
+|        refname is refs/heads/side        |refs/heads/side
+|         refname is refs/odd/spot         |refs/odd/spot
+|    refname is refs/tags/annotated-tag    |refs/tags/annotated-tag
+|refname is refs/tags/doubly-annotated-tag |refs/tags/doubly-annotated-tag
+|  refname is refs/tags/doubly-signed-tag  |refs/tags/doubly-signed-tag
+|        refname is refs/tags/four         |refs/tags/four
+|         refname is refs/tags/one         |refs/tags/one
+|     refname is refs/tags/signed-tag      |refs/tags/signed-tag
+|        refname is refs/tags/three        |refs/tags/three
+|         refname is refs/tags/two         |refs/tags/two
+EOF
+
+test_align_permutations() {
+       while read -r option
+       do
+               test_expect_success "align:$option" '
+                       git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
+                       test_cmp expect actual
+               '
+       done
+}
+
+test_align_permutations <<-\EOF
+       middle,42
+       42,middle
+       position=middle,42
+       42,position=middle
+       middle,width=42
+       width=42,middle
+       position=middle,width=42
+       width=42,position=middle
+EOF
+
+# Last one wins (silently) when multiple arguments of the same type are given
+
+test_align_permutations <<-\EOF
+       32,width=42,middle
+       width=30,42,middle
+       width=42,position=right,middle
+       42,right,position=middle
+EOF
+
 # Individual atoms inside %(align:...) and %(end) must not be quoted.
 
 test_expect_success 'alignment with format quote' "
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        |'      '\''master| A U Thor'\''      '|
        |'       '\''side| A U Thor'\''       '|
        |'     '\''odd/spot| A U Thor'\''     '|
-       |'        '\''double-tag| '\''        '|
+       |'      '\''annotated-tag| '\''       '|
+       |'   '\''doubly-annotated-tag| '\''   '|
+       |'    '\''doubly-signed-tag| '\''     '|
        |'       '\''four| A U Thor'\''       '|
        |'       '\''one| A U Thor'\''        '|
        |'        '\''signed-tag| '\''        '|
@@ -152,11 +217,13 @@ test_expect_success 'alignment with format quote' "
 "
 
 test_expect_success 'nested alignment with quote formatting' "
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        |'         master               '|
        |'           side               '|
        |'       odd/spot               '|
-       |'     double-tag               '|
+       |'  annotated-tag               '|
+       |'doubly-annotated-tag          '|
+       |'doubly-signed-tag             '|
        |'           four               '|
        |'            one               '|
        |'     signed-tag               '|
@@ -168,14 +235,16 @@ test_expect_success 'nested alignment with quote formatting' "
 "
 
 test_expect_success 'check `%(contents:lines=1)`' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        master |three
        side |four
        odd/spot |three
-       double-tag |Annonated doubly
+       annotated-tag |An annotated tag
+       doubly-annotated-tag |Annonated doubly
+       doubly-signed-tag |Signed doubly
        four |four
        one |one
-       signed-tag |A signed tag message
+       signed-tag |A signed tag
        three |three
        two |two
        EOF
@@ -184,11 +253,13 @@ test_expect_success 'check `%(contents:lines=1)`' '
 '
 
 test_expect_success 'check `%(contents:lines=0)`' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        master |
        side |
        odd/spot |
-       double-tag |
+       annotated-tag |
+       doubly-annotated-tag |
+       doubly-signed-tag |
        four |
        one |
        signed-tag |
@@ -200,14 +271,16 @@ test_expect_success 'check `%(contents:lines=0)`' '
 '
 
 test_expect_success 'check `%(contents:lines=99999)`' '
-       cat >expect <<-\EOF &&
+       test_prepare_expect >expect <<-\EOF &&
        master |three
        side |four
        odd/spot |three
-       double-tag |Annonated doubly
+       annotated-tag |An annotated tag
+       doubly-annotated-tag |Annonated doubly
+       doubly-signed-tag |Signed doubly
        four |four
        one |one
-       signed-tag |A signed tag message
+       signed-tag |A signed tag
        three |three
        two |two
        EOF