Sane use of test_expect_failure

Originally, test_expect_failure was designed to be the opposite
of test_expect_success, but this was a bad decision.  Most tests
run a series of commands that leads to the single command that
needs to be tested, like this:

    test_expect_{success,failure} 'test title' '
	setup1 &&
        setup2 &&
        setup3 &&
        what is to be tested
    '

And expecting a failure exit from the whole sequence misses the
point of writing tests.  Your setup$N that are supposed to
succeed may have failed without even reaching what you are
trying to test.  The only valid use of test_expect_failure is to
check a trivial single command that is expected to fail, which
is a minority in tests of Porcelain-ish commands.

This large-ish patch rewrites all uses of test_expect_failure to
use test_expect_success and rewrites the condition of what is
tested, like this:

    test_expect_success 'test title' '
	setup1 &&
        setup2 &&
        setup3 &&
        ! this command should fail
    '

test_expect_failure is redefined to serve as a reminder that
that test *should* succeed but due to a known breakage in git it
currently does not pass.  So if git-foo command should create a
file 'bar' but you discovered a bug that it doesn't, you can
write a test like this:

    test_expect_failure 'git-foo should create bar' '
        rm -f bar &&
        git foo &&
        test -f bar
    '

This construct acts similar to test_expect_success, but instead
of reporting "ok/FAIL" like test_expect_success does, the
outcome is reported as "FIXED/still broken".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2008-02-01 01:50:53 -08:00
Родитель 6ce8e44a1e
Коммит 41ac414ea2
48 изменённых файлов: 496 добавлений и 425 удалений

Просмотреть файл

@ -160,14 +160,12 @@ library for your script to use.
- test_expect_failure <message> <script>
This is the opposite of test_expect_success. If <script>
yields success, test is considered a failure.
Example:
test_expect_failure \
'git-update-index without --add should fail adding.' \
'git-update-index should-be-empty'
This is NOT the opposite of test_expect_success, but is used
to mark a test that demonstrates a known breakage. Unlike
the usual test_expect_success tests, which say "ok" on
success and "FAIL" on failure, this will say "FIXED" on
success and "still broken" on failure. Failures from these
tests won't cause -i (immediate) to stop.
- test_debug <script>

Просмотреть файл

@ -46,13 +46,25 @@ test_expect_success \
'.git/objects should have 3 subdirectories.' \
'test $(wc -l < full-of-directories) = 3'
################################################################
# Test harness
test_expect_success 'success is reported like this' '
:
'
test_expect_failure 'pretend we have a known breakage' '
false
'
test_expect_failure 'pretend we have fixed a known breakage' '
:
'
################################################################
# Basics of the basics
# updating a new file without --add should fail.
test_expect_failure \
'git update-index without --add should fail adding.' \
'git update-index should-be-empty'
test_expect_success 'git update-index without --add should fail adding.' '
! git update-index should-be-empty
'
# and with --add it should succeed, even if it is empty (it used to fail).
test_expect_success \
@ -70,9 +82,9 @@ test_expect_success \
# Removing paths.
rm -f should-be-empty full-of-directories
test_expect_failure \
'git update-index without --remove should fail removing.' \
'git update-index should-be-empty'
test_expect_success 'git update-index without --remove should fail removing.' '
! git update-index should-be-empty
'
test_expect_success \
'git update-index with --remove should be able to remove.' \
@ -204,9 +216,9 @@ test_expect_success \
'put invalid objects into the index.' \
'git update-index --index-info < badobjects'
test_expect_failure \
'writing this tree without --missing-ok.' \
'git write-tree'
test_expect_success 'writing this tree without --missing-ok.' '
! git write-tree
'
test_expect_success \
'writing this tree with --missing-ok.' \

Просмотреть файл

@ -243,14 +243,14 @@ test_expect_success \
test `printf "$ttt$sss$sss$sss" | git stripspace | wc -l` -gt 0
'
test_expect_failure \
test_expect_success \
'text plus spaces without newline at end should not show spaces' '
printf "$ttt$sss" | git stripspace | grep -q " " ||
printf "$ttt$ttt$sss" | git stripspace | grep -q " " ||
printf "$ttt$ttt$ttt$sss" | git stripspace | grep -q " " ||
printf "$ttt$sss$sss" | git stripspace | grep -q " " ||
printf "$ttt$ttt$sss$sss" | git stripspace | grep -q " " ||
printf "$ttt$sss$sss$sss" | git stripspace | grep -q " "
! (printf "$ttt$sss" | git stripspace | grep -q " ") &&
! (printf "$ttt$ttt$sss" | git stripspace | grep -q " ") &&
! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep -q " ") &&
! (printf "$ttt$sss$sss" | git stripspace | grep -q " ") &&
! (printf "$ttt$ttt$sss$sss" | git stripspace | grep -q " ") &&
! (printf "$ttt$sss$sss$sss" | git stripspace | grep -q " ")
'
test_expect_success \
@ -280,14 +280,14 @@ test_expect_success \
git diff expect actual
'
test_expect_failure \
test_expect_success \
'text plus spaces at end should not show spaces' '
echo "$ttt$sss" | git stripspace | grep -q " " ||
echo "$ttt$ttt$sss" | git stripspace | grep -q " " ||
echo "$ttt$ttt$ttt$sss" | git stripspace | grep -q " " ||
echo "$ttt$sss$sss" | git stripspace | grep -q " " ||
echo "$ttt$ttt$sss$sss" | git stripspace | grep -q " " ||
echo "$ttt$sss$sss$sss" | git stripspace | grep -q " "
! (echo "$ttt$sss" | git stripspace | grep -q " ") &&
! (echo "$ttt$ttt$sss" | git stripspace | grep -q " ") &&
! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep -q " ") &&
! (echo "$ttt$sss$sss" | git stripspace | grep -q " ") &&
! (echo "$ttt$ttt$sss$sss" | git stripspace | grep -q " ") &&
! (echo "$ttt$sss$sss$sss" | git stripspace | grep -q " ")
'
test_expect_success \
@ -339,13 +339,13 @@ test_expect_success \
git diff expect actual
'
test_expect_failure \
test_expect_success \
'spaces without newline at end should not show spaces' '
printf "" | git stripspace | grep -q " " ||
printf "$sss" | git stripspace | grep -q " " ||
printf "$sss$sss" | git stripspace | grep -q " " ||
printf "$sss$sss$sss" | git stripspace | grep -q " " ||
printf "$sss$sss$sss$sss" | git stripspace | grep -q " "
! (printf "" | git stripspace | grep -q " ") &&
! (printf "$sss" | git stripspace | grep -q " ") &&
! (printf "$sss$sss" | git stripspace | grep -q " ") &&
! (printf "$sss$sss$sss" | git stripspace | grep -q " ") &&
! (printf "$sss$sss$sss$sss" | git stripspace | grep -q " ")
'
test_expect_success \

Просмотреть файл

@ -87,9 +87,9 @@ test_expect_success 'unambiguously abbreviated option with "="' '
git diff expect output
'
test_expect_failure 'ambiguously abbreviated option' '
test_expect_success 'ambiguously abbreviated option' '
test-parse-options --strin 123;
test $? != 129
test $? = 129
'
cat > expect << EOF

Просмотреть файл

