]>
Commit | Line | Data |
---|---|---|
e1970ce4 JH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2005 Junio C Hamano | |
4 | # | |
5 | ||
6 | # For repeatability, reset the environment to known value. | |
7 | LANG=C | |
899460f3 | 8 | LC_ALL=C |
d9bdd39e | 9 | PAGER=cat |
e1970ce4 | 10 | TZ=UTC |
899460f3 | 11 | export LANG LC_ALL PAGER TZ |
8ff99e74 EW |
12 | EDITOR=: |
13 | VISUAL=: | |
18508c39 | 14 | unset GIT_EDITOR |
e1970ce4 JH |
15 | unset AUTHOR_DATE |
16 | unset AUTHOR_EMAIL | |
17 | unset AUTHOR_NAME | |
18 | unset COMMIT_AUTHOR_EMAIL | |
19 | unset COMMIT_AUTHOR_NAME | |
28a94f88 | 20 | unset EMAIL |
e1970ce4 JH |
21 | unset GIT_ALTERNATE_OBJECT_DIRECTORIES |
22 | unset GIT_AUTHOR_DATE | |
29e55cd5 JH |
23 | GIT_AUTHOR_EMAIL=author@example.com |
24 | GIT_AUTHOR_NAME='A U Thor' | |
6677c466 | 25 | unset GIT_COMMITTER_DATE |
29e55cd5 JH |
26 | GIT_COMMITTER_EMAIL=committer@example.com |
27 | GIT_COMMITTER_NAME='C O Mitter' | |
e1970ce4 JH |
28 | unset GIT_DIFF_OPTS |
29 | unset GIT_DIR | |
892c41b9 | 30 | unset GIT_WORK_TREE |
e1970ce4 JH |
31 | unset GIT_EXTERNAL_DIFF |
32 | unset GIT_INDEX_FILE | |
33 | unset GIT_OBJECT_DIRECTORY | |
34 | unset SHA1_FILE_DIRECTORIES | |
35 | unset SHA1_FILE_DIRECTORY | |
8d0fc48f SP |
36 | GIT_MERGE_VERBOSITY=5 |
37 | export GIT_MERGE_VERBOSITY | |
29e55cd5 JH |
38 | export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME |
39 | export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME | |
8ff99e74 | 40 | export EDITOR VISUAL |
e1970ce4 | 41 | |
886a3907 JH |
42 | # Protect ourselves from common misconfiguration to export |
43 | # CDPATH into the environment | |
44 | unset CDPATH | |
45 | ||
3d5c0cc9 | 46 | case $(echo $GIT_TRACE |tr "[A-Z]" "[a-z]") in |
6ce4e61f CC |
47 | 1|2|true) |
48 | echo "* warning: Some tests will not work if GIT_TRACE" \ | |
49 | "is set as to trace on STDERR ! *" | |
50 | echo "* warning: Please set GIT_TRACE to something" \ | |
51 | "other than 1, 2 or true ! *" | |
52 | ;; | |
53 | esac | |
54 | ||
e1970ce4 JH |
55 | # Each test should start with something like this, after copyright notices: |
56 | # | |
57 | # test_description='Description of this test... | |
58 | # This test checks if command xyzzy does the right thing... | |
59 | # ' | |
60 | # . ./test-lib.sh | |
61 | ||
55db1df0 | 62 | [ "x$TERM" != "xdumb" ] && |
f31dfa60 | 63 | [ -t 1 ] && |
55db1df0 PH |
64 | tput bold >/dev/null 2>&1 && |
65 | tput setaf 1 >/dev/null 2>&1 && | |
66 | tput sgr0 >/dev/null 2>&1 && | |
67 | color=t | |
e1970ce4 | 68 | |
e1970ce4 JH |
69 | while test "$#" -ne 0 |
70 | do | |
71 | case "$1" in | |
72 | -d|--d|--de|--deb|--debu|--debug) | |
73 | debug=t; shift ;; | |
886856ab JH |
74 | -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) |
75 | immediate=t; shift ;; | |
e1970ce4 | 76 | -h|--h|--he|--hel|--help) |
570f3226 | 77 | help=t; shift ;; |
e1970ce4 JH |
78 | -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) |
79 | verbose=t; shift ;; | |
1ece1274 PH |
80 | -q|--q|--qu|--qui|--quie|--quiet) |
81 | quiet=t; shift ;; | |
55db1df0 PH |
82 | --no-color) |
83 | color=; shift ;; | |
abb7c7b3 | 84 | --no-python) |
7cdbff14 JH |
85 | # noop now... |
86 | shift ;; | |
e1970ce4 JH |
87 | *) |
88 | break ;; | |
89 | esac | |
90 | done | |
91 | ||
55db1df0 PH |
92 | if test -n "$color"; then |
93 | say_color () { | |
94 | case "$1" in | |
95 | error) tput bold; tput setaf 1;; # bold red | |
96 | skip) tput bold; tput setaf 2;; # bold green | |
97 | pass) tput setaf 2;; # green | |
98 | info) tput setaf 3;; # brown | |
1ece1274 | 99 | *) test -n "$quiet" && return;; |
55db1df0 PH |
100 | esac |
101 | shift | |
102 | echo "* $*" | |
103 | tput sgr0 | |
104 | } | |
105 | else | |
106 | say_color() { | |
1ece1274 | 107 | test -z "$1" && test -n "$quiet" && return |
55db1df0 PH |
108 | shift |
109 | echo "* $*" | |
110 | } | |
111 | fi | |
112 | ||
113 | error () { | |
114 | say_color error "error: $*" | |
115 | trap - exit | |
116 | exit 1 | |
117 | } | |
118 | ||
119 | say () { | |
120 | say_color info "$*" | |
121 | } | |
122 | ||
570f3226 MB |
123 | test "${test_description}" != "" || |
124 | error "Test script did not set test_description." | |
125 | ||
126 | if test "$help" = "t" | |
127 | then | |
128 | echo "$test_description" | |
129 | exit 0 | |
130 | fi | |
131 | ||
4d9d62fa | 132 | exec 5>&1 |
e1970ce4 JH |
133 | if test "$verbose" = "t" |
134 | then | |
135 | exec 4>&2 3>&1 | |
136 | else | |
137 | exec 4>/dev/null 3>/dev/null | |
138 | fi | |
139 | ||
140 | test_failure=0 | |
141 | test_count=0 | |
142 | ||
41184273 PR |
143 | trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit |
144 | ||
04509738 JH |
145 | test_tick () { |
146 | if test -z "${test_tick+set}" | |
147 | then | |
21afc41c | 148 | test_tick=1112911993 |
04509738 JH |
149 | else |
150 | test_tick=$(($test_tick + 60)) | |
151 | fi | |
21afc41c JH |
152 | GIT_COMMITTER_DATE="$test_tick -0700" |
153 | GIT_AUTHOR_DATE="$test_tick -0700" | |
04509738 JH |
154 | export GIT_COMMITTER_DATE GIT_AUTHOR_DATE |
155 | } | |
e1970ce4 | 156 | |
886856ab JH |
157 | # You are not expected to call test_ok_ and test_failure_ directly, use |
158 | # the text_expect_* functions instead. | |
159 | ||
160 | test_ok_ () { | |
e1970ce4 | 161 | test_count=$(expr "$test_count" + 1) |
55db1df0 | 162 | say_color "" " ok $test_count: $@" |
e1970ce4 JH |
163 | } |
164 | ||
886856ab | 165 | test_failure_ () { |
e1970ce4 JH |
166 | test_count=$(expr "$test_count" + 1) |
167 | test_failure=$(expr "$test_failure" + 1); | |
55db1df0 | 168 | say_color error "FAIL $test_count: $1" |
bf0dd8a8 JH |
169 | shift |
170 | echo "$@" | sed -e 's/^/ /' | |
41184273 | 171 | test "$immediate" = "" || { trap - exit; exit 1; } |
886856ab JH |
172 | } |
173 | ||
174 | ||
175 | test_debug () { | |
8e832ebc | 176 | test "$debug" = "" || eval "$1" |
e1970ce4 JH |
177 | } |
178 | ||
4d9d62fa | 179 | test_run_ () { |
4d9d62fa PR |
180 | eval >&3 2>&4 "$1" |
181 | eval_ret="$?" | |
4d9d62fa PR |
182 | return 0 |
183 | } | |
184 | ||
04ece593 JH |
185 | test_skip () { |
186 | this_test=$(expr "./$0" : '.*/\(t[0-9]*\)-[^/]*$') | |
187 | this_test="$this_test.$(expr "$test_count" + 1)" | |
188 | to_skip= | |
189 | for skp in $GIT_SKIP_TESTS | |
190 | do | |
191 | case "$this_test" in | |
192 | $skp) | |
193 | to_skip=t | |
194 | esac | |
195 | done | |
196 | case "$to_skip" in | |
197 | t) | |
55db1df0 | 198 | say_color skip >&3 "skipping test: $@" |
04ece593 | 199 | test_count=$(expr "$test_count" + 1) |
55db1df0 | 200 | say_color skip "skip $test_count: $1" |
04ece593 JH |
201 | : true |
202 | ;; | |
203 | *) | |
204 | false | |
205 | ;; | |
206 | esac | |
207 | } | |
208 | ||
e1970ce4 | 209 | test_expect_failure () { |
8e832ebc | 210 | test "$#" = 2 || |
e1970ce4 | 211 | error "bug in the test script: not 2 parameters to test-expect-failure" |
04ece593 | 212 | if ! test_skip "$@" |
e1970ce4 | 213 | then |
04ece593 JH |
214 | say >&3 "expecting failure: $2" |
215 | test_run_ "$2" | |
216 | if [ "$?" = 0 -a "$eval_ret" != 0 -a "$eval_ret" -lt 129 ] | |
217 | then | |
218 | test_ok_ "$1" | |
219 | else | |
220 | test_failure_ "$@" | |
221 | fi | |
e1970ce4 | 222 | fi |
7a0cf2d0 | 223 | echo >&3 "" |
e1970ce4 JH |
224 | } |
225 | ||
226 | test_expect_success () { | |
8e832ebc | 227 | test "$#" = 2 || |
e1970ce4 | 228 | error "bug in the test script: not 2 parameters to test-expect-success" |
04ece593 | 229 | if ! test_skip "$@" |
e1970ce4 | 230 | then |
04ece593 JH |
231 | say >&3 "expecting success: $2" |
232 | test_run_ "$2" | |
233 | if [ "$?" = 0 -a "$eval_ret" = 0 ] | |
234 | then | |
235 | test_ok_ "$1" | |
236 | else | |
237 | test_failure_ "$@" | |
238 | fi | |
e1970ce4 | 239 | fi |
7a0cf2d0 | 240 | echo >&3 "" |
e1970ce4 JH |
241 | } |
242 | ||
d3bfdb75 FK |
243 | test_expect_code () { |
244 | test "$#" = 3 || | |
245 | error "bug in the test script: not 3 parameters to test-expect-code" | |
04ece593 | 246 | if ! test_skip "$@" |
d3bfdb75 | 247 | then |
04ece593 JH |
248 | say >&3 "expecting exit code $1: $3" |
249 | test_run_ "$3" | |
250 | if [ "$?" = 0 -a "$eval_ret" = "$1" ] | |
251 | then | |
252 | test_ok_ "$2" | |
253 | else | |
254 | test_failure_ "$@" | |
255 | fi | |
d3bfdb75 | 256 | fi |
7a0cf2d0 | 257 | echo >&3 "" |
d3bfdb75 FK |
258 | } |
259 | ||
eedf8f97 CW |
260 | # Most tests can use the created repository, but some amy need to create more. |
261 | # Usage: test_create_repo <directory> | |
262 | test_create_repo () { | |
263 | test "$#" = 1 || | |
264 | error "bug in the test script: not 1 parameter to test-create-repo" | |
265 | owd=`pwd` | |
266 | repo="$1" | |
267 | mkdir "$repo" | |
268 | cd "$repo" || error "Cannot setup test environment" | |
5c94f87e NP |
269 | "$GIT_EXEC_PATH/git" init --template=$GIT_EXEC_PATH/templates/blt/ >/dev/null 2>&1 || |
270 | error "cannot run git init -- have you built things yet?" | |
eedf8f97 CW |
271 | mv .git/hooks .git/hooks-disabled |
272 | cd "$owd" | |
273 | } | |
a6080a0a | 274 | |
e1970ce4 | 275 | test_done () { |
41184273 | 276 | trap - exit |
e1970ce4 | 277 | case "$test_failure" in |
10b94e28 | 278 | 0) |
e1970ce4 JH |
279 | # We could: |
280 | # cd .. && rm -fr trash | |
281 | # but that means we forbid any tests that use their own | |
282 | # subdirectory from calling test_done without coming back | |
283 | # to where they started from. | |
284 | # The Makefile provided will clean this test area so | |
285 | # we will leave things as they are. | |
286 | ||
55db1df0 | 287 | say_color pass "passed all $test_count test(s)" |
e1970ce4 JH |
288 | exit 0 ;; |
289 | ||
290 | *) | |
55db1df0 | 291 | say_color error "failed $test_failure among $test_count test(s)" |
e1970ce4 JH |
292 | exit 1 ;; |
293 | ||
294 | esac | |
295 | } | |
296 | ||
297 | # Test the binaries we have just built. The tests are kept in | |
298 | # t/ subdirectory and are run in trash subdirectory. | |
299 | PATH=$(pwd)/..:$PATH | |
a0fa2a10 | 300 | GIT_EXEC_PATH=$(pwd)/.. |
8683a45d | 301 | GIT_TEMPLATE_DIR=$(pwd)/../templates/blt |
8565d2d8 JS |
302 | GIT_CONFIG=.git/config |
303 | export PATH GIT_EXEC_PATH GIT_TEMPLATE_DIR GIT_CONFIG | |
49ccb087 | 304 | |
6fcca938 PB |
305 | GITPERLLIB=$(pwd)/../perl/blib/lib:$(pwd)/../perl/blib/arch/auto/Git |
306 | export GITPERLLIB | |
eea42069 JH |
307 | test -d ../templates/blt || { |
308 | error "You haven't built things yet, have you?" | |
309 | } | |
e1970ce4 | 310 | |
56cf9806 EW |
311 | if ! test -x ../test-chmtime; then |
312 | echo >&2 'You need to build test-chmtime:' | |
313 | echo >&2 'Run "make test-chmtime" in the source (toplevel) directory' | |
314 | exit 1 | |
315 | fi | |
316 | ||
e1970ce4 JH |
317 | # Test repository |
318 | test=trash | |
319 | rm -fr "$test" | |
eedf8f97 CW |
320 | test_create_repo $test |
321 | cd "$test" | |
04ece593 JH |
322 | |
323 | this_test=$(expr "./$0" : '.*/\(t[0-9]*\)-[^/]*$') | |
324 | for skp in $GIT_SKIP_TESTS | |
325 | do | |
326 | to_skip= | |
327 | for skp in $GIT_SKIP_TESTS | |
328 | do | |
329 | case "$this_test" in | |
330 | $skp) | |
331 | to_skip=t | |
332 | esac | |
333 | done | |
334 | case "$to_skip" in | |
335 | t) | |
55db1df0 PH |
336 | say_color skip >&3 "skipping test $this_test altogether" |
337 | say_color skip "skip all tests in $this_test" | |
04ece593 JH |
338 | test_done |
339 | esac | |
340 | done |