1#!/bin/sh 2# 3# Copyright (c) 2005 Junio C Hamano 4# 5 6# For repeatability, reset the environment to known value. 7LANG=C 8LC_ALL=C 9PAGER=cat 10TZ=UTC 11export LANG LC_ALL PAGER TZ 12unset 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 21unset GIT_COMMITTER_DATE 22unset 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 () { 40echo"* error: $*" 41trap-exit 42exit1 43} 44 45say () { 46echo"* $*" 47} 48 49test"${test_description}"!=""|| 50error "Test script did not set test_description." 51 52whiletest"$#"-ne0 53do 54case"$1"in 55-d|--d|--de|--deb|--debu|--debug) 56 debug=t;shift;; 57-i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) 58 immediate=t;shift;; 59-h|--h|--he|--hel|--help) 60echo"$test_description" 61exit0;; 62-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) 63 verbose=t;shift;; 64*) 65break;; 66esac 67done 68 69exec5>&1 70iftest"$verbose"="t" 71then 72exec4>&2 3>&1 73else 74exec4>/dev/null 3>/dev/null 75fi 76 77test_failure=0 78test_count=0 79 80trap'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1'exit 81 82 83# You are not expected to call test_ok_ and test_failure_ directly, use 84# the text_expect_* functions instead. 85 86test_ok_ () { 87 test_count=$(expr "$test_count" + 1) 88 say " ok$test_count: $@" 89} 90 91test_failure_ () { 92 test_count=$(expr "$test_count" + 1) 93 test_failure=$(expr "$test_failure" + 1); 94 say "FAIL$test_count:$1" 95shift 96echo"$@"|sed-e's/^/ /' 97test"$immediate"=""|| {trap-exit;exit1; } 98} 99 100 101test_debug () { 102test"$debug"=""||eval"$1" 103} 104 105test_run_ () { 106eval>&3 2>&4"$1" 107 eval_ret="$?" 108return0 109} 110 111test_expect_failure () { 112test"$#"=2|| 113 error "bug in the test script: not 2 parameters to test-expect-failure" 114 say >&3"expecting failure:$2" 115 test_run_ "$2" 116if["$?"=0-a"$eval_ret"!=0] 117then 118 test_ok_ "$1" 119else 120 test_failure_ "$@" 121fi 122} 123 124test_expect_success () { 125test"$#"=2|| 126 error "bug in the test script: not 2 parameters to test-expect-success" 127 say >&3"expecting success:$2" 128 test_run_ "$2" 129if["$?"=0-a"$eval_ret"=0] 130then 131 test_ok_ "$1" 132else 133 test_failure_ "$@" 134fi 135} 136 137test_expect_code () { 138test"$#"=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" 142if["$?"=0-a"$eval_ret"="$1"] 143then 144 test_ok_ "$2" 145else 146 test_failure_ "$@" 147fi 148} 149 150test_done () { 151trap-exit 152case"$test_failure"in 1530) 154# 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_counttest(s)" 163exit0;; 164 165*) 166 say "failed$test_failureamong$test_counttest(s)" 167exit1;; 168 169esac 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 175GIT_EXEC_PATH=$(pwd)/.. 176export 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 183}' ../git-merge-recursive`|| { 184 error "You haven't built things yet, have you?" 185} 186"$PYTHON"-c'import subprocess'2>/dev/null || { 187 PYTHONPATH=$(pwd)/../compat 188export PYTHONPATH 189} 190test -d ../templates/blt || { 191 error "You haven't built things yet, have you?" 192} 193 194# Test repository 195test=trash 196rm-fr"$test" 197mkdir"$test" 198cd"$test"|| error "Cannot setup test environment" 199"$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/2>/dev/null || 200error "cannot run git init-db -- have you built things yet?" 201 202mv .git/hooks .git/hooks-disabled