Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Copyright (c) 2005 Junio C Hamano |
| 4 | # |
| 5 | |
Johannes Schindelin | 4413855 | 2009-02-04 00:26:12 +0100 | [diff] [blame] | 6 | # if --tee was passed, write the output not only to the terminal, but |
| 7 | # additionally to the file test-results/$BASENAME.out, too. |
| 8 | case "$GIT_TEST_TEE_STARTED, $* " in |
| 9 | done,*) |
| 10 | # do not redirect again |
| 11 | ;; |
Johannes Schindelin | 3da9365 | 2009-02-04 00:26:26 +0100 | [diff] [blame] | 12 | *' --tee '*|*' --va'*) |
Johannes Schindelin | 4413855 | 2009-02-04 00:26:12 +0100 | [diff] [blame] | 13 | mkdir -p test-results |
| 14 | BASE=test-results/$(basename "$0" .sh) |
| 15 | (GIT_TEST_TEE_STARTED=done ${SHELL-sh} "$0" "$@" 2>&1; |
| 16 | echo $? > $BASE.exit) | tee $BASE.out |
| 17 | test "$(cat $BASE.exit)" = 0 |
| 18 | exit |
| 19 | ;; |
| 20 | esac |
| 21 | |
Junio C Hamano | c2116a1 | 2008-03-06 19:04:26 -0800 | [diff] [blame] | 22 | # Keep the original TERM for say_color |
| 23 | ORIGINAL_TERM=$TERM |
| 24 | |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 25 | # For repeatability, reset the environment to known value. |
| 26 | LANG=C |
Junio C Hamano | 899460f | 2005-10-09 21:58:02 -0700 | [diff] [blame] | 27 | LC_ALL=C |
Pavel Roskin | d9bdd39 | 2005-08-10 22:10:01 -0400 | [diff] [blame] | 28 | PAGER=cat |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 29 | TZ=UTC |
Junio C Hamano | c2116a1 | 2008-03-06 19:04:26 -0800 | [diff] [blame] | 30 | TERM=dumb |
| 31 | export LANG LC_ALL PAGER TERM TZ |
Eric Wong | 8ff99e7 | 2006-07-11 12:01:54 -0700 | [diff] [blame] | 32 | EDITOR=: |
| 33 | VISUAL=: |
Junio C Hamano | 18508c3 | 2007-07-30 22:16:40 -0700 | [diff] [blame] | 34 | unset GIT_EDITOR |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 35 | unset AUTHOR_DATE |
| 36 | unset AUTHOR_EMAIL |
| 37 | unset AUTHOR_NAME |
| 38 | unset COMMIT_AUTHOR_EMAIL |
| 39 | unset COMMIT_AUTHOR_NAME |
Josh Triplett | 28a94f8 | 2007-04-28 18:40:28 -0700 | [diff] [blame] | 40 | unset EMAIL |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 41 | unset GIT_ALTERNATE_OBJECT_DIRECTORIES |
| 42 | unset GIT_AUTHOR_DATE |
Junio C Hamano | 29e55cd | 2006-02-10 19:11:23 -0800 | [diff] [blame] | 43 | GIT_AUTHOR_EMAIL=author@example.com |
| 44 | GIT_AUTHOR_NAME='A U Thor' |
Junio C Hamano | 6677c46 | 2005-12-15 12:54:00 -0800 | [diff] [blame] | 45 | unset GIT_COMMITTER_DATE |
Junio C Hamano | 29e55cd | 2006-02-10 19:11:23 -0800 | [diff] [blame] | 46 | GIT_COMMITTER_EMAIL=committer@example.com |
| 47 | GIT_COMMITTER_NAME='C O Mitter' |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 48 | unset GIT_DIFF_OPTS |
| 49 | unset GIT_DIR |
Matthias Lederhofer | 892c41b | 2007-06-06 09:10:42 +0200 | [diff] [blame] | 50 | unset GIT_WORK_TREE |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 51 | unset GIT_EXTERNAL_DIFF |
| 52 | unset GIT_INDEX_FILE |
| 53 | unset GIT_OBJECT_DIRECTORY |
David Reiss | 0454dd9 | 2008-05-19 23:49:26 -0700 | [diff] [blame] | 54 | unset GIT_CEILING_DIRECTORIES |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 55 | unset SHA1_FILE_DIRECTORIES |
| 56 | unset SHA1_FILE_DIRECTORY |
Shawn O. Pearce | 8d0fc48 | 2007-02-04 00:45:47 -0500 | [diff] [blame] | 57 | GIT_MERGE_VERBOSITY=5 |
| 58 | export GIT_MERGE_VERBOSITY |
Junio C Hamano | 29e55cd | 2006-02-10 19:11:23 -0800 | [diff] [blame] | 59 | export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME |
| 60 | export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME |
Eric Wong | 8ff99e7 | 2006-07-11 12:01:54 -0700 | [diff] [blame] | 61 | export EDITOR VISUAL |
Jeff King | 82ebb0b | 2008-03-12 17:36:36 -0400 | [diff] [blame] | 62 | GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u} |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 63 | |
Junio C Hamano | 886a390 | 2007-04-24 11:21:47 -0700 | [diff] [blame] | 64 | # Protect ourselves from common misconfiguration to export |
| 65 | # CDPATH into the environment |
| 66 | unset CDPATH |
| 67 | |
Robin Rosenberg | 3d5c0cc | 2006-09-23 00:35:20 +0200 | [diff] [blame] | 68 | case $(echo $GIT_TRACE |tr "[A-Z]" "[a-z]") in |
Christian Couder | 6ce4e61 | 2006-09-02 18:23:48 +0200 | [diff] [blame] | 69 | 1|2|true) |
| 70 | echo "* warning: Some tests will not work if GIT_TRACE" \ |
| 71 | "is set as to trace on STDERR ! *" |
| 72 | echo "* warning: Please set GIT_TRACE to something" \ |
| 73 | "other than 1, 2 or true ! *" |
| 74 | ;; |
| 75 | esac |
| 76 | |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 77 | # Each test should start with something like this, after copyright notices: |
| 78 | # |
| 79 | # test_description='Description of this test... |
| 80 | # This test checks if command xyzzy does the right thing... |
| 81 | # ' |
| 82 | # . ./test-lib.sh |
Junio C Hamano | c2116a1 | 2008-03-06 19:04:26 -0800 | [diff] [blame] | 83 | [ "x$ORIGINAL_TERM" != "xdumb" ] && ( |
| 84 | TERM=$ORIGINAL_TERM && |
| 85 | export TERM && |
| 86 | [ -t 1 ] && |
| 87 | tput bold >/dev/null 2>&1 && |
| 88 | tput setaf 1 >/dev/null 2>&1 && |
| 89 | tput sgr0 >/dev/null 2>&1 |
| 90 | ) && |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 91 | color=t |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 92 | |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 93 | while test "$#" -ne 0 |
| 94 | do |
| 95 | case "$1" in |
| 96 | -d|--d|--de|--deb|--debu|--debug) |
| 97 | debug=t; shift ;; |
Junio C Hamano | 886856a | 2005-05-14 00:24:27 -0700 | [diff] [blame] | 98 | -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) |
| 99 | immediate=t; shift ;; |
Lea Wiemann | 5e2c08c | 2008-06-17 03:29:02 +0200 | [diff] [blame] | 100 | -l|--l|--lo|--lon|--long|--long-|--long-t|--long-te|--long-tes|--long-test|--long-tests) |
Junio C Hamano | 91e80b9 | 2009-02-18 11:17:27 -0800 | [diff] [blame] | 101 | GIT_TEST_LONG=t; export GIT_TEST_LONG; shift ;; |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 102 | -h|--h|--he|--hel|--help) |
Michele Ballabio | 570f322 | 2007-11-10 15:17:25 +0100 | [diff] [blame] | 103 | help=t; shift ;; |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 104 | -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) |
| 105 | verbose=t; shift ;; |
Pierre Habouzit | 1ece127 | 2007-10-24 22:03:39 +0200 | [diff] [blame] | 106 | -q|--q|--qu|--qui|--quie|--quiet) |
| 107 | quiet=t; shift ;; |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 108 | --no-color) |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 109 | color=; shift ;; |
Johannes Schindelin | abb7c7b | 2006-02-18 13:01:18 +0100 | [diff] [blame] | 110 | --no-python) |
Junio C Hamano | 7cdbff1 | 2006-11-20 00:49:31 -0800 | [diff] [blame] | 111 | # noop now... |
| 112 | shift ;; |
Johannes Schindelin | 4e1be63 | 2009-02-04 00:25:59 +0100 | [diff] [blame] | 113 | --va|--val|--valg|--valgr|--valgri|--valgrin|--valgrind) |
Johannes Schindelin | 3da9365 | 2009-02-04 00:26:26 +0100 | [diff] [blame] | 114 | valgrind=t; verbose=t; shift ;; |
Johannes Schindelin | 4413855 | 2009-02-04 00:26:12 +0100 | [diff] [blame] | 115 | --tee) |
| 116 | shift ;; # was handled already |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 117 | *) |
| 118 | break ;; |
| 119 | esac |
| 120 | done |
| 121 | |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 122 | if test -n "$color"; then |
| 123 | say_color () { |
Junio C Hamano | c2116a1 | 2008-03-06 19:04:26 -0800 | [diff] [blame] | 124 | ( |
| 125 | TERM=$ORIGINAL_TERM |
| 126 | export TERM |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 127 | case "$1" in |
| 128 | error) tput bold; tput setaf 1;; # bold red |
| 129 | skip) tput bold; tput setaf 2;; # bold green |
| 130 | pass) tput setaf 2;; # green |
| 131 | info) tput setaf 3;; # brown |
Pierre Habouzit | 1ece127 | 2007-10-24 22:03:39 +0200 | [diff] [blame] | 132 | *) test -n "$quiet" && return;; |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 133 | esac |
| 134 | shift |
Shawn O. Pearce | 72d404d | 2008-10-12 13:13:59 -0700 | [diff] [blame] | 135 | printf "* %s" "$*" |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 136 | tput sgr0 |
Miklos Vajna | b8eecaf | 2008-10-10 00:07:10 +0200 | [diff] [blame] | 137 | echo |
Junio C Hamano | c2116a1 | 2008-03-06 19:04:26 -0800 | [diff] [blame] | 138 | ) |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 139 | } |
| 140 | else |
| 141 | say_color() { |
Pierre Habouzit | 1ece127 | 2007-10-24 22:03:39 +0200 | [diff] [blame] | 142 | test -z "$1" && test -n "$quiet" && return |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 143 | shift |
| 144 | echo "* $*" |
| 145 | } |
| 146 | fi |
| 147 | |
| 148 | error () { |
| 149 | say_color error "error: $*" |
Markus Heidelberg | 3564131 | 2009-01-20 00:43:26 +0100 | [diff] [blame] | 150 | trap - EXIT |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 151 | exit 1 |
| 152 | } |
| 153 | |
| 154 | say () { |
| 155 | say_color info "$*" |
| 156 | } |
| 157 | |
Michele Ballabio | 570f322 | 2007-11-10 15:17:25 +0100 | [diff] [blame] | 158 | test "${test_description}" != "" || |
| 159 | error "Test script did not set test_description." |
| 160 | |
| 161 | if test "$help" = "t" |
| 162 | then |
| 163 | echo "$test_description" |
| 164 | exit 0 |
| 165 | fi |
| 166 | |
Pavel Roskin | 4d9d62f | 2005-08-10 23:56:21 -0400 | [diff] [blame] | 167 | exec 5>&1 |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 168 | if test "$verbose" = "t" |
| 169 | then |
| 170 | exec 4>&2 3>&1 |
| 171 | else |
| 172 | exec 4>/dev/null 3>/dev/null |
| 173 | fi |
| 174 | |
| 175 | test_failure=0 |
| 176 | test_count=0 |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 177 | test_fixed=0 |
| 178 | test_broken=0 |
Sverre Rabbelier | 2d84e9f | 2008-06-08 16:04:33 +0200 | [diff] [blame] | 179 | test_success=0 |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 180 | |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 181 | die () { |
| 182 | echo >&5 "FATAL: Unexpected exit with code $?" |
| 183 | exit 1 |
| 184 | } |
| 185 | |
Markus Heidelberg | 3564131 | 2009-01-20 00:43:26 +0100 | [diff] [blame] | 186 | trap 'die' EXIT |
Pavel Roskin | 4118427 | 2005-08-11 12:00:40 -0400 | [diff] [blame] | 187 | |
Bryan Donlan | 02b3566 | 2008-05-04 01:37:54 -0400 | [diff] [blame] | 188 | # The semantics of the editor variables are that of invoking |
| 189 | # sh -c "$EDITOR \"$@\"" files ... |
| 190 | # |
| 191 | # If our trash directory contains shell metacharacters, they will be |
| 192 | # interpreted if we just set $EDITOR directly, so do a little dance with |
| 193 | # environment variables to work around this. |
| 194 | # |
| 195 | # In particular, quoting isn't enough, as the path may contain the same quote |
Lea Wiemann | 7b7b451 | 2008-06-13 00:35:59 +0200 | [diff] [blame] | 196 | # that we're using. |
Bryan Donlan | 02b3566 | 2008-05-04 01:37:54 -0400 | [diff] [blame] | 197 | test_set_editor () { |
| 198 | FAKE_EDITOR="$1" |
| 199 | export FAKE_EDITOR |
| 200 | VISUAL='"$FAKE_EDITOR"' |
| 201 | export VISUAL |
| 202 | } |
| 203 | |
Junio C Hamano | 0450973 | 2006-12-29 02:25:04 -0800 | [diff] [blame] | 204 | test_tick () { |
| 205 | if test -z "${test_tick+set}" |
| 206 | then |
Junio C Hamano | 21afc41 | 2007-01-06 02:16:07 -0800 | [diff] [blame] | 207 | test_tick=1112911993 |
Junio C Hamano | 0450973 | 2006-12-29 02:25:04 -0800 | [diff] [blame] | 208 | else |
| 209 | test_tick=$(($test_tick + 60)) |
| 210 | fi |
Junio C Hamano | 21afc41 | 2007-01-06 02:16:07 -0800 | [diff] [blame] | 211 | GIT_COMMITTER_DATE="$test_tick -0700" |
| 212 | GIT_AUTHOR_DATE="$test_tick -0700" |
Junio C Hamano | 0450973 | 2006-12-29 02:25:04 -0800 | [diff] [blame] | 213 | export GIT_COMMITTER_DATE GIT_AUTHOR_DATE |
| 214 | } |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 215 | |
Johannes Schindelin | 0088496 | 2009-01-27 23:34:48 +0100 | [diff] [blame] | 216 | # Call test_commit with the arguments "<message> [<file> [<contents>]]" |
| 217 | # |
| 218 | # This will commit a file with the given contents and the given commit |
| 219 | # message. It will also add a tag with <message> as name. |
| 220 | # |
| 221 | # Both <file> and <contents> default to <message>. |
| 222 | |
| 223 | test_commit () { |
Junio C Hamano | e656fc9 | 2009-02-03 21:46:33 -0800 | [diff] [blame] | 224 | file=${2:-"$1.t"} |
Johannes Schindelin | 0088496 | 2009-01-27 23:34:48 +0100 | [diff] [blame] | 225 | echo "${3-$1}" > "$file" && |
| 226 | git add "$file" && |
| 227 | test_tick && |
| 228 | git commit -m "$1" && |
| 229 | git tag "$1" |
| 230 | } |
| 231 | |
| 232 | # Call test_merge with the arguments "<message> <commit>", where <commit> |
| 233 | # can be a tag pointing to the commit-to-merge. |
| 234 | |
| 235 | test_merge () { |
| 236 | test_tick && |
| 237 | git merge -m "$1" "$2" && |
| 238 | git tag "$1" |
| 239 | } |
| 240 | |
Johannes Sixt | 1f55391 | 2009-02-28 21:12:57 +0100 | [diff] [blame] | 241 | # This function helps systems where core.filemode=false is set. |
| 242 | # Use it instead of plain 'chmod +x' to set or unset the executable bit |
| 243 | # of a file in the working directory and add it to the index. |
| 244 | |
| 245 | test_chmod () { |
| 246 | chmod "$@" && |
| 247 | git update-index --add "--chmod=$@" |
| 248 | } |
| 249 | |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 250 | # Use test_set_prereq to tell that a particular prerequisite is available. |
| 251 | # The prerequisite can later be checked for in two ways: |
| 252 | # |
| 253 | # - Explicitly using test_have_prereq. |
| 254 | # |
| 255 | # - Implicitly by specifying the prerequisite tag in the calls to |
| 256 | # test_expect_{success,failure,code}. |
| 257 | # |
| 258 | # The single parameter is the prerequisite tag (a simple word, in all |
| 259 | # capital letters by convention). |
| 260 | |
| 261 | test_set_prereq () { |
| 262 | satisfied="$satisfied$1 " |
| 263 | } |
| 264 | satisfied=" " |
| 265 | |
| 266 | test_have_prereq () { |
| 267 | case $satisfied in |
| 268 | *" $1 "*) |
| 269 | : yes, have it ;; |
| 270 | *) |
| 271 | ! : nope ;; |
| 272 | esac |
| 273 | } |
| 274 | |
Junio C Hamano | 886856a | 2005-05-14 00:24:27 -0700 | [diff] [blame] | 275 | # You are not expected to call test_ok_ and test_failure_ directly, use |
| 276 | # the text_expect_* functions instead. |
| 277 | |
| 278 | test_ok_ () { |
Johannes Sixt | d5d9de1 | 2009-02-05 20:59:27 +0100 | [diff] [blame] | 279 | test_success=$(($test_success + 1)) |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 280 | say_color "" " ok $test_count: $@" |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 281 | } |
| 282 | |
Junio C Hamano | 886856a | 2005-05-14 00:24:27 -0700 | [diff] [blame] | 283 | test_failure_ () { |
Johannes Sixt | d5d9de1 | 2009-02-05 20:59:27 +0100 | [diff] [blame] | 284 | test_failure=$(($test_failure + 1)) |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 285 | say_color error "FAIL $test_count: $1" |
Junio C Hamano | bf0dd8a | 2005-07-22 19:09:34 -0700 | [diff] [blame] | 286 | shift |
| 287 | echo "$@" | sed -e 's/^/ /' |
Markus Heidelberg | 3564131 | 2009-01-20 00:43:26 +0100 | [diff] [blame] | 288 | test "$immediate" = "" || { trap - EXIT; exit 1; } |
Junio C Hamano | 886856a | 2005-05-14 00:24:27 -0700 | [diff] [blame] | 289 | } |
| 290 | |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 291 | test_known_broken_ok_ () { |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 292 | test_fixed=$(($test_fixed+1)) |
| 293 | say_color "" " FIXED $test_count: $@" |
| 294 | } |
| 295 | |
| 296 | test_known_broken_failure_ () { |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 297 | test_broken=$(($test_broken+1)) |
| 298 | say_color skip " still broken $test_count: $@" |
| 299 | } |
Junio C Hamano | 886856a | 2005-05-14 00:24:27 -0700 | [diff] [blame] | 300 | |
| 301 | test_debug () { |
Junio C Hamano | 8e832eb | 2005-08-10 22:53:27 -0700 | [diff] [blame] | 302 | test "$debug" = "" || eval "$1" |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 303 | } |
| 304 | |
Pavel Roskin | 4d9d62f | 2005-08-10 23:56:21 -0400 | [diff] [blame] | 305 | test_run_ () { |
Pavel Roskin | 4d9d62f | 2005-08-10 23:56:21 -0400 | [diff] [blame] | 306 | eval >&3 2>&4 "$1" |
| 307 | eval_ret="$?" |
Pavel Roskin | 4d9d62f | 2005-08-10 23:56:21 -0400 | [diff] [blame] | 308 | return 0 |
| 309 | } |
| 310 | |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 311 | test_skip () { |
Johannes Sixt | 8586f98 | 2009-02-05 21:20:56 +0100 | [diff] [blame] | 312 | test_count=$(($test_count+1)) |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 313 | to_skip= |
| 314 | for skp in $GIT_SKIP_TESTS |
| 315 | do |
Johannes Sixt | 8586f98 | 2009-02-05 21:20:56 +0100 | [diff] [blame] | 316 | case $this_test.$test_count in |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 317 | $skp) |
| 318 | to_skip=t |
| 319 | esac |
| 320 | done |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 321 | if test -z "$to_skip" && test -n "$prereq" && |
| 322 | ! test_have_prereq "$prereq" |
| 323 | then |
| 324 | to_skip=t |
| 325 | fi |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 326 | case "$to_skip" in |
| 327 | t) |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 328 | say_color skip >&3 "skipping test: $@" |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 329 | say_color skip "skip $test_count: $1" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 330 | : true |
| 331 | ;; |
| 332 | *) |
| 333 | false |
| 334 | ;; |
| 335 | esac |
| 336 | } |
| 337 | |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 338 | test_expect_failure () { |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 339 | test "$#" = 3 && { prereq=$1; shift; } || prereq= |
Junio C Hamano | 8e832eb | 2005-08-10 22:53:27 -0700 | [diff] [blame] | 340 | test "$#" = 2 || |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 341 | error "bug in the test script: not 2 or 3 parameters to test-expect-failure" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 342 | if ! test_skip "$@" |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 343 | then |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 344 | say >&3 "checking known breakage: $2" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 345 | test_run_ "$2" |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 346 | if [ "$?" = 0 -a "$eval_ret" = 0 ] |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 347 | then |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 348 | test_known_broken_ok_ "$1" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 349 | else |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 350 | test_known_broken_failure_ "$1" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 351 | fi |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 352 | fi |
Martin Waitz | 7a0cf2d | 2006-10-07 21:27:46 +0200 | [diff] [blame] | 353 | echo >&3 "" |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 354 | } |
| 355 | |
| 356 | test_expect_success () { |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 357 | test "$#" = 3 && { prereq=$1; shift; } || prereq= |
Junio C Hamano | 8e832eb | 2005-08-10 22:53:27 -0700 | [diff] [blame] | 358 | test "$#" = 2 || |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 359 | error "bug in the test script: not 2 or 3 parameters to test-expect-success" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 360 | if ! test_skip "$@" |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 361 | then |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 362 | say >&3 "expecting success: $2" |
| 363 | test_run_ "$2" |
| 364 | if [ "$?" = 0 -a "$eval_ret" = 0 ] |
| 365 | then |
| 366 | test_ok_ "$1" |
| 367 | else |
| 368 | test_failure_ "$@" |
| 369 | fi |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 370 | fi |
Martin Waitz | 7a0cf2d | 2006-10-07 21:27:46 +0200 | [diff] [blame] | 371 | echo >&3 "" |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 372 | } |
| 373 | |
Fredrik Kuivinen | d3bfdb7 | 2005-12-03 11:40:39 +0100 | [diff] [blame] | 374 | test_expect_code () { |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 375 | test "$#" = 4 && { prereq=$1; shift; } || prereq= |
Fredrik Kuivinen | d3bfdb7 | 2005-12-03 11:40:39 +0100 | [diff] [blame] | 376 | test "$#" = 3 || |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 377 | error "bug in the test script: not 3 or 4 parameters to test-expect-code" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 378 | if ! test_skip "$@" |
Fredrik Kuivinen | d3bfdb7 | 2005-12-03 11:40:39 +0100 | [diff] [blame] | 379 | then |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 380 | say >&3 "expecting exit code $1: $3" |
| 381 | test_run_ "$3" |
| 382 | if [ "$?" = 0 -a "$eval_ret" = "$1" ] |
| 383 | then |
| 384 | test_ok_ "$2" |
| 385 | else |
| 386 | test_failure_ "$@" |
| 387 | fi |
Fredrik Kuivinen | d3bfdb7 | 2005-12-03 11:40:39 +0100 | [diff] [blame] | 388 | fi |
Martin Waitz | 7a0cf2d | 2006-10-07 21:27:46 +0200 | [diff] [blame] | 389 | echo >&3 "" |
Fredrik Kuivinen | d3bfdb7 | 2005-12-03 11:40:39 +0100 | [diff] [blame] | 390 | } |
| 391 | |
Lea Wiemann | fb32c41 | 2008-06-19 20:18:03 +0200 | [diff] [blame] | 392 | # test_external runs external test scripts that provide continuous |
| 393 | # test output about their progress, and succeeds/fails on |
| 394 | # zero/non-zero exit code. It outputs the test output on stdout even |
| 395 | # in non-verbose mode, and announces the external script with "* run |
| 396 | # <n>: ..." before running it. When providing relative paths, keep in |
| 397 | # mind that all scripts run in "trash directory". |
| 398 | # Usage: test_external description command arguments... |
| 399 | # Example: test_external 'Perl API' perl ../path/to/test.pl |
| 400 | test_external () { |
Johannes Sixt | a7bb394 | 2009-03-01 21:04:46 +0100 | [diff] [blame] | 401 | test "$#" = 4 && { prereq=$1; shift; } || prereq= |
| 402 | test "$#" = 3 || |
| 403 | error >&5 "bug in the test script: not 3 or 4 parameters to test_external" |
Lea Wiemann | fb32c41 | 2008-06-19 20:18:03 +0200 | [diff] [blame] | 404 | descr="$1" |
| 405 | shift |
| 406 | if ! test_skip "$descr" "$@" |
| 407 | then |
| 408 | # Announce the script to reduce confusion about the |
| 409 | # test output that follows. |
Johannes Sixt | 8586f98 | 2009-02-05 21:20:56 +0100 | [diff] [blame] | 410 | say_color "" " run $test_count: $descr ($*)" |
Lea Wiemann | fb32c41 | 2008-06-19 20:18:03 +0200 | [diff] [blame] | 411 | # Run command; redirect its stderr to &4 as in |
| 412 | # test_run_, but keep its stdout on our stdout even in |
| 413 | # non-verbose mode. |
| 414 | "$@" 2>&4 |
| 415 | if [ "$?" = 0 ] |
| 416 | then |
| 417 | test_ok_ "$descr" |
| 418 | else |
| 419 | test_failure_ "$descr" "$@" |
| 420 | fi |
| 421 | fi |
| 422 | } |
| 423 | |
| 424 | # Like test_external, but in addition tests that the command generated |
| 425 | # no output on stderr. |
| 426 | test_external_without_stderr () { |
| 427 | # The temporary file has no (and must have no) security |
| 428 | # implications. |
| 429 | tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi |
| 430 | stderr="$tmp/git-external-stderr.$$.tmp" |
| 431 | test_external "$@" 4> "$stderr" |
| 432 | [ -f "$stderr" ] || error "Internal error: $stderr disappeared." |
| 433 | descr="no stderr: $1" |
| 434 | shift |
| 435 | say >&3 "expecting no stderr from previous command" |
| 436 | if [ ! -s "$stderr" ]; then |
| 437 | rm "$stderr" |
| 438 | test_ok_ "$descr" |
| 439 | else |
| 440 | if [ "$verbose" = t ]; then |
| 441 | output=`echo; echo Stderr is:; cat "$stderr"` |
| 442 | else |
| 443 | output= |
| 444 | fi |
| 445 | # rm first in case test_failure exits. |
| 446 | rm "$stderr" |
| 447 | test_failure_ "$descr" "$@" "$output" |
| 448 | fi |
| 449 | } |
| 450 | |
Junio C Hamano | 7435982 | 2008-02-28 13:09:30 -0800 | [diff] [blame] | 451 | # This is not among top-level (test_expect_success | test_expect_failure) |
| 452 | # but is a prefix that can be used in the test script, like: |
| 453 | # |
| 454 | # test_expect_success 'complain and die' ' |
| 455 | # do something && |
| 456 | # do something else && |
| 457 | # test_must_fail git checkout ../outerspace |
| 458 | # ' |
| 459 | # |
| 460 | # Writing this as "! git checkout ../outerspace" is wrong, because |
| 461 | # the failure could be due to a segv. We want a controlled failure. |
| 462 | |
| 463 | test_must_fail () { |
| 464 | "$@" |
Stephan Beyer | 5a26973 | 2008-07-12 17:47:51 +0200 | [diff] [blame] | 465 | test $? -gt 0 -a $? -le 129 -o $? -gt 192 |
Junio C Hamano | 7435982 | 2008-02-28 13:09:30 -0800 | [diff] [blame] | 466 | } |
| 467 | |
Jeff King | 82ebb0b | 2008-03-12 17:36:36 -0400 | [diff] [blame] | 468 | # test_cmp is a helper function to compare actual and expected output. |
| 469 | # You can use it like: |
| 470 | # |
| 471 | # test_expect_success 'foo works' ' |
| 472 | # echo expected >expected && |
| 473 | # foo >actual && |
| 474 | # test_cmp expected actual |
| 475 | # ' |
| 476 | # |
| 477 | # This could be written as either "cmp" or "diff -u", but: |
| 478 | # - cmp's output is not nearly as easy to read as diff -u |
| 479 | # - not all diff versions understand "-u" |
| 480 | |
| 481 | test_cmp() { |
| 482 | $GIT_TEST_CMP "$@" |
| 483 | } |
| 484 | |
Michele Ballabio | 0509eb2 | 2008-01-31 22:59:11 +0100 | [diff] [blame] | 485 | # Most tests can use the created repository, but some may need to create more. |
Carl Worth | eedf8f9 | 2006-02-17 13:33:26 -0800 | [diff] [blame] | 486 | # Usage: test_create_repo <directory> |
| 487 | test_create_repo () { |
| 488 | test "$#" = 1 || |
| 489 | error "bug in the test script: not 1 parameter to test-create-repo" |
| 490 | owd=`pwd` |
| 491 | repo="$1" |
Junio C Hamano | bfdbee9 | 2008-08-08 02:26:28 -0700 | [diff] [blame] | 492 | mkdir -p "$repo" |
Carl Worth | eedf8f9 | 2006-02-17 13:33:26 -0800 | [diff] [blame] | 493 | cd "$repo" || error "Cannot setup test environment" |
Michael J Gruber | 3a04832 | 2009-04-21 11:21:59 +0200 | [diff] [blame^] | 494 | "$GIT_EXEC_PATH/git-init" "--template=$TEST_DIRECTORY/../templates/blt/" >&3 2>&4 || |
Nicolas Pitre | 5c94f87 | 2007-01-12 16:01:46 -0500 | [diff] [blame] | 495 | error "cannot run git init -- have you built things yet?" |
Carl Worth | eedf8f9 | 2006-02-17 13:33:26 -0800 | [diff] [blame] | 496 | mv .git/hooks .git/hooks-disabled |
| 497 | cd "$owd" |
| 498 | } |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 499 | |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 500 | test_done () { |
Markus Heidelberg | 3564131 | 2009-01-20 00:43:26 +0100 | [diff] [blame] | 501 | trap - EXIT |
Sverre Rabbelier | 2d84e9f | 2008-06-08 16:04:33 +0200 | [diff] [blame] | 502 | test_results_dir="$TEST_DIRECTORY/test-results" |
| 503 | mkdir -p "$test_results_dir" |
Johannes Schindelin | bba2a7b | 2009-03-13 17:26:36 +0100 | [diff] [blame] | 504 | test_results_path="$test_results_dir/${0%.sh}-$$" |
Sverre Rabbelier | 2d84e9f | 2008-06-08 16:04:33 +0200 | [diff] [blame] | 505 | |
| 506 | echo "total $test_count" >> $test_results_path |
| 507 | echo "success $test_success" >> $test_results_path |
| 508 | echo "fixed $test_fixed" >> $test_results_path |
| 509 | echo "broken $test_broken" >> $test_results_path |
| 510 | echo "failed $test_failure" >> $test_results_path |
| 511 | echo "" >> $test_results_path |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 512 | |
| 513 | if test "$test_fixed" != 0 |
| 514 | then |
| 515 | say_color pass "fixed $test_fixed known breakage(s)" |
| 516 | fi |
| 517 | if test "$test_broken" != 0 |
| 518 | then |
| 519 | say_color error "still have $test_broken known breakage(s)" |
Junio C Hamano | 11d54b8 | 2008-02-03 00:23:02 -0800 | [diff] [blame] | 520 | msg="remaining $(($test_count-$test_broken)) test(s)" |
| 521 | else |
| 522 | msg="$test_count test(s)" |
Junio C Hamano | 41ac414 | 2008-02-01 01:50:53 -0800 | [diff] [blame] | 523 | fi |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 524 | case "$test_failure" in |
Junio C Hamano | 10b94e2 | 2005-12-09 17:32:18 -0800 | [diff] [blame] | 525 | 0) |
Junio C Hamano | 11d54b8 | 2008-02-03 00:23:02 -0800 | [diff] [blame] | 526 | say_color pass "passed all $msg" |
Johannes Schindelin | abc5d37 | 2008-08-08 13:08:37 +0200 | [diff] [blame] | 527 | |
| 528 | test -d "$remove_trash" && |
| 529 | cd "$(dirname "$remove_trash")" && |
| 530 | rm -rf "$(basename "$remove_trash")" |
| 531 | |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 532 | exit 0 ;; |
| 533 | |
| 534 | *) |
Junio C Hamano | 11d54b8 | 2008-02-03 00:23:02 -0800 | [diff] [blame] | 535 | say_color error "failed $test_failure among $msg" |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 536 | exit 1 ;; |
| 537 | |
| 538 | esac |
| 539 | } |
| 540 | |
| 541 | # Test the binaries we have just built. The tests are kept in |
Jakub Narebski | 9adefee | 2008-06-14 20:14:12 +0200 | [diff] [blame] | 542 | # t/ subdirectory and are run in 'trash directory' subdirectory. |
Sverre Rabbelier | 2d84e9f | 2008-06-08 16:04:33 +0200 | [diff] [blame] | 543 | TEST_DIRECTORY=$(pwd) |
Johannes Schindelin | 4e1be63 | 2009-02-04 00:25:59 +0100 | [diff] [blame] | 544 | if test -z "$valgrind" |
| 545 | then |
Michael J Gruber | 6720721 | 2009-03-16 18:03:12 +0100 | [diff] [blame] | 546 | if test -z "$GIT_TEST_INSTALLED" |
| 547 | then |
| 548 | PATH=$TEST_DIRECTORY/..:$PATH |
| 549 | GIT_EXEC_PATH=$TEST_DIRECTORY/.. |
| 550 | else |
| 551 | GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) || |
| 552 | error "Cannot run git from $GIT_TEST_INSTALLED." |
| 553 | PATH=$GIT_TEST_INSTALLED:$TEST_DIRECTORY/..:$PATH |
| 554 | GIT_EXEC_PATH=${GIT_TEST_EXEC_PATH:-$GIT_EXEC_PATH} |
| 555 | fi |
Johannes Schindelin | 4e1be63 | 2009-02-04 00:25:59 +0100 | [diff] [blame] | 556 | else |
| 557 | make_symlink () { |
| 558 | test -h "$2" && |
| 559 | test "$1" = "$(readlink "$2")" || { |
| 560 | # be super paranoid |
| 561 | if mkdir "$2".lock |
| 562 | then |
| 563 | rm -f "$2" && |
| 564 | ln -s "$1" "$2" && |
| 565 | rm -r "$2".lock |
| 566 | else |
| 567 | while test -d "$2".lock |
| 568 | do |
| 569 | say "Waiting for lock on $2." |
| 570 | sleep 1 |
| 571 | done |
| 572 | fi |
| 573 | } |
| 574 | } |
| 575 | |
| 576 | make_valgrind_symlink () { |
| 577 | # handle only executables |
| 578 | test -x "$1" || return |
| 579 | |
| 580 | base=$(basename "$1") |
| 581 | symlink_target=$TEST_DIRECTORY/../$base |
| 582 | # do not override scripts |
| 583 | if test -x "$symlink_target" && |
| 584 | test ! -d "$symlink_target" && |
| 585 | test "#!" != "$(head -c 2 < "$symlink_target")" |
| 586 | then |
| 587 | symlink_target=../valgrind.sh |
| 588 | fi |
Johannes Schindelin | efd92ff | 2009-02-04 00:26:08 +0100 | [diff] [blame] | 589 | case "$base" in |
| 590 | *.sh|*.perl) |
| 591 | symlink_target=../unprocessed-script |
| 592 | esac |
Johannes Schindelin | 4e1be63 | 2009-02-04 00:25:59 +0100 | [diff] [blame] | 593 | # create the link, or replace it if it is out of date |
| 594 | make_symlink "$symlink_target" "$GIT_VALGRIND/bin/$base" || exit |
| 595 | } |
| 596 | |
| 597 | # override all git executables in TEST_DIRECTORY/.. |
| 598 | GIT_VALGRIND=$TEST_DIRECTORY/valgrind |
| 599 | mkdir -p "$GIT_VALGRIND"/bin |
| 600 | for file in $TEST_DIRECTORY/../git* $TEST_DIRECTORY/../test-* |
| 601 | do |
| 602 | make_valgrind_symlink $file |
| 603 | done |
Johannes Schindelin | efd92ff | 2009-02-04 00:26:08 +0100 | [diff] [blame] | 604 | OLDIFS=$IFS |
| 605 | IFS=: |
| 606 | for path in $PATH |
| 607 | do |
| 608 | ls "$path"/git-* 2> /dev/null | |
| 609 | while read file |
| 610 | do |
| 611 | make_valgrind_symlink "$file" |
| 612 | done |
| 613 | done |
| 614 | IFS=$OLDIFS |
Johannes Schindelin | 4e1be63 | 2009-02-04 00:25:59 +0100 | [diff] [blame] | 615 | PATH=$GIT_VALGRIND/bin:$PATH |
| 616 | GIT_EXEC_PATH=$GIT_VALGRIND/bin |
| 617 | export GIT_VALGRIND |
Johannes Schindelin | 4e1be63 | 2009-02-04 00:25:59 +0100 | [diff] [blame] | 618 | fi |
Johannes Schindelin | 8683a45 | 2006-12-19 09:18:09 +0100 | [diff] [blame] | 619 | GIT_TEMPLATE_DIR=$(pwd)/../templates/blt |
Jeff King | 8bfa6bd | 2008-02-06 05:11:53 -0500 | [diff] [blame] | 620 | unset GIT_CONFIG |
Jeff King | 8bfa6bd | 2008-02-06 05:11:53 -0500 | [diff] [blame] | 621 | GIT_CONFIG_NOSYSTEM=1 |
| 622 | GIT_CONFIG_NOGLOBAL=1 |
| 623 | export PATH GIT_EXEC_PATH GIT_TEMPLATE_DIR GIT_CONFIG_NOSYSTEM GIT_CONFIG_NOGLOBAL |
Junio C Hamano | 49ccb08 | 2005-12-07 21:52:28 -0800 | [diff] [blame] | 624 | |
Petr Baudis | 6fcca93 | 2006-07-03 23:16:32 +0200 | [diff] [blame] | 625 | GITPERLLIB=$(pwd)/../perl/blib/lib:$(pwd)/../perl/blib/arch/auto/Git |
| 626 | export GITPERLLIB |
Junio C Hamano | eea4206 | 2005-12-10 20:55:32 -0800 | [diff] [blame] | 627 | test -d ../templates/blt || { |
| 628 | error "You haven't built things yet, have you?" |
| 629 | } |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 630 | |
Eric Wong | 56cf980 | 2007-02-24 16:59:52 -0800 | [diff] [blame] | 631 | if ! test -x ../test-chmtime; then |
| 632 | echo >&2 'You need to build test-chmtime:' |
| 633 | echo >&2 'Run "make test-chmtime" in the source (toplevel) directory' |
| 634 | exit 1 |
| 635 | fi |
| 636 | |
Jeff King | 7cf7f54 | 2008-02-24 14:40:45 -0500 | [diff] [blame] | 637 | . ../GIT-BUILD-OPTIONS |
| 638 | |
Junio C Hamano | e1970ce | 2005-05-13 22:50:32 -0700 | [diff] [blame] | 639 | # Test repository |
Johannes Schindelin | abc5d37 | 2008-08-08 13:08:37 +0200 | [diff] [blame] | 640 | test="trash directory.$(basename "$0" .sh)" |
Johannes Schindelin | 5a4a088 | 2008-08-21 09:49:12 +0200 | [diff] [blame] | 641 | test ! -z "$debug" || remove_trash="$TEST_DIRECTORY/$test" |
Junio C Hamano | 8d14ac9 | 2008-03-18 21:58:01 -0700 | [diff] [blame] | 642 | rm -fr "$test" || { |
Markus Heidelberg | 3564131 | 2009-01-20 00:43:26 +0100 | [diff] [blame] | 643 | trap - EXIT |
Junio C Hamano | 8d14ac9 | 2008-03-18 21:58:01 -0700 | [diff] [blame] | 644 | echo >&5 "FATAL: Cannot prepare test area" |
| 645 | exit 1 |
| 646 | } |
| 647 | |
Bryan Donlan | 4a7aacc | 2008-05-04 01:38:00 -0400 | [diff] [blame] | 648 | test_create_repo "$test" |
Lea Wiemann | 1bd9c64 | 2008-05-31 23:11:21 +0200 | [diff] [blame] | 649 | # Use -P to resolve symlinks in our working directory so that the cwd |
| 650 | # in subprocesses like git equals our $PWD (for pathname comparisons). |
| 651 | cd -P "$test" || exit 1 |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 652 | |
Johannes Sixt | d5d9de1 | 2009-02-05 20:59:27 +0100 | [diff] [blame] | 653 | this_test=${0##*/} |
| 654 | this_test=${this_test%%-*} |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 655 | for skp in $GIT_SKIP_TESTS |
| 656 | do |
| 657 | to_skip= |
| 658 | for skp in $GIT_SKIP_TESTS |
| 659 | do |
| 660 | case "$this_test" in |
| 661 | $skp) |
| 662 | to_skip=t |
| 663 | esac |
| 664 | done |
| 665 | case "$to_skip" in |
| 666 | t) |
Pierre Habouzit | 55db1df | 2007-10-24 22:03:38 +0200 | [diff] [blame] | 667 | say_color skip >&3 "skipping test $this_test altogether" |
| 668 | say_color skip "skip all tests in $this_test" |
Junio C Hamano | 04ece59 | 2006-12-28 17:58:00 -0800 | [diff] [blame] | 669 | test_done |
| 670 | esac |
| 671 | done |
Johannes Sixt | f17e9fb | 2009-03-11 21:17:26 +0100 | [diff] [blame] | 672 | |
| 673 | # Fix some commands on Windows |
| 674 | case $(uname -s) in |
| 675 | *MINGW*) |
| 676 | # Windows has its own (incompatible) sort and find |
| 677 | sort () { |
| 678 | /usr/bin/sort "$@" |
| 679 | } |
| 680 | find () { |
| 681 | /usr/bin/find "$@" |
| 682 | } |
Johannes Sixt | 5397ea3 | 2009-03-14 22:21:27 +0100 | [diff] [blame] | 683 | sum () { |
| 684 | md5sum "$@" |
| 685 | } |
Johannes Sixt | 4114156 | 2009-03-13 23:35:24 +0100 | [diff] [blame] | 686 | # git sees Windows-style pwd |
| 687 | pwd () { |
| 688 | builtin pwd -W |
| 689 | } |
Johannes Sixt | ee9fb68 | 2009-03-13 22:55:27 +0100 | [diff] [blame] | 690 | # no POSIX permissions |
Johannes Sixt | 6fd1106 | 2009-03-13 23:00:15 +0100 | [diff] [blame] | 691 | # backslashes in pathspec are converted to '/' |
Johannes Sixt | fb9a2be | 2009-03-25 13:21:15 +0100 | [diff] [blame] | 692 | # exec does not inherit the PID |
Johannes Sixt | ee9fb68 | 2009-03-13 22:55:27 +0100 | [diff] [blame] | 693 | ;; |
| 694 | *) |
| 695 | test_set_prereq POSIXPERM |
Johannes Sixt | 6fd1106 | 2009-03-13 23:00:15 +0100 | [diff] [blame] | 696 | test_set_prereq BSLASHPSPEC |
Johannes Sixt | fb9a2be | 2009-03-25 13:21:15 +0100 | [diff] [blame] | 697 | test_set_prereq EXECKEEPSPID |
Johannes Sixt | f17e9fb | 2009-03-11 21:17:26 +0100 | [diff] [blame] | 698 | ;; |
| 699 | esac |
Johannes Sixt | 704a314 | 2009-03-04 22:38:24 +0100 | [diff] [blame] | 700 | |
Jeff King | 1b19ccd | 2009-04-03 15:33:59 -0400 | [diff] [blame] | 701 | test -z "$NO_PERL" && test_set_prereq PERL |
| 702 | |
Johannes Sixt | 704a314 | 2009-03-04 22:38:24 +0100 | [diff] [blame] | 703 | # test whether the filesystem supports symbolic links |
| 704 | ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS |
| 705 | rm -f y |