@ -210,12 +210,12 @@ DF (file) when tree B require DF to be a directory by having DF/DF
END_OF_CASE_TABLE
test_expect_failure \
'1 - must not have an entry not in A.' \
"rm -f .git/index XX &&
test_expect_success '1 - must not have an entry not in A.' "
rm -f .git/index XX &&
echo XX >XX &&
git update-index --add XX &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'2 - must match B in !O && !A && B case.' \
@ -248,13 +248,14 @@ test_expect_success \
echo extra >>AN &&
git read-tree -m $tree_O $tree_A $tree_B"
test_expect_failure \
'3 (fail) - must match A in !O && A && !B case.' \
"rm -f .git/index AN &&
test_expect_success \
'3 (fail) - must match A in !O && A && !B case.' "
rm -f .git/index AN &&
cp .orig-A/AN AN &&
echo extra >>AN &&
git update-index --add AN &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'4 - must match and be up-to-date in !O && A && B && A!=B case.' \
@ -264,21 +265,23 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' \
"rm -f .git/index AA &&
test_expect_success \
'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' "
rm -f .git/index AA &&
cp .orig-A/AA AA &&
git update-index --add AA &&
echo extra >>AA &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' \
"rm -f .git/index AA &&
test_expect_success \
'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' "
rm -f .git/index AA &&
cp .orig-A/AA AA &&
echo extra >>AA &&
git update-index --add AA &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'5 - must match in !O && A && B && A==B case.' \
@ -297,34 +300,38 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'5 (fail) - must match A in !O && A && B && A==B case.' \
"rm -f .git/index LL &&
test_expect_success \
'5 (fail) - must match A in !O && A && B && A==B case.' "
rm -f .git/index LL &&
cp .orig-A/LL LL &&
echo extra >>LL &&
git update-index --add LL &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'6 - must not exist in O && !A && !B case' \
"rm -f .git/index DD &&
test_expect_success \
'6 - must not exist in O && !A && !B case' "
rm -f .git/index DD &&
echo DD >DD
git update-index --add DD &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'7 - must not exist in O && !A && B && O!=B case' \
"rm -f .git/index DM &&
test_expect_success \
'7 - must not exist in O && !A && B && O!=B case' "
rm -f .git/index DM &&
cp .orig-B/DM DM &&
git update-index --add DM &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'8 - must not exist in O && !A && B && O==B case' \
"rm -f .git/index DN &&
test_expect_success \
'8 - must not exist in O && !A && B && O==B case' "
rm -f .git/index DN &&
cp .orig-B/DN DN &&
git update-index --add DN &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'9 - must match and be up-to-date in O && A && !B && O!=A case' \
@ -334,21 +341,23 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' \
"rm -f .git/index MD &&
test_expect_success \
'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' "
rm -f .git/index MD &&
cp .orig-A/MD MD &&
git update-index --add MD &&
echo extra >>MD &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' \
"rm -f .git/index MD &&
test_expect_success \
'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' "
rm -f .git/index MD &&
cp .orig-A/MD MD &&
echo extra >>MD &&
git update-index --add MD &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'10 - must match and be up-to-date in O && A && !B && O==A case' \
@ -358,21 +367,23 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'10 (fail) - must match and be up-to-date in O && A && !B && O==A case' \
"rm -f .git/index ND &&
test_expect_success \
'10 (fail) - must match and be up-to-date in O && A && !B && O==A case' "
rm -f .git/index ND &&
cp .orig-A/ND ND &&
git update-index --add ND &&
echo extra >>ND &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'10 (fail) - must match and be up-to-date in O && A && !B && O==A case' \
"rm -f .git/index ND &&
test_expect_success \
'10 (fail) - must match and be up-to-date in O && A && !B && O==A case' "
rm -f .git/index ND &&
cp .orig-A/ND ND &&
echo extra >>ND &&
git update-index --add ND &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' \
@ -382,21 +393,23 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' \
"rm -f .git/index MM &&
test_expect_success \
'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' "
rm -f .git/index MM &&
cp .orig-A/MM MM &&
git update-index --add MM &&
echo extra >>MM &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' \
"rm -f .git/index MM &&
test_expect_success \
'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' "
rm -f .git/index MM &&
cp .orig-A/MM MM &&
echo extra >>MM &&
git update-index --add MM &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'12 - must match A in O && A && B && O!=A && A==B case' \
@ -415,13 +428,14 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'12 (fail) - must match A in O && A && B && O!=A && A==B case' \
"rm -f .git/index SS &&
test_expect_success \
'12 (fail) - must match A in O && A && B && O!=A && A==B case' "
rm -f .git/index SS &&
cp .orig-A/SS SS &&
echo extra >>SS &&
git update-index --add SS &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'13 - must match A in O && A && B && O!=A && O==B case' \
@ -457,21 +471,23 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' \
"rm -f .git/index NM &&
test_expect_success \
'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' "
rm -f .git/index NM &&
cp .orig-A/NM NM &&
git update-index --add NM &&
echo extra >>NM &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_failure \
'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' \
"rm -f .git/index NM &&
test_expect_success \
'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' "
rm -f .git/index NM &&
cp .orig-A/NM NM &&
echo extra >>NM &&
git update-index --add NM &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
test_expect_success \
'15 - must match A in O && A && B && O==A && O==B case' \
@ -490,13 +506,14 @@ test_expect_success \
git read-tree -m $tree_O $tree_A $tree_B &&
check_result"
test_expect_failure \
'15 (fail) - must match A in O && A && B && O==A && O==B case' \
"rm -f .git/index NN &&
test_expect_success \
'15 (fail) - must match A in O && A && B && O==A && O==B case' "
rm -f .git/index NN &&
cp .orig-A/NN NN &&
echo extra >>NN &&
git update-index --add NN &&
git read-tree -m $tree_O $tree_A $tree_B"
! git read-tree -m $tree_O $tree_A $tree_B
"
# #16
test_expect_success \

Просмотреть файл

@ -101,8 +101,8 @@ echo "Play, play, play" >>hello
echo "Lots of fun" >>example
git commit -m 'Some fun.' -i hello example
test_expect_failure 'git resolve now fails' '
git merge -m "Merge work in mybranch" mybranch
test_expect_success 'git resolve now fails' '
! git merge -m "Merge work in mybranch" mybranch
'
cat > hello << EOF
@ -156,6 +156,8 @@ test_expect_success 'git show-branch' 'cmp show-branch2.expect show-branch2.outp
test_expect_success 'git repack' 'git repack'
test_expect_success 'git prune-packed' 'git prune-packed'
test_expect_failure '-> only packed objects' 'find -type f .git/objects/[0-9a-f][0-9a-f]'
test_expect_success '-> only packed objects' '
! find -type f .git/objects/[0-9a-f][0-9a-f]
'
test_done

Просмотреть файл

@ -181,8 +181,9 @@ test_expect_success 'non-match' \
test_expect_success 'non-match value' \
'test wow = $(git config --get nextsection.nonewline !for)'
test_expect_failure 'ambiguous get' \
'git config --get nextsection.nonewline'
test_expect_success 'ambiguous get' '
! git config --get nextsection.nonewline
'
test_expect_success 'get multivar' \
'git config --get-all nextsection.nonewline'
@ -202,13 +203,17 @@ EOF
test_expect_success 'multivar replace' 'cmp .git/config expect'
test_expect_failure 'ambiguous value' 'git config nextsection.nonewline'
test_expect_success 'ambiguous value' '
! git config nextsection.nonewline
'
test_expect_failure 'ambiguous unset' \
'git config --unset nextsection.nonewline'
test_expect_success 'ambiguous unset' '
! git config --unset nextsection.nonewline
'
test_expect_failure 'invalid unset' \
'git config --unset somesection.nonewline'
test_expect_success 'invalid unset' '
! git config --unset somesection.nonewline
'
git config --unset nextsection.nonewline "wow3$"
@ -224,7 +229,7 @@ EOF
test_expect_success 'multivar unset' 'cmp .git/config expect'
test_expect_failure 'invalid key' 'git config inval.2key blabla'
test_expect_success 'invalid key' '! git config inval.2key blabla'
test_expect_success 'correct key' 'git config 123456.a123 987'
@ -382,8 +387,9 @@ EOF
test_expect_success "rename succeeded" "git diff expect .git/config"
test_expect_failure "rename non-existing section" \
'git config --rename-section branch."world domination" branch.drei'
test_expect_success "rename non-existing section" '
! git config --rename-section branch."world domination" branch.drei
'
test_expect_success "rename succeeded" "git diff expect .git/config"
@ -494,14 +500,14 @@ test_expect_success bool '
done &&
cmp expect result'
test_expect_failure 'invalid bool (--get)' '
test_expect_success 'invalid bool (--get)' '
git config bool.nobool foobar &&
git config --bool --get bool.nobool'
! git config --bool --get bool.nobool'
test_expect_failure 'invalid bool (set)' '
test_expect_success 'invalid bool (set)' '
git config --bool bool.nobool foobar'
! git config --bool bool.nobool foobar'
rm .git/config
@ -562,8 +568,9 @@ EOF
test_expect_success 'quoting' 'cmp .git/config expect'
test_expect_failure 'key with newline' 'git config key.with\\\
newline 123'
test_expect_success 'key with newline' '
! git config "key.with
newline" 123'
test_expect_success 'value with newline' 'git config key.sub value.with\\\
newline'

