]>
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 |
e1970ce4 JH |
12 | unset AUTHOR_DATE |
13 | unset AUTHOR_EMAIL | |
14 | unset AUTHOR_NAME | |
15 | unset COMMIT_AUTHOR_EMAIL | |
16 | unset COMMIT_AUTHOR_NAME | |
17 | unset GIT_ALTERNATE_OBJECT_DIRECTORIES | |
18 | unset GIT_AUTHOR_DATE | |
19 | unset GIT_AUTHOR_EMAIL | |
20 | unset GIT_AUTHOR_NAME | |
21 | unset GIT_COMMITTER_EMAIL | |
22 | unset GIT_COMMITTER_NAME | |
23 | unset GIT_DIFF_OPTS | |
24 | unset GIT_DIR | |
25 | unset GIT_EXTERNAL_DIFF | |
26 | unset GIT_INDEX_FILE | |
27 | unset GIT_OBJECT_DIRECTORY | |
28 | unset SHA1_FILE_DIRECTORIES | |
29 | unset SHA1_FILE_DIRECTORY | |
30 | ||
31 | # Each test should start with something like this, after copyright notices: | |
32 | # | |
33 | # test_description='Description of this test... | |
34 | # This test checks if command xyzzy does the right thing... | |
35 | # ' | |
36 | # . ./test-lib.sh | |
37 | ||
38 | error () { | |
39 | echo "* error: $*" | |
41184273 | 40 | trap - exit |
e1970ce4 JH |
41 | exit 1 |
42 | } | |
43 | ||
44 | say () { | |
45 | echo "* $*" | |
46 | } | |
47 | ||
48 | test "${test_description}" != "" || | |
49 | error "Test script did not set test_description." | |
50 | ||
51 | while test "$#" -ne 0 | |
52 | do | |
53 | case "$1" in | |
54 | -d|--d|--de|--deb|--debu|--debug) | |
55 | debug=t; shift ;; | |
886856ab JH |
56 | -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) |
57 | immediate=t; shift ;; | |
e1970ce4 JH |
58 | -h|--h|--he|--hel|--help) |
59 | echo "$test_description" | |
60 | exit 0 ;; | |
61 | -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) | |
62 | verbose=t; shift ;; | |
63 | *) | |
64 | break ;; | |
65 | esac | |
66 | done | |
67 | ||
4d9d62fa | 68 | exec 5>&1 |
e1970ce4 JH |
69 | if test "$verbose" = "t" |
70 | then | |
71 | exec 4>&2 3>&1 | |
72 | else | |
73 | exec 4>/dev/null 3>/dev/null | |
74 | fi | |
75 | ||
76 | test_failure=0 | |
77 | test_count=0 | |
78 | ||
41184273 PR |
79 | trap 'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1' exit |
80 | ||
e1970ce4 | 81 | |
886856ab JH |
82 | # You are not expected to call test_ok_ and test_failure_ directly, use |
83 | # the text_expect_* functions instead. | |
84 | ||
85 | test_ok_ () { | |
e1970ce4 | 86 | test_count=$(expr "$test_count" + 1) |
94e8afa2 | 87 | say " ok $test_count: $@" |
e1970ce4 JH |
88 | } |
89 | ||
886856ab | 90 | test_failure_ () { |
e1970ce4 JH |
91 | test_count=$(expr "$test_count" + 1) |
92 | test_failure=$(expr "$test_failure" + 1); | |
bf0dd8a8 JH |
93 | say "FAIL $test_count: $1" |
94 | shift | |
95 | echo "$@" | sed -e 's/^/ /' | |
41184273 | 96 | test "$immediate" = "" || { trap - exit; exit 1; } |
886856ab JH |
97 | } |
98 | ||
99 | ||
100 | test_debug () { | |
8e832ebc | 101 | test "$debug" = "" || eval "$1" |
e1970ce4 JH |
102 | } |
103 | ||
4d9d62fa | 104 | test_run_ () { |
4d9d62fa PR |
105 | eval >&3 2>&4 "$1" |
106 | eval_ret="$?" | |
4d9d62fa PR |
107 | return 0 |
108 | } | |
109 | ||
e1970ce4 | 110 | test_expect_failure () { |
8e832ebc | 111 | test "$#" = 2 || |
e1970ce4 JH |
112 | error "bug in the test script: not 2 parameters to test-expect-failure" |
113 | say >&3 "expecting failure: $2" | |
4d9d62fa PR |
114 | test_run_ "$2" |
115 | if [ "$?" = 0 -a "$eval_ret" != 0 ] | |
e1970ce4 | 116 | then |
886856ab | 117 | test_ok_ "$1" |
4d9d62fa PR |
118 | else |
119 | test_failure_ "$@" | |
e1970ce4 JH |
120 | fi |
121 | } | |
122 | ||
123 | test_expect_success () { | |
8e832ebc | 124 | test "$#" = 2 || |
e1970ce4 JH |
125 | error "bug in the test script: not 2 parameters to test-expect-success" |
126 | say >&3 "expecting success: $2" | |
4d9d62fa PR |
127 | test_run_ "$2" |
128 | if [ "$?" = 0 -a "$eval_ret" = 0 ] | |
e1970ce4 | 129 | then |
886856ab | 130 | test_ok_ "$1" |
e1970ce4 | 131 | else |
886856ab | 132 | test_failure_ "$@" |
e1970ce4 JH |
133 | fi |
134 | } | |
135 | ||
136 | test_done () { | |
41184273 | 137 | trap - exit |
e1970ce4 JH |
138 | case "$test_failure" in |
139 | 0) | |
140 | # We could: | |
141 | # cd .. && rm -fr trash | |
142 | # but that means we forbid any tests that use their own | |
143 | # subdirectory from calling test_done without coming back | |
144 | # to where they started from. | |
145 | # The Makefile provided will clean this test area so | |
146 | # we will leave things as they are. | |
147 | ||
148 | say "passed all $test_count test(s)" | |
149 | exit 0 ;; | |
150 | ||
151 | *) | |
152 | say "failed $test_failure among $test_count test(s)" | |
153 | exit 1 ;; | |
154 | ||
155 | esac | |
156 | } | |
157 | ||
158 | # Test the binaries we have just built. The tests are kept in | |
159 | # t/ subdirectory and are run in trash subdirectory. | |
160 | PATH=$(pwd)/..:$PATH | |
161 | ||
162 | # Test repository | |
163 | test=trash | |
164 | rm -fr "$test" | |
165 | mkdir "$test" | |
166 | cd "$test" | |
c09a69a8 JH |
167 | git-init-db --template=../../templates/blt/ 2>/dev/null || |
168 | error "cannot run git-init-db" | |
169 | ||
170 | mv .git/hooks .git/hooks-disabled | |
171 |