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