Просмотреть файл

@ -40,7 +40,8 @@ test_expect_success 'gitdir required mode on normal repos' '
(git apply --check --index test.patch &&
cd test && git apply --check --index ../test.patch)'
test_expect_failure 'gitdir required mode on unsupported repo' '
(cd test2 && git apply --check --index ../test.patch)'
test_expect_success 'gitdir required mode on unsupported repo' '
(cd test2 && ! git apply --check --index ../test.patch)
'
test_done

Просмотреть файл

@ -51,23 +51,23 @@ test_expect_success \
test $B"' = $(cat .git/'"$m"')'
rm -f .git/$m
test_expect_failure \
'(not) create HEAD with old sha1' \
"git update-ref HEAD $A $B"
test_expect_failure \
"(not) prior created .git/$m" \
"test -f .git/$m"
test_expect_success '(not) create HEAD with old sha1' "
! git update-ref HEAD $A $B
"
test_expect_success "(not) prior created .git/$m" "
! test -f .git/$m
"
rm -f .git/$m
test_expect_success \
"create HEAD" \
"git update-ref HEAD $A"
test_expect_failure \
'(not) change HEAD with wrong SHA1' \
"git update-ref HEAD $B $Z"
test_expect_failure \
"(not) changed .git/$m" \
"test $B"' = $(cat .git/'"$m"')'
test_expect_success '(not) change HEAD with wrong SHA1' "
! git update-ref HEAD $B $Z
"
test_expect_success "(not) changed .git/$m" "
! test $B"' = $(cat .git/'"$m"')
'
rm -f .git/$m
: a repository with working tree always has reflog these days...

Просмотреть файл

@ -36,9 +36,9 @@ mkdir path0
date >path0/file0
date >path1
test_expect_failure \
test_expect_success \
'git checkout-index without -f should fail on conflicting work tree.' \
'git checkout-index -a'
'! git checkout-index -a'
test_expect_success \
'git checkout-index with -f should succeed.' \

Просмотреть файл

@ -16,12 +16,12 @@ echo frotz >path0 &&
git update-index --add path0 &&
t=$(git write-tree)'
test_expect_failure \
test_expect_success \
'without -u, git checkout-index smudges stat information.' '
rm -f path0 &&
git read-tree $t &&
git checkout-index -f -a &&
git diff-files | diff - /dev/null'
! git diff-files | diff - /dev/null'
test_expect_success \
'with -u, git checkout-index picks up stat information from new files.' '

Просмотреть файл

@ -67,16 +67,16 @@ test_expect_success 'checkout with simple prefix' '
'
test_expect_failure 'relative path outside tree should fail' \
'git checkout HEAD -- ../../Makefile'
test_expect_success 'relative path outside tree should fail' \
'! git checkout HEAD -- ../../Makefile'
test_expect_failure 'incorrect relative path to file should fail (1)' \
'git checkout HEAD -- ../file0'
test_expect_success 'incorrect relative path to file should fail (1)' \
'! git checkout HEAD -- ../file0'
test_expect_failure 'incorrect relative path should fail (2)' \
'( cd dir1 && git checkout HEAD -- ./file0 )'
test_expect_success 'incorrect relative path should fail (2)' \
'( cd dir1 && ! git checkout HEAD -- ./file0 )'
test_expect_failure 'incorrect relative path should fail (3)' \
'( cd dir1 && git checkout HEAD -- ../../file0 )'
test_expect_success 'incorrect relative path should fail (3)' \
'( cd dir1 && ! git checkout HEAD -- ../../file0 )'
test_done

Просмотреть файл

@ -44,8 +44,8 @@ date >path1/file1
for p in path0/file0 path1/file1 path2 path3
do
test_expect_failure \
test_expect_success \
"git update-index to add conflicting path $p should fail." \
"git update-index --add -- $p"
"! git update-index --add -- $p"
done
test_done

Просмотреть файл

@ -15,9 +15,9 @@ touch foo bar
git update-index --add foo bar
git-commit -m "add foo bar"
test_expect_failure \
test_expect_success \
'git ls-files --error-unmatch should fail with unmatched path.' \
'git ls-files --error-unmatch foo bar-does-not-match'
'! git ls-files --error-unmatch foo bar-does-not-match'
test_expect_success \
'git ls-files --error-unmatch should succeed eith matched paths.' \

Просмотреть файл

@ -17,10 +17,11 @@ test_expect_success \
git-commit -m "Initial commit." &&
HEAD=$(git rev-parse --verify HEAD)'
test_expect_failure \
'git branch --help should not have created a bogus branch' \
'git branch --help </dev/null >/dev/null 2>/dev/null || :
test -f .git/refs/heads/--help'
test_expect_success \
'git branch --help should not have created a bogus branch' '
git branch --help </dev/null >/dev/null 2>/dev/null;
! test -f .git/refs/heads/--help
'
test_expect_success \
'git branch abc should create a branch' \
@ -71,17 +72,17 @@ test_expect_success \
git branch -m n/n n
test -f .git/logs/refs/heads/n'
test_expect_failure \
'git branch -m o/o o should fail when o/p exists' \
'git branch o/o &&
test_expect_success 'git branch -m o/o o should fail when o/p exists' '
git branch o/o &&
git branch o/p &&
git branch -m o/o o'
! git branch -m o/o o
'
test_expect_failure \
'git branch -m q r/q should fail when r exists' \
'git branch q &&
git branch r &&
git branch -m q r/q'
test_expect_success 'git branch -m q r/q should fail when r exists' '
git branch q &&
git branch r &&
! git branch -m q r/q
'
mv .git/config .git/config-saved
@ -108,12 +109,13 @@ test_expect_success 'config information was renamed, too' \
"test $(git config branch.s.dummy) = Hello &&
! git config branch.s/s/dummy"
test_expect_failure \
'git branch -m u v should fail when the reflog for u is a symlink' \
'git branch -l u &&
test_expect_success \
'git branch -m u v should fail when the reflog for u is a symlink' '
git branch -l u &&
mv .git/logs/refs/heads/u real-u &&
ln -s real-u .git/logs/refs/heads/u &&
git branch -m u v'
! git branch -m u v
'
test_expect_success 'test tracking setup via --track' \
'git config remote.local.url . &&

Просмотреть файл

