blob: 7534a762084b9883af42febe630e47b14413d39e [file] [log] [blame]
Junio C Hamanoe1970ce2005-05-13 22:50:32 -07001#!/bin/sh
2#
3# Copyright (c) 2005 Junio C Hamano
4#
5
6# For repeatability, reset the environment to known value.
7LANG=C
Junio C Hamano899460f2005-10-09 21:58:02 -07008LC_ALL=C
Pavel Roskind9bdd392005-08-10 22:10:01 -04009PAGER=cat
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070010TZ=UTC
Junio C Hamano899460f2005-10-09 21:58:02 -070011export LANG LC_ALL PAGER TZ
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070012unset AUTHOR_DATE
13unset AUTHOR_EMAIL
14unset AUTHOR_NAME
15unset COMMIT_AUTHOR_EMAIL
16unset COMMIT_AUTHOR_NAME
17unset GIT_ALTERNATE_OBJECT_DIRECTORIES
18unset GIT_AUTHOR_DATE
19unset GIT_AUTHOR_EMAIL
20unset GIT_AUTHOR_NAME
Junio C Hamano6677c462005-12-15 12:54:00 -080021unset GIT_COMMITTER_DATE
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070022unset GIT_COMMITTER_EMAIL
23unset GIT_COMMITTER_NAME
24unset GIT_DIFF_OPTS
25unset GIT_DIR
26unset GIT_EXTERNAL_DIFF
27unset GIT_INDEX_FILE
28unset GIT_OBJECT_DIRECTORY
29unset SHA1_FILE_DIRECTORIES
30unset SHA1_FILE_DIRECTORY
31
32# Each test should start with something like this, after copyright notices:
33#
34# test_description='Description of this test...
35# This test checks if command xyzzy does the right thing...
36# '
37# . ./test-lib.sh
38
39error () {
40 echo "* error: $*"
Pavel Roskin41184272005-08-11 12:00:40 -040041 trap - exit
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070042 exit 1
43}
44
45say () {
46 echo "* $*"
47}
48
49test "${test_description}" != "" ||
50error "Test script did not set test_description."
51
52while test "$#" -ne 0
53do
54 case "$1" in
55 -d|--d|--de|--deb|--debu|--debug)
56 debug=t; shift ;;
Junio C Hamano886856a2005-05-14 00:24:27 -070057 -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate)
58 immediate=t; shift ;;
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070059 -h|--h|--he|--hel|--help)
60 echo "$test_description"
61 exit 0 ;;
62 -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
63 verbose=t; shift ;;
64 *)
65 break ;;
66 esac
67done
68
Pavel Roskin4d9d62f2005-08-10 23:56:21 -040069exec 5>&1
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070070if test "$verbose" = "t"
71then
72 exec 4>&2 3>&1
73else
74 exec 4>/dev/null 3>/dev/null
75fi
76
77test_failure=0
78test_count=0
79
Pavel Roskin41184272005-08-11 12:00:40 -040080trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit
81
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070082
Junio C Hamano886856a2005-05-14 00:24:27 -070083# You are not expected to call test_ok_ and test_failure_ directly, use
84# the text_expect_* functions instead.
85
86test_ok_ () {
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070087 test_count=$(expr "$test_count" + 1)
Petr Baudis94e8afa2005-05-14 18:01:30 +020088 say " ok $test_count: $@"
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070089}
90
Junio C Hamano886856a2005-05-14 00:24:27 -070091test_failure_ () {
Junio C Hamanoe1970ce2005-05-13 22:50:32 -070092 test_count=$(expr "$test_count" + 1)
93 test_failure=$(expr "$test_failure" + 1);
Junio C Hamanobf0dd8a2005-07-22 19:09:34 -070094 say "FAIL $test_count: $1"
95 shift
96 echo "$@" | sed -e 's/^/ /'
Pavel Roskin41184272005-08-11 12:00:40 -040097 test "$immediate" = "" || { trap - exit; exit 1; }
Junio C Hamano886856a2005-05-14 00:24:27 -070098}
99
100
101test_debug () {
Junio C Hamano8e832eb2005-08-10 22:53:27 -0700102 test "$debug" = "" || eval "$1"
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700103}
104
Pavel Roskin4d9d62f2005-08-10 23:56:21 -0400105test_run_ () {
Pavel Roskin4d9d62f2005-08-10 23:56:21 -0400106 eval >&3 2>&4 "$1"
107 eval_ret="$?"
Pavel Roskin4d9d62f2005-08-10 23:56:21 -0400108 return 0
109}
110
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700111test_expect_failure () {
Junio C Hamano8e832eb2005-08-10 22:53:27 -0700112 test "$#" = 2 ||
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700113 error "bug in the test script: not 2 parameters to test-expect-failure"
114 say >&3 "expecting failure: $2"
Pavel Roskin4d9d62f2005-08-10 23:56:21 -0400115 test_run_ "$2"
116 if [ "$?" = 0 -a "$eval_ret" != 0 ]
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700117 then
Junio C Hamano886856a2005-05-14 00:24:27 -0700118 test_ok_ "$1"
Pavel Roskin4d9d62f2005-08-10 23:56:21 -0400119 else
120 test_failure_ "$@"
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700121 fi
122}
123
124test_expect_success () {
Junio C Hamano8e832eb2005-08-10 22:53:27 -0700125 test "$#" = 2 ||
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700126 error "bug in the test script: not 2 parameters to test-expect-success"
127 say >&3 "expecting success: $2"
Pavel Roskin4d9d62f2005-08-10 23:56:21 -0400128 test_run_ "$2"
129 if [ "$?" = 0 -a "$eval_ret" = 0 ]
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700130 then
Junio C Hamano886856a2005-05-14 00:24:27 -0700131 test_ok_ "$1"
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700132 else
Junio C Hamano886856a2005-05-14 00:24:27 -0700133 test_failure_ "$@"
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700134 fi
135}
136
Fredrik Kuivinend3bfdb72005-12-03 11:40:39 +0100137test_expect_code () {
138 test "$#" = 3 ||
139 error "bug in the test script: not 3 parameters to test-expect-code"
140 say >&3 "expecting exit code $1: $3"
141 test_run_ "$3"
142 if [ "$?" = 0 -a "$eval_ret" = "$1" ]
143 then
144 test_ok_ "$2"
145 else
146 test_failure_ "$@"
147 fi
148}
149
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700150test_done () {
Pavel Roskin41184272005-08-11 12:00:40 -0400151 trap - exit
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700152 case "$test_failure" in
Junio C Hamano10b94e22005-12-09 17:32:18 -0800153 0)
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700154 # We could:
155 # cd .. && rm -fr trash
156 # but that means we forbid any tests that use their own
157 # subdirectory from calling test_done without coming back
158 # to where they started from.
159 # The Makefile provided will clean this test area so
160 # we will leave things as they are.
161
162 say "passed all $test_count test(s)"
163 exit 0 ;;
164
165 *)
166 say "failed $test_failure among $test_count test(s)"
167 exit 1 ;;
168
169 esac
170}
171
172# Test the binaries we have just built. The tests are kept in
173# t/ subdirectory and are run in trash subdirectory.
174PATH=$(pwd)/..:$PATH
Johannes Schindelina0fa2a12005-11-16 02:44:50 +0100175GIT_EXEC_PATH=$(pwd)/..
Junio C Hamano49ccb082005-12-07 21:52:28 -0800176export PATH GIT_EXEC_PATH
177
178# Similarly use ../compat/subprocess.py if our python does not
179# have subprocess.py on its own.
180PYTHON=`sed -e '1{
181 s/^#!//
182 q
Junio C Hamanoeea42062005-12-10 20:55:32 -0800183}' ../git-merge-recursive` || {
184 error "You haven't built things yet, have you?"
185}
Junio C Hamano49ccb082005-12-07 21:52:28 -0800186"$PYTHON" -c 'import subprocess' 2>/dev/null || {
187 PYTHONPATH=$(pwd)/../compat
188 export PYTHONPATH
189}
Junio C Hamanoeea42062005-12-10 20:55:32 -0800190test -d ../templates/blt || {
191 error "You haven't built things yet, have you?"
192}
Junio C Hamanoe1970ce2005-05-13 22:50:32 -0700193
194# Test repository
195test=trash
196rm -fr "$test"
197mkdir "$test"
Alex Riesen2ccd2022006-01-05 12:57:36 +0100198cd "$test" || error "Cannot setup test environment"
Junio C Hamano10b94e22005-12-09 17:32:18 -0800199"$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null ||
Junio C Hamanoeea42062005-12-10 20:55:32 -0800200error "cannot run git init-db -- have you built things yet?"
Junio C Hamanoc09a69a2005-10-16 00:24:34 -0700201
202mv .git/hooks .git/hooks-disabled