]>
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=: | |
e1970ce4 JH |
14 | unset AUTHOR_DATE |
15 | unset AUTHOR_EMAIL | |
16 | unset AUTHOR_NAME | |
17 | unset COMMIT_AUTHOR_EMAIL | |
18 | unset COMMIT_AUTHOR_NAME | |
19 | unset GIT_ALTERNATE_OBJECT_DIRECTORIES | |
20 | unset GIT_AUTHOR_DATE | |
29e55cd5 JH |
21 | GIT_AUTHOR_EMAIL=author@example.com |
22 | GIT_AUTHOR_NAME='A U Thor' | |
6677c466 | 23 | unset GIT_COMMITTER_DATE |
29e55cd5 JH |
24 | GIT_COMMITTER_EMAIL=committer@example.com |
25 | GIT_COMMITTER_NAME='C O Mitter' | |
e1970ce4 JH |
26 | unset GIT_DIFF_OPTS |
27 | unset GIT_DIR | |
28 | unset GIT_EXTERNAL_DIFF | |
29 | unset GIT_INDEX_FILE | |
30 | unset GIT_OBJECT_DIRECTORY | |
31 | unset SHA1_FILE_DIRECTORIES | |
32 | unset SHA1_FILE_DIRECTORY | |
29e55cd5 JH |
33 | export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME |
34 | export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME | |
8ff99e74 | 35 | export EDITOR VISUAL |
e1970ce4 | 36 | |
3d5c0cc9 | 37 | case $(echo $GIT_TRACE |tr "[A-Z]" "[a-z]") in |
6ce4e61f CC |
38 | 1|2|true) |
39 | echo "* warning: Some tests will not work if GIT_TRACE" \ | |
40 | "is set as to trace on STDERR ! *" | |
41 | echo "* warning: Please set GIT_TRACE to something" \ | |
42 | "other than 1, 2 or true ! *" | |
43 | ;; | |
44 | esac | |
45 | ||
e1970ce4 JH |
46 | # Each test should start with something like this, after copyright notices: |
47 | # | |
48 | # test_description='Description of this test... | |
49 | # This test checks if command xyzzy does the right thing... | |
50 | # ' | |
51 | # . ./test-lib.sh | |
52 | ||
53 | error () { | |
54 | echo "* error: $*" | |
41184273 | 55 | trap - exit |
e1970ce4 JH |
56 | exit 1 |
57 | } | |
58 | ||
59 | say () { | |
60 | echo "* $*" | |
61 | } | |
62 | ||
63 | test "${test_description}" != "" || | |
64 | error "Test script did not set test_description." | |
65 | ||
66 | while test "$#" -ne 0 | |
67 | do | |
68 | case "$1" in | |
69 | -d|--d|--de|--deb|--debu|--debug) | |
70 | debug=t; shift ;; | |
886856ab JH |
71 | -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) |
72 | immediate=t; shift ;; | |
e1970ce4 JH |
73 | -h|--h|--he|--hel|--help) |
74 | echo "$test_description" | |
75 | exit 0 ;; | |
76 | -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) | |
77 | verbose=t; shift ;; | |
abb7c7b3 | 78 | --no-python) |
7cdbff14 JH |
79 | # noop now... |
80 | shift ;; | |
e1970ce4 JH |
81 | *) |
82 | break ;; | |
83 | esac | |
84 | done | |
85 | ||
4d9d62fa | 86 | exec 5>&1 |
e1970ce4 JH |
87 | if test "$verbose" = "t" |
88 | then | |
89 | exec 4>&2 3>&1 | |
90 | else | |
91 | exec 4>/dev/null 3>/dev/null | |
92 | fi | |
93 | ||
94 | test_failure=0 | |
95 | test_count=0 | |
96 | ||
41184273 PR |
97 | trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit |
98 | ||
e1970ce4 | 99 | |
886856ab JH |
100 | # You are not expected to call test_ok_ and test_failure_ directly, use |
101 | # the text_expect_* functions instead. | |
102 | ||
103 | test_ok_ () { | |
e1970ce4 | 104 | test_count=$(expr "$test_count" + 1) |
94e8afa2 | 105 | say " ok $test_count: $@" |
e1970ce4 JH |
106 | } |
107 | ||
886856ab | 108 | test_failure_ () { |
e1970ce4 JH |
109 | test_count=$(expr "$test_count" + 1) |
110 | test_failure=$(expr "$test_failure" + 1); | |
bf0dd8a8 JH |
111 | say "FAIL $test_count: $1" |
112 | shift | |
113 | echo "$@" | sed -e 's/^/ /' | |
41184273 | 114 | test "$immediate" = "" || { trap - exit; exit 1; } |
886856ab JH |
115 | } |
116 | ||
117 | ||
118 | test_debug () { | |
8e832ebc | 119 | test "$debug" = "" || eval "$1" |
e1970ce4 JH |
120 | } |
121 | ||
4d9d62fa | 122 | test_run_ () { |
4d9d62fa PR |
123 | eval >&3 2>&4 "$1" |
124 | eval_ret="$?" | |
4d9d62fa PR |
125 | return 0 |
126 | } | |
127 | ||
e1970ce4 | 128 | test_expect_failure () { |
8e832ebc | 129 | test "$#" = 2 || |
e1970ce4 JH |
130 | error "bug in the test script: not 2 parameters to test-expect-failure" |
131 | say >&3 "expecting failure: $2" | |
4d9d62fa | 132 | test_run_ "$2" |
40cf0433 | 133 | if [ "$?" = 0 -a "$eval_ret" != 0 -a "$eval_ret" -lt 129 ] |
e1970ce4 | 134 | then |
886856ab | 135 | test_ok_ "$1" |
4d9d62fa PR |
136 | else |
137 | test_failure_ "$@" | |
e1970ce4 | 138 | fi |
7a0cf2d0 | 139 | echo >&3 "" |
e1970ce4 JH |
140 | } |
141 | ||
142 | test_expect_success () { | |
8e832ebc | 143 | test "$#" = 2 || |
e1970ce4 JH |
144 | error "bug in the test script: not 2 parameters to test-expect-success" |
145 | say >&3 "expecting success: $2" | |
4d9d62fa PR |
146 | test_run_ "$2" |
147 | if [ "$?" = 0 -a "$eval_ret" = 0 ] | |
e1970ce4 | 148 | then |
886856ab | 149 | test_ok_ "$1" |
e1970ce4 | 150 | else |
886856ab | 151 | test_failure_ "$@" |
e1970ce4 | 152 | fi |
7a0cf2d0 | 153 | echo >&3 "" |
e1970ce4 JH |
154 | } |
155 | ||
d3bfdb75 FK |
156 | test_expect_code () { |
157 | test "$#" = 3 || | |
158 | error "bug in the test script: not 3 parameters to test-expect-code" | |
159 | say >&3 "expecting exit code $1: $3" | |
160 | test_run_ "$3" | |
161 | if [ "$?" = 0 -a "$eval_ret" = "$1" ] | |
162 | then | |
163 | test_ok_ "$2" | |
164 | else | |
165 | test_failure_ "$@" | |
166 | fi | |
7a0cf2d0 | 167 | echo >&3 "" |
d3bfdb75 FK |
168 | } |
169 | ||
eedf8f97 CW |
170 | # Most tests can use the created repository, but some amy need to create more. |
171 | # Usage: test_create_repo <directory> | |
172 | test_create_repo () { | |
173 | test "$#" = 1 || | |
174 | error "bug in the test script: not 1 parameter to test-create-repo" | |
175 | owd=`pwd` | |
176 | repo="$1" | |
177 | mkdir "$repo" | |
178 | cd "$repo" || error "Cannot setup test environment" | |
6f7c86df | 179 | "$GIT_EXEC_PATH/git" init-db --template=$GIT_EXEC_PATH/templates/blt/ >/dev/null 2>&1 || |
eedf8f97 CW |
180 | error "cannot run git init-db -- have you built things yet?" |
181 | mv .git/hooks .git/hooks-disabled | |
182 | cd "$owd" | |
183 | } | |
184 | ||
e1970ce4 | 185 | test_done () { |
41184273 | 186 | trap - exit |
e1970ce4 | 187 | case "$test_failure" in |
10b94e28 | 188 | 0) |
e1970ce4 JH |
189 | # We could: |
190 | # cd .. && rm -fr trash | |
191 | # but that means we forbid any tests that use their own | |
192 | # subdirectory from calling test_done without coming back | |
193 | # to where they started from. | |
194 | # The Makefile provided will clean this test area so | |
195 | # we will leave things as they are. | |
196 | ||
197 | say "passed all $test_count test(s)" | |
198 | exit 0 ;; | |
199 | ||
200 | *) | |
201 | say "failed $test_failure among $test_count test(s)" | |
202 | exit 1 ;; | |
203 | ||
204 | esac | |
205 | } | |
206 | ||
207 | # Test the binaries we have just built. The tests are kept in | |
208 | # t/ subdirectory and are run in trash subdirectory. | |
209 | PATH=$(pwd)/..:$PATH | |
a0fa2a10 | 210 | GIT_EXEC_PATH=$(pwd)/.. |
8683a45d | 211 | GIT_TEMPLATE_DIR=$(pwd)/../templates/blt |
2eb10ac7 | 212 | HOME=$(pwd)/trash |
8683a45d | 213 | export PATH GIT_EXEC_PATH GIT_TEMPLATE_DIR HOME |
49ccb087 | 214 | |
6fcca938 PB |
215 | GITPERLLIB=$(pwd)/../perl/blib/lib:$(pwd)/../perl/blib/arch/auto/Git |
216 | export GITPERLLIB | |
eea42069 JH |
217 | test -d ../templates/blt || { |
218 | error "You haven't built things yet, have you?" | |
219 | } | |
e1970ce4 JH |
220 | |
221 | # Test repository | |
222 | test=trash | |
223 | rm -fr "$test" | |
eedf8f97 CW |
224 | test_create_repo $test |
225 | cd "$test" |