@ -39,12 +39,12 @@ test_expect_success \
git show-ref b >result &&
diff expect result'
test_expect_failure \
'git branch c/d should barf if branch c exists' \
'git branch c &&
test_expect_success 'git branch c/d should barf if branch c exists' '
git branch c &&
git pack-refs --all &&
rm .git/refs/heads/c &&
git branch c/d'
rm -f .git/refs/heads/c &&
! git branch c/d
'
test_expect_success \
'see if a branch still exists after git pack-refs --prune' \
@ -54,11 +54,11 @@ test_expect_success \
git show-ref e >result &&
diff expect result'
test_expect_failure \
'see if git pack-refs --prune remove ref files' \
'git branch f &&
test_expect_success 'see if git pack-refs --prune remove ref files' '
git branch f &&
git pack-refs --all --prune &&
ls .git/refs/heads/f'
! test -f .git/refs/heads/f
'
test_expect_success \
'git branch g should work when git branch g/h has been deleted' \
@ -69,11 +69,11 @@ test_expect_success \
git pack-refs --all &&
git branch -d g'
test_expect_failure \
'git branch i/j/k should barf if branch i exists' \
'git branch i &&
test_expect_success 'git branch i/j/k should barf if branch i exists' '
git branch i &&
git pack-refs --all --prune &&
git branch i/j/k'
! git branch i/j/k
'
test_expect_success \
'test git branch k after branch k/l/m and k/lm have been deleted' \

Просмотреть файл

@ -42,9 +42,9 @@ test_expect_success \
test_expect_success 'rebase against master' '
git rebase master'
test_expect_failure \
test_expect_success \
'the rebase operation should not have destroyed author information' \
'git log | grep "Author:" | grep "<>"'
'! git log | grep "Author:" | grep "<>"'
test_expect_success 'rebase after merge master' '
git reset --hard topic &&

Просмотреть файл

@ -31,8 +31,8 @@ test_expect_success setup '
git branch skip-merge skip-reference
'
test_expect_failure 'rebase with git am -3 (default)' '
git rebase master
test_expect_success 'rebase with git am -3 (default)' '
! git rebase master
'
test_expect_success 'rebase --skip with am -3' '
@ -53,7 +53,7 @@ test_expect_success 'rebase moves back to skip-reference' '
test_expect_success 'checkout skip-merge' 'git checkout -f skip-merge'
test_expect_failure 'rebase with --merge' 'git rebase --merge master'
test_expect_success 'rebase with --merge' '! git rebase --merge master'
test_expect_success 'rebase --skip with --merge' '
git rebase --skip

Просмотреть файл

@ -59,15 +59,16 @@ test_expect_success \
echo "other content" > foo
git rm --cached foo'
test_expect_failure \
'Test that git rm --cached foo fails if the index matches neither the file nor HEAD' \
'echo content > foo
test_expect_success \
'Test that git rm --cached foo fails if the index matches neither the file nor HEAD' '
echo content > foo
git add foo
git commit -m foo
echo "other content" > foo
git add foo
echo "yet another content" > foo
git rm --cached foo'
! git rm --cached foo
'
test_expect_success \
'Test that git rm --cached -f foo works in case where --cached only did not' \
@ -106,9 +107,9 @@ embedded'"
if test "$test_failed_remove" = y; then
chmod a-w .
test_expect_failure \
test_expect_success \
'Test that "git rm -f" fails if its rm fails' \
'git rm -f baz'
'! git rm -f baz'
chmod 775 .
else
test_expect_success 'skipping removal failure (perhaps running as root?)' :
@ -212,8 +213,8 @@ test_expect_success 'Recursive with -r -f' '
! test -d frotz
'
test_expect_failure 'Remove nonexistent file returns nonzero exit status' '
git rm nonexistent
test_expect_success 'Remove nonexistent file returns nonzero exit status' '
! git rm nonexistent
'
test_done

Просмотреть файл

@ -46,21 +46,25 @@ test_expect_success 'stat binary diff (copy) -- should not fail.' \
'git-checkout master
git apply --stat --summary C.diff'
test_expect_failure 'check binary diff -- should fail.' \
'git-checkout master
git apply --check B.diff'
test_expect_success 'check binary diff -- should fail.' \
'git-checkout master &&
! git apply --check B.diff'
test_expect_failure 'check binary diff (copy) -- should fail.' \
'git-checkout master
git apply --check C.diff'
test_expect_success 'check binary diff (copy) -- should fail.' \
'git-checkout master &&
! git apply --check C.diff'
test_expect_failure 'check incomplete binary diff with replacement -- should fail.' \
'git-checkout master
git apply --check --allow-binary-replacement B.diff'
test_expect_success \
'check incomplete binary diff with replacement -- should fail.' '
git-checkout master &&
! git apply --check --allow-binary-replacement B.diff
'
test_expect_failure 'check incomplete binary diff with replacement (copy) -- should fail.' \
'git-checkout master
git apply --check --allow-binary-replacement C.diff'
test_expect_success \
'check incomplete binary diff with replacement (copy) -- should fail.' '
git-checkout master &&
! git apply --check --allow-binary-replacement C.diff
'
test_expect_success 'check binary diff with replacement.' \
'git-checkout master
@ -73,42 +77,42 @@ test_expect_success 'check binary diff with replacement (copy).' \
# Now we start applying them.
do_reset () {
rm -f file?
git-reset --hard
rm -f file? &&
git-reset --hard &&
git-checkout -f master
}
test_expect_failure 'apply binary diff -- should fail.' \
'do_reset
git apply B.diff'
test_expect_success 'apply binary diff -- should fail.' \
'do_reset &&
! git apply B.diff'
test_expect_failure 'apply binary diff -- should fail.' \
'do_reset
git apply --index B.diff'
test_expect_success 'apply binary diff -- should fail.' \
'do_reset &&
! git apply --index B.diff'
test_expect_failure 'apply binary diff (copy) -- should fail.' \
'do_reset
git apply C.diff'
test_expect_success 'apply binary diff (copy) -- should fail.' \
'do_reset &&
! git apply C.diff'
test_expect_failure 'apply binary diff (copy) -- should fail.' \
'do_reset
git apply --index C.diff'
test_expect_success 'apply binary diff (copy) -- should fail.' \
'do_reset &&
! git apply --index C.diff'
test_expect_success 'apply binary diff without replacement.' \
'do_reset
'do_reset &&
git apply BF.diff'
test_expect_success 'apply binary diff without replacement (copy).' \
'do_reset
'do_reset &&
git apply CF.diff'
test_expect_success 'apply binary diff.' \
'do_reset
'do_reset &&
git apply --allow-binary-replacement --index BF.diff &&
test -z "$(git diff --name-status binary)"'
test_expect_success 'apply binary diff (copy).' \
'do_reset
'do_reset &&
git apply --allow-binary-replacement --index CF.diff &&
test -z "$(git diff --name-status binary)"'

Просмотреть файл

@ -29,8 +29,8 @@ test_expect_success setup \
# test
test_expect_failure 'apply at the end' \
'git apply --index test-patch'
test_expect_success 'apply at the end' \
'! git apply --index test-patch'
cat >test-patch <<\EOF
diff a/file b/file
@ -47,7 +47,7 @@ b
c'
git update-index file
test_expect_failure 'apply at the beginning' \
'git apply --index test-patch'
test_expect_success 'apply at the beginning' \
'! git apply --index test-patch'
test_done

Просмотреть файл

@ -264,8 +264,8 @@ test_expect_success \
cp -f .git/objects/9d/235ed07cd19811a6ceb342de82f190e49c9f68 \
.git/objects/c8/2de19312b6c3695c0c18f70709a6c535682a67'
test_expect_failure \
test_expect_success \
'make sure index-pack detects the SHA1 collision' \
'git-index-pack -o bad.idx test-3.pack'
'! git-index-pack -o bad.idx test-3.pack'
test_done

Просмотреть файл

