tests: use Git's test framework

This allows tests to run in parallel as well as letting us use "prove"
or another TAP harness to run the tests.

Git's test framework requires Git to be fully built before letting any
tests run, so add a new target to the top-level Makefile which builds
all of Git instead of just libgit.a and make the "test" target depend on
that.

Signed-off-by: John Keeping <john@keeping.me.uk>
这个提交包含在:
John Keeping
2013-04-01 15:09:05 +01:00
提交者 Jason A. Donenfeld
父节点 8a92df033e
当前提交 c95cc5ec56
共有 13 个文件被更改,包括 239 次插入291 次删除

查看文件

@ -15,46 +15,48 @@
# run_test 'repo index' 'cgit_url "/" | tidy -e'
# run_test 'repo summary' 'cgit_url "/foo" | tidy -e'
unset CDPATH
: ${TEST_DIRECTORY=$(pwd)/../git/t}
TEST_NO_CREATE_REPO=YesPlease
. "$TEST_DIRECTORY"/test-lib.sh
# Prepend the directory containing cgit to PATH.
PATH="$(pwd)/../..:$PATH"
mkrepo() {
name=$1
count=$2
dir=$PWD
test -d "$name" && return
printf "Creating testrepo %s\n" "$name"
mkdir -p "$name"
cd "$name"
git init
n=1
while test $n -le $count
do
echo $n >file-$n
git add file-$n
git commit -m "commit $n"
n=$(expr $n + 1)
done
if test "$3" = "testplus"
then
echo "hello" >a+b
git add a+b
git commit -m "add a+b"
git branch "1+2"
fi
cd "$dir"
test_create_repo "$name"
(
cd "$name"
n=1
while test $n -le $count
do
echo $n >file-$n
git add file-$n
git commit -m "commit $n"
n=$(expr $n + 1)
done
if test "$3" = "testplus"
then
echo "hello" >a+b
git add a+b
git commit -m "add a+b"
git branch "1+2"
fi
)
}
setup_repos()
{
rm -rf trash/cache
mkdir -p trash/cache
mkrepo trash/repos/foo 5 >/dev/null
mkrepo trash/repos/bar 50 >/dev/null
mkrepo trash/repos/foo+bar 10 testplus >/dev/null
mkrepo "trash/repos/with space" 2 >/dev/null
cat >trash/cgitrc <<EOF
rm -rf cache
mkdir -p cache
mkrepo repos/foo 5 >/dev/null
mkrepo repos/bar 50 >/dev/null
mkrepo repos/foo+bar 10 testplus >/dev/null
mkrepo "repos/with space" 2 >/dev/null
cat >cgitrc <<EOF
virtual-root=/
cache-root=$PWD/trash/cache
cache-root=$PWD/cache
cache-size=1021
snapshots=tar.gz tar.bz zip
@ -66,83 +68,33 @@ summary-tags=5
clone-url=git://example.org/\$CGIT_REPO_URL.git
repo.url=foo
repo.path=$PWD/trash/repos/foo/.git
repo.path=$PWD/repos/foo/.git
# Do not specify a description for this repo, as it then will be assigned
# the constant value "[no description]" (which actually used to cause a
# segfault).
repo.url=bar
repo.path=$PWD/trash/repos/bar/.git
repo.path=$PWD/repos/bar/.git
repo.desc=the bar repo
repo.url=foo+bar
repo.path=$PWD/trash/repos/foo+bar/.git
repo.path=$PWD/repos/foo+bar/.git
repo.desc=the foo+bar repo
repo.url=with space
repo.path=$PWD/trash/repos/with space/.git
repo.path=$PWD/repos/with space/.git
repo.desc=spaced repo
EOF
}
prepare_tests()
{
setup_repos
rm -f test-output.log 2>/dev/null
test_count=0
test_failed=0
echo "[$0]" "$@" >test-output.log
echo "$@" "($0)"
}
tests_done()
{
printf "\n"
if test $test_failed -gt 0
then
printf "test: *** %s failure(s), logfile=%s\n" \
$test_failed "$(pwd)/test-output.log"
false
fi
}
run_test()
{
bug=0
if test "$1" = "BUG"
then
bug=1
shift
fi
desc=$1
script=$2
test_count=$(expr $test_count + 1)
printf "\ntest %d: name='%s'\n" $test_count "$desc" >>test-output.log
printf "test %d: eval='%s'\n" $test_count "$2" >>test-output.log
eval "$2" >>test-output.log 2>>test-output.log
res=$?
printf "test %d: exitcode=%d\n" $test_count $res >>test-output.log
if test $res = 0 -a $bug = 0
then
printf " %2d) %-60s [ok]\n" $test_count "$desc"
elif test $res = 0 -a $bug = 1
then
printf " %2d) %-60s [BUG FIXED]\n" $test_count "$desc"
elif test $bug = 1
then
printf " %2d) %-60s [KNOWN BUG]\n" $test_count "$desc"
else
test_failed=$(expr $test_failed + 1)
printf " %2d) %-60s [failed]\n" $test_count "$desc"
fi
}
cgit_query()
{
CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="$1" "$PWD/../cgit"
CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="$1" cgit
}
cgit_url()
{
CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="url=$1" "$PWD/../cgit"
CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="url=$1" cgit
}
test -z "$CGIT_TEST_NO_CREATE_REPOS" && setup_repos