@ -42,9 +42,9 @@ test_expect_success \
'both packs should be identical' \
'cmp "test-1-${pack1}.pack" "test-2-${pack2}.pack"'
test_expect_failure \
test_expect_success \
'index v1 and index v2 should be different' \
'cmp "test-1-${pack1}.idx" "test-2-${pack2}.idx"'
'! cmp "test-1-${pack1}.idx" "test-2-${pack2}.idx"'
test_expect_success \
'index-pack with index version 1' \
@ -78,9 +78,9 @@ test_expect_success \
'git verify-pack -v "test-3-${pack3}.pack"'
test "$have_64bits" &&
test_expect_failure \
test_expect_success \
'64-bit offsets: should be different from previous index v2 results' \
'cmp "test-2-${pack2}.idx" "test-3-${pack3}.idx"'
'! cmp "test-2-${pack2}.idx" "test-3-${pack3}.idx"'
test "$have_64bits" &&
test_expect_success \
@ -112,22 +112,22 @@ test_expect_success \
bs=1 count=20 conv=notrunc &&
git cat-file blob "$delta_sha1" > blob_2 )'
test_expect_failure \
test_expect_success \
'[index v1] 3) corrupted delta happily returned wrong data' \
'cmp blob_1 blob_2'
'! cmp blob_1 blob_2'
test_expect_failure \
test_expect_success \
'[index v1] 4) confirm that the pack is actually corrupted' \
'git fsck --full $commit'
'! git fsck --full $commit'
test_expect_success \
'[index v1] 5) pack-objects happily reuses corrupted data' \
'pack4=$(git pack-objects test-4 <obj-list) &&
test -f "test-4-${pack1}.pack"'
test_expect_failure \
test_expect_success \
'[index v1] 6) newly created pack is BAD !' \
'git verify-pack -v "test-4-${pack1}.pack"'
'! git verify-pack -v "test-4-${pack1}.pack"'
test_expect_success \
'[index v2] 1) stream pack to repository' \
@ -150,16 +150,16 @@ test_expect_success \
bs=1 count=20 conv=notrunc &&
git cat-file blob "$delta_sha1" > blob_4 )'
test_expect_failure \
test_expect_success \
'[index v2] 3) corrupted delta happily returned wrong data' \
'cmp blob_3 blob_4'
'! cmp blob_3 blob_4'
test_expect_failure \
test_expect_success \
'[index v2] 4) confirm that the pack is actually corrupted' \
'git fsck --full $commit'
'! git fsck --full $commit'
test_expect_failure \
test_expect_success \
'[index v2] 5) pack-objects refuses to reuse corrupted data' \
'git pack-objects test-5 <obj-list'
'! git pack-objects test-5 <obj-list'
test_done

Просмотреть файл

@ -60,8 +60,8 @@ echo STDERR post-update >&2
EOF
chmod u+x victim/.git/hooks/post-update
test_expect_failure push '
git-send-pack --force ./victim/.git master tofail >send.out 2>send.err
test_expect_success push '
! git-send-pack --force ./victim/.git master tofail >send.out 2>send.err
'
test_expect_success 'updated as expected' '
@ -112,8 +112,8 @@ test_expect_success 'all *-receive hook args are empty' '
! test -s victim/.git/post-receive.args
'
test_expect_failure 'send-pack produced no output' '
test -s send.out
test_expect_success 'send-pack produced no output' '
! test -s send.out
'
cat <<EOF >expect

Просмотреть файл

@ -30,9 +30,9 @@ EOF
chmod u+x clone${clone}/.git/hooks/post-merge
done
test_expect_failure 'post-merge does not run for up-to-date ' '
test_expect_success 'post-merge does not run for up-to-date ' '
GIT_DIR=clone1/.git git merge $commit0 &&
test -e clone1/.git/post-merge.args
! test -f clone1/.git/post-merge.args
'
test_expect_success 'post-merge runs as expected ' '

Просмотреть файл

@ -176,7 +176,7 @@ test_expect_success "deepening fetch in shallow repo" \
test_expect_success "clone shallow object count" \
"test \"count: 18\" = \"$(grep count count.shallow)\""
test_expect_failure "pull in shallow repo with missing merge base" \
"(cd shallow; git pull --depth 4 .. A)"
test_expect_success "pull in shallow repo with missing merge base" \
"(cd shallow && ! git pull --depth 4 .. A)"
test_done

Просмотреть файл

@ -95,7 +95,7 @@ test_expect_success 'fetch following tags' '
'
test_expect_failure 'fetch must not resolve short tag name' '
test_expect_success 'fetch must not resolve short tag name' '
cd "$D" &&
@ -103,11 +103,11 @@ test_expect_failure 'fetch must not resolve short tag name' '
cd five &&
git init &&
git fetch .. anno:five
! git fetch .. anno:five
'
test_expect_failure 'fetch must not resolve short remote name' '
test_expect_success 'fetch must not resolve short remote name' '
cd "$D" &&
git-update-ref refs/remotes/six/HEAD HEAD
@ -116,7 +116,7 @@ test_expect_failure 'fetch must not resolve short remote name' '
cd six &&
git init &&
git fetch .. six:six
! git fetch .. six:six
'
@ -139,10 +139,10 @@ test_expect_success 'create bundle 2' '
git bundle create bundle2 master~2..master
'
test_expect_failure 'unbundle 1' '
test_expect_success 'unbundle 1' '
cd "$D/bundle" &&
git checkout -b some-branch &&
git fetch "$D/bundle1" master:master
! git fetch "$D/bundle1" master:master
'
test_expect_success 'bundle 1 has only 3 files ' '

Просмотреть файл

@ -26,9 +26,8 @@ test_expect_success 'setup and corrupt repository' '
'
test_expect_failure 'fsck fails' '
git fsck
test_expect_success 'fsck fails' '
! git fsck
'
test_expect_success 'upload-pack fails due to error in pack-objects' '
@ -46,9 +45,8 @@ test_expect_success 'corrupt repo differently' '
'
test_expect_failure 'fsck fails' '
git fsck
test_expect_success 'fsck fails' '
! git fsck
'
test_expect_success 'upload-pack fails due to error in rev-list' '
@ -66,9 +64,9 @@ test_expect_success 'create empty repository' '
'
test_expect_failure 'fetch fails' '
test_expect_success 'fetch fails' '
git fetch .. master
! git fetch .. master
'

Просмотреть файл

@ -11,13 +11,13 @@ remove the directory before attempting a clone again.'
. ./test-lib.sh
test_expect_failure \
test_expect_success \
'clone of non-existent source should fail' \
'git-clone foo bar'
'! git-clone foo bar'
test_expect_failure \
test_expect_success \
'failed clone should not leave a directory' \
'cd bar'
'! test -d bar'
# Need a repo to clone
test_create_repo foo
@ -27,9 +27,9 @@ test_create_repo foo
# source repository given to git-clone should be relative to the
# current path not to the target dir
test_expect_failure \
test_expect_success \
'clone of non-existent (relative to $PWD) source should fail' \
'git-clone ../foo baz'
'! git-clone ../foo baz'
test_expect_success \
'clone should work now that source exists' \

Просмотреть файл

@ -87,10 +87,10 @@ test_valid_repo"
cd "$base_dir"
test_expect_failure 'that info/alternates is necessary' \
test_expect_success 'that info/alternates is necessary' \
'cd C &&
rm .git/objects/info/alternates &&
test_valid_repo'
rm -f .git/objects/info/alternates &&
! (test_valid_repo)'
cd "$base_dir"
@ -101,9 +101,11 @@ test_valid_repo'
cd "$base_dir"
test_expect_failure 'that relative alternate is only possible for current dir' \
'cd D &&
test_valid_repo'
test_expect_success \
'that relative alternate is only possible for current dir' '
cd D &&
! (test_valid_repo)
'
cd "$base_dir"

Просмотреть файл

@ -66,8 +66,8 @@ test_expect_success "merge result added missing LF" \
"git diff test.txt test2.txt"
cp test.txt backup.txt
test_expect_failure "merge with conflicts" \
"git merge-file test.txt orig.txt new3.txt"
test_expect_success "merge with conflicts" \
"! git merge-file test.txt orig.txt new3.txt"
cat > expect.txt << EOF
<<<<<<< test.txt
@ -89,8 +89,8 @@ EOF
test_expect_success "expected conflict markers" "git diff test.txt expect.txt"
cp backup.txt test.txt
test_expect_failure "merge with conflicts, using -L" \
"git merge-file -L 1 -L 2 test.txt orig.txt new3.txt"
test_expect_success "merge with conflicts, using -L" \
"! git merge-file -L 1 -L 2 test.txt orig.txt new3.txt"
cat > expect.txt << EOF
<<<<<<< 1
@ -113,8 +113,8 @@ test_expect_success "expected conflict markers, with -L" \
"git diff test.txt expect.txt"
sed "s/ tu / TU /" < new1.txt > new5.txt
test_expect_failure "conflict in removed tail" \
"git merge-file -p orig.txt new1.txt new5.txt > out"
test_expect_success "conflict in removed tail" \
"! git merge-file -p orig.txt new1.txt new5.txt > out"
cat > expect << EOF
Dominus regit me,

Просмотреть файл

@ -60,7 +60,7 @@ git update-index a1 &&
GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F
'
test_expect_failure "combined merge conflicts" "git merge -m final G"
test_expect_success "combined merge conflicts" "! git merge -m final G"
cat > expect << EOF
<<<<<<< HEAD:a1

Просмотреть файл

@ -30,30 +30,29 @@ echo plain-file > symlink &&
git add symlink &&
git-commit -m b-file'
test_expect_failure \
test_expect_success \
'merge master into b-symlink, which has a different symbolic link' '
! git-checkout b-symlink ||
git-merge master'
git-checkout b-symlink &&
! git-merge master'
test_expect_success \
'the merge result must be a file' '
test -f symlink'
test_expect_failure \
test_expect_success \
'merge master into b-file, which has a file instead of a symbolic link' '
! (git-reset --hard &&
git-checkout b-file) ||
git-merge master'
git-reset --hard && git-checkout b-file &&
! git-merge master'
test_expect_success \
'the merge result must be a file' '
test -f symlink'
test_expect_failure \
test_expect_success \
'merge b-file, which has a file instead of a symbolic link, into master' '
! (git-reset --hard &&
git-checkout master) ||
git-merge b-file'
git-reset --hard &&
git-checkout master &&
! git-merge b-file'
test_expect_success \
'the merge result must be a file' '

Просмотреть файл

@ -26,7 +26,7 @@ test_expect_success 'final^1^1^1 = final^^^' "test $(git rev-parse final^1^1^1)
test_expect_success 'final^1^2' "test $(git rev-parse start2) = $(git rev-parse final^1^2)"
test_expect_success 'final^1^2 != final^1^1' "test $(git rev-parse final^1^2) != $(git rev-parse final^1^1)"
test_expect_success 'final^1^3 not valid' "if git rev-parse --verify final^1^3; then false; else :; fi"
test_expect_failure '--verify start2^1' 'git rev-parse --verify start2^1'
test_expect_success '--verify start2^1' '! git rev-parse --verify start2^1'
test_expect_success '--verify start2^0' 'git rev-parse --verify start2^0'
test_expect_success 'repack for next test' 'git repack -a -d'

Просмотреть файл

@ -43,8 +43,8 @@ test_expect_success 'Check atom names are valid' '
test -z "$bad"
'
test_expect_failure 'Check invalid atoms names are errors' '
git-for-each-ref --format="%(INVALID)" refs/heads
test_expect_success 'Check invalid atoms names are errors' '
! git-for-each-ref --format="%(INVALID)" refs/heads
'
test_expect_success 'Check format specifiers are ignored in naming date atoms' '
@ -63,8 +63,8 @@ test_expect_success 'Check valid format specifiers for date fields' '
git-for-each-ref --format="%(authordate:rfc2822)" refs/heads
'
test_expect_failure 'Check invalid format specifiers are errors' '
git-for-each-ref --format="%(authordate:INVALID)" refs/heads
test_expect_success 'Check invalid format specifiers are errors' '
! git-for-each-ref --format="%(authordate:INVALID)" refs/heads
'
cat >expected <<\EOF

Просмотреть файл

@ -78,9 +78,9 @@ test_expect_success \
git diff-tree -r -M --name-status HEAD^ HEAD | \
grep "^R100..*path2/README..*path1/path2/README"'
test_expect_failure \
test_expect_success \
'do not move directory over existing directory' \
'mkdir path0 && mkdir path0/path2 && git mv path2 path0'
'mkdir path0 && mkdir path0/path2 && ! git mv path2 path0'
test_expect_success \
'move into "."' \

Просмотреть файл

@ -107,8 +107,8 @@ do
diff expected actual
'
test_expect_failure "grep -c $L (no /dev/null)" '
git grep -c test $H | grep -q "/dev/null"
test_expect_success "grep -c $L (no /dev/null)" '
! git grep -c test $H | grep -q /dev/null
'
done

Просмотреть файл

@ -26,8 +26,8 @@ test_expect_success 'listing all tags in an empty tree should output nothing' '
test `git-tag | wc -l` -eq 0
'
test_expect_failure 'looking for a tag in an empty tree should fail' \
'tag_exists mytag'
test_expect_success 'looking for a tag in an empty tree should fail' \
'! (tag_exists mytag)'
test_expect_success 'creating a tag in an empty tree should fail' '
! git-tag mynotag &&
@ -83,9 +83,9 @@ test_expect_success \
# special cases for creating tags:
test_expect_failure \
test_expect_success \
'trying to create a tag with the name of one existing should fail' \
'git tag mytag'
'! git tag mytag'
test_expect_success \
'trying to create a tag with a non-valid name should fail' '
@ -146,8 +146,8 @@ test_expect_success \
! tag_exists myhead
'
test_expect_failure 'trying to delete an already deleted tag should fail' \
'git-tag -d mytag'
test_expect_success 'trying to delete an already deleted tag should fail' \
'! git-tag -d mytag'
# listing various tags with pattern matching:
@ -265,16 +265,16 @@ test_expect_success \
test $(git rev-parse non-annotated-tag) = $(git rev-parse HEAD)
'
test_expect_failure 'trying to verify an unknown tag should fail' \
'git-tag -v unknown-tag'
test_expect_success 'trying to verify an unknown tag should fail' \
'! git-tag -v unknown-tag'
test_expect_failure \
test_expect_success \
'trying to verify a non-annotated and non-signed tag should fail' \
'git-tag -v non-annotated-tag'
'! git-tag -v non-annotated-tag'
test_expect_failure \
test_expect_success \
'trying to verify many non-annotated or unknown tags, should fail' \
'git-tag -v unknown-tag1 non-annotated-tag unknown-tag2'
'! git-tag -v unknown-tag1 non-annotated-tag unknown-tag2'
# creating annotated tags:
@ -1027,21 +1027,21 @@ test_expect_success \
# try to sign with bad user.signingkey
git config user.signingkey BobTheMouse
test_expect_failure \
test_expect_success \
'git-tag -s fails if gpg is misconfigured' \
'git tag -s -m tail tag-gpg-failure'
'! git tag -s -m tail tag-gpg-failure'
git config --unset user.signingkey
# try to verify without gpg:
rm -rf gpghome
test_expect_failure \
test_expect_success \
'verify signed tag fails when public key is not present' \
'git-tag -v signed-tag'
'! git-tag -v signed-tag'
test_expect_failure \
test_expect_success \
'git-tag -a fails if tag annotation is empty' '
GIT_EDITOR=cat git tag -a initial-comment
! (GIT_EDITOR=cat git tag -a initial-comment)
'
test_expect_success \

Просмотреть файл

@ -36,28 +36,28 @@ test_expect_success \
'test -d path0 &&
test -f path0/COPYING'
test_expect_failure \
test_expect_success \
'checking lack of path1/path2/COPYING' \
'test -f path1/path2/COPYING'
'! test -f path1/path2/COPYING'
test_expect_failure \
test_expect_success \
'checking lack of path1/COPYING' \
'test -f path1/COPYING'
'! test -f path1/COPYING'
test_expect_failure \
test_expect_success \
'checking lack of COPYING' \
'test -f COPYING'
'! test -f COPYING'
test_expect_failure \
test_expect_success \
'checking checking lack of path1/COPYING-TOO' \
'test -f path0/COPYING-TOO'
'! test -f path0/COPYING-TOO'
test_expect_failure \
test_expect_success \
'checking lack of path1/path2' \
'test -d path1/path2'
'! test -d path1/path2'
test_expect_failure \
test_expect_success \
'checking lack of path1' \
'test -d path1'
'! test -d path1'
test_done

Просмотреть файл

@ -17,49 +17,49 @@ test_expect_success \
git-add file && \
git-status | grep 'Initial commit'"
test_expect_failure \
test_expect_success \
"fail initial amend" \
"git-commit --amend"
"! git-commit --amend"
test_expect_success \
"initial commit" \
"git-commit -m initial"
test_expect_failure \
test_expect_success \
"invalid options 1" \
"git-commit -m foo -m bar -F file"
"! git-commit -m foo -m bar -F file"
test_expect_failure \
test_expect_success \
"invalid options 2" \
"git-commit -C HEAD -m illegal"
"! git-commit -C HEAD -m illegal"
test_expect_failure \
test_expect_success \
"using paths with -a" \
"echo King of the bongo >file &&
git-commit -m foo -a file"
! git-commit -m foo -a file"
test_expect_failure \
test_expect_success \
"using paths with --interactive" \
"echo bong-o-bong >file &&
echo 7 | git-commit -m foo --interactive file"
! echo 7 | git-commit -m foo --interactive file"
test_expect_failure \
test_expect_success \
"using invalid commit with -C" \
"git-commit -C bogus"
"! git-commit -C bogus"
test_expect_failure \
test_expect_success \
"testing nothing to commit" \
"git-commit -m initial"
"! git-commit -m initial"
test_expect_success \
"next commit" \
"echo 'bongo bongo bongo' >file \
git-commit -m next -a"
test_expect_failure \
test_expect_success \
"commit message from non-existing file" \
"echo 'more bongo: bongo bongo bongo bongo' >file && \
git-commit -F gah -a"
! git-commit -F gah -a"
# Empty except stray tabs and spaces on a few lines.
sed -e 's/@$//' >msg <<EOF
@ -68,9 +68,9 @@ sed -e 's/@$//' >msg <<EOF
@
Signed-off-by: hula
EOF
test_expect_failure \
test_expect_success \
"empty commit message" \
"git-commit -F msg -a"
"! git-commit -F msg -a"
test_expect_success \
"commit message from file" \
@ -88,10 +88,10 @@ test_expect_success \
"amend commit" \
"VISUAL=./editor git-commit --amend"
test_expect_failure \
test_expect_success \
"passing -m and -F" \
"echo 'enough with the bongos' >file && \
git-commit -F msg -m amending ."
! git-commit -F msg -m amending ."
test_expect_success \
"using message from other commit" \

Просмотреть файл

@ -52,11 +52,11 @@ cat > "$HOOK" <<EOF
exit 1
EOF
test_expect_failure 'with failing hook' '
test_expect_success 'with failing hook' '
echo "another" >> file &&
git add file &&
git commit -m "another"
! git commit -m "another"
'

Просмотреть файл

@ -98,20 +98,20 @@ cat > "$HOOK" <<EOF
exit 1
EOF
test_expect_failure 'with failing hook' '
test_expect_success 'with failing hook' '
echo "another" >> file &&
git add file &&
git commit -m "another"
! git commit -m "another"
'
test_expect_failure 'with failing hook (editor)' '
test_expect_success 'with failing hook (editor)' '
echo "more another" >> file &&
git add file &&
echo "more another" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit
! (GIT_EDITOR="$FAKE_EDITOR" git commit)
'

Просмотреть файл

@ -56,19 +56,19 @@ test_expect_success "$name" "
name='detect node change from file to directory #1'
test_expect_failure "$name" "
test_expect_success "$name" "
mkdir dir/new_file &&
mv dir/file dir/new_file/file &&
mv dir/new_file dir/file &&
git update-index --remove dir/file &&
git update-index --add dir/file/file &&
git commit -m '$name' &&
git-svn set-tree --find-copies-harder --rmdir \
git commit -m '$name' &&
! git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch" || true
name='detect node change from directory to file #1'
test_expect_failure "$name" "
test_expect_success "$name" "
rm -rf dir '$GIT_DIR'/index &&
git checkout -f -b mybranch2 remotes/git-svn &&
mv bar/zzz zzz &&
@ -77,12 +77,12 @@ test_expect_failure "$name" "
git update-index --remove -- bar/zzz &&
git update-index --add -- bar &&
git commit -m '$name' &&
git-svn set-tree --find-copies-harder --rmdir \
! git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch2" || true
name='detect node change from file to directory #2'
test_expect_failure "$name" "
test_expect_success "$name" "
rm -f '$GIT_DIR'/index &&
git checkout -f -b mybranch3 remotes/git-svn &&
rm bar/zzz &&
@ -91,12 +91,12 @@ test_expect_failure "$name" "
echo yyy > bar/zzz/yyy &&
git update-index --add bar/zzz/yyy &&
git commit -m '$name' &&
git-svn set-tree --find-copies-harder --rmdir \
! git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch3" || true
name='detect node change from directory to file #2'
test_expect_failure "$name" "
test_expect_success "$name" "
rm -f '$GIT_DIR'/index &&
git checkout -f -b mybranch4 remotes/git-svn &&
rm -rf dir &&
@ -105,7 +105,7 @@ test_expect_failure "$name" "
echo asdf > dir &&
git update-index --add -- dir &&
git commit -m '$name' &&
git-svn set-tree --find-copies-harder --rmdir \
! git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch4" || true
@ -213,18 +213,18 @@ EOF
test_expect_success "$name" "git diff a expected"
test_expect_failure 'exit if remote refs are ambigious' "
test_expect_success 'exit if remote refs are ambigious' "
git config --add svn-remote.svn.fetch \
bar:refs/remotes/git-svn &&
git-svn migrate
"
! git-svn migrate
"
test_expect_failure 'exit if init-ing a would clobber a URL' "
test_expect_success 'exit if init-ing a would clobber a URL' "
svnadmin create ${PWD}/svnrepo2 &&
svn mkdir -m 'mkdir bar' ${svnrepo}2/bar &&
git config --unset svn-remote.svn.fetch \
'^bar:refs/remotes/git-svn$' &&
git-svn init ${svnrepo}2/bar
! git-svn init ${svnrepo}2/bar
"
test_expect_success \

Просмотреть файл

@ -24,11 +24,11 @@ test_expect_success 'commit change from svn side' "
rm -rf t.svn
"
test_expect_failure 'commit conflicting change from git' "
test_expect_success 'commit conflicting change from git' "
echo second line from git >> file &&
git commit -a -m 'second line from git' &&
git-svn commit-diff -r1 HEAD~1 HEAD $svnrepo
" || true
! git-svn commit-diff -r1 HEAD~1 HEAD $svnrepo
"
test_expect_success 'commit complementing change from git' "
git reset --hard HEAD~1 &&
@ -39,7 +39,7 @@ test_expect_success 'commit complementing change from git' "
git-svn commit-diff -r2 HEAD~1 HEAD $svnrepo
"
test_expect_failure 'dcommit fails to commit because of conflict' "
test_expect_success 'dcommit fails to commit because of conflict' "
git-svn init $svnrepo &&
git-svn fetch &&
git reset --hard refs/remotes/git-svn &&
@ -52,8 +52,8 @@ test_expect_failure 'dcommit fails to commit because of conflict' "
rm -rf t.svn &&
echo 'fourth line from git' >> file &&
git commit -a -m 'fourth line from git' &&
git-svn dcommit
" || true
! git-svn dcommit
"
test_expect_success 'dcommit does the svn equivalent of an index merge' "
git reset --hard refs/remotes/git-svn &&
@ -76,15 +76,15 @@ test_expect_success 'commit another change from svn side' "
rm -rf t.svn
"
test_expect_failure 'multiple dcommit from git-svn will not clobber svn' "
test_expect_success 'multiple dcommit from git-svn will not clobber svn' "
git reset --hard refs/remotes/git-svn &&
echo new file >> new-file &&
git update-index --add new-file &&
git commit -a -m 'new file' &&
echo clobber > file &&
git commit -a -m 'clobber' &&
git svn dcommit
" || true
! git svn dcommit
"
test_expect_success 'check that rebase really failed' 'test -d .dotest'

Просмотреть файл

@ -54,10 +54,10 @@ test_expect_success 'change file but in unrelated area' "
test x\"\`sed -n -e 61p < file\`\" = x6611
"
test_expect_failure 'attempt to dcommit with a dirty index' '
test_expect_success 'attempt to dcommit with a dirty index' '
echo foo >>file &&
git add file &&
git svn dcommit
! git svn dcommit
'
test_done

Просмотреть файл

@ -165,9 +165,9 @@ from refs/heads/master
M 755 0000000000000000000000000000000000000001 zero1
INPUT_END
test_expect_failure \
'B: fail on invalid blob sha1' \
'git-fast-import <input'
test_expect_success 'B: fail on invalid blob sha1' '
! git-fast-import <input
'
rm -f .git/objects/pack_* .git/objects/index_*
cat >input <<INPUT_END
@ -180,9 +180,9 @@ COMMIT
from refs/heads/master
INPUT_END
test_expect_failure \
'B: fail on invalid branch name ".badbranchname"' \
'git-fast-import <input'
test_expect_success 'B: fail on invalid branch name ".badbranchname"' '
! git-fast-import <input
'
rm -f .git/objects/pack_* .git/objects/index_*
cat >input <<INPUT_END
@ -195,9 +195,9 @@ COMMIT
from refs/heads/master
INPUT_END
test_expect_failure \
'B: fail on invalid branch name "bad[branch]name"' \
'git-fast-import <input'
test_expect_success 'B: fail on invalid branch name "bad[branch]name"' '
! git-fast-import <input
'
rm -f .git/objects/pack_* .git/objects/index_*
cat >input <<INPUT_END
@ -339,9 +339,9 @@ COMMIT
from refs/heads/branch^0
INPUT_END
test_expect_failure \
'E: rfc2822 date, --date-format=raw' \
'git-fast-import --date-format=raw <input'
test_expect_success 'E: rfc2822 date, --date-format=raw' '
! git-fast-import --date-format=raw <input
'
test_expect_success \
'E: rfc2822 date, --date-format=rfc2822' \
'git-fast-import --date-format=rfc2822 <input'

Просмотреть файл

@ -156,15 +156,19 @@ test_expect_success 'req_Root (strict paths)' \
'cat request-anonymous | git-cvsserver --strict-paths pserver $SERVERDIR >log 2>&1 &&
tail -n1 log | grep -q "^I LOVE YOU$"'
test_expect_failure 'req_Root failure (strict-paths)' \
'cat request-anonymous | git-cvsserver --strict-paths pserver $WORKDIR >log 2>&1'
test_expect_success 'req_Root failure (strict-paths)' '
! cat request-anonymous |
git-cvsserver --strict-paths pserver $WORKDIR >log 2>&1
'
test_expect_success 'req_Root (w/o strict-paths)' \
'cat request-anonymous | git-cvsserver pserver $WORKDIR/ >log 2>&1 &&
tail -n1 log | grep -q "^I LOVE YOU$"'
test_expect_failure 'req_Root failure (w/o strict-paths)' \
'cat request-anonymous | git-cvsserver pserver $WORKDIR/gitcvs >log 2>&1'
test_expect_success 'req_Root failure (w/o strict-paths)' '
! cat request-anonymous |
git-cvsserver pserver $WORKDIR/gitcvs >log 2>&1
'
cat >request-base <<EOF
BEGIN AUTH REQUEST
@ -179,8 +183,10 @@ test_expect_success 'req_Root (base-path)' \
'cat request-base | git-cvsserver --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&
tail -n1 log | grep -q "^I LOVE YOU$"'
test_expect_failure 'req_Root failure (base-path)' \
'cat request-anonymous | git-cvsserver --strict-paths --base-path $WORKDIR pserver $SERVERDIR >log 2>&1'
test_expect_success 'req_Root failure (base-path)' '
! cat request-anonymous |
git-cvsserver --strict-paths --base-path $WORKDIR pserver $SERVERDIR >log 2>&1
'
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false || exit 1
@ -188,9 +194,8 @@ test_expect_success 'req_Root (export-all)' \
'cat request-anonymous | git-cvsserver --export-all pserver $WORKDIR >log 2>&1 &&
tail -n1 log | grep -q "^I LOVE YOU$"'
test_expect_failure 'req_Root failure (export-all w/o whitelist)' \
'cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 ||
false'
test_expect_success 'req_Root failure (export-all w/o whitelist)' \
'! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'
test_expect_success 'req_Root (everything together)' \
'cat request-base | git-cvsserver --export-all --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&
@ -290,15 +295,16 @@ test_expect_success 'cvs update (update existing file)' \
cd "$WORKDIR"
#TODO: cvsserver doesn't support update w/o -d
test_expect_failure "cvs update w/o -d doesn't create subdir (TODO)" \
'mkdir test &&
test_expect_failure "cvs update w/o -d doesn't create subdir (TODO)" '
mkdir test &&
echo >test/empty &&
git add test &&
git commit -q -m "Single Subdirectory" &&
git push gitcvs.git >/dev/null &&
cd cvswork &&
GIT_CONFIG="$git_config" cvs -Q update &&
test ! -d test'
test ! -d test
'
cd "$WORKDIR"
test_expect_success 'cvs update (subdirectories)' \

Просмотреть файл

@ -139,6 +139,8 @@ fi
test_failure=0
test_count=0
test_fixed=0
test_broken=0
trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
@ -171,6 +173,17 @@ test_failure_ () {
test "$immediate" = "" || { trap - exit; exit 1; }
}
test_known_broken_ok_ () {
test_count=$(expr "$test_count" + 1)
test_fixed=$(($test_fixed+1))
say_color "" " FIXED $test_count: $@"
}
test_known_broken_failure_ () {
test_count=$(expr "$test_count" + 1)
test_broken=$(($test_broken+1))
say_color skip " still broken $test_count: $@"
}
test_debug () {
test "$debug" = "" || eval "$1"
@ -211,13 +224,13 @@ test_expect_failure () {
error "bug in the test script: not 2 parameters to test-expect-failure"
if ! test_skip "$@"
then
say >&3 "expecting failure: $2"
say >&3 "checking known breakage: $2"
test_run_ "$2"
if [ "$?" = 0 -a "$eval_ret" != 0 -a "$eval_ret" -lt 129 ]
if [ "$?" = 0 -a "$eval_ret" = 0 ]
then
test_ok_ "$1"
test_known_broken_ok_ "$1"
else
test_failure_ "$@"
test_known_broken_failure_ "$1"
fi
fi
echo >&3 ""
@ -274,6 +287,15 @@ test_create_repo () {
test_done () {
trap - exit
if test "$test_fixed" != 0
then
say_color pass "fixed $test_fixed known breakage(s)"
fi
if test "$test_broken" != 0
then
say_color error "still have $test_broken known breakage(s)"
fi
case "$test_failure" in
0)
# We could: