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 37# Each test should start with something like this, after copyright notices: 38# 39# test_description='Description of this test... 40# This test checks if command xyzzy does the right thing... 41# ' 42# . ./test-lib.sh 43 44error () { 45echo"* error: $*" 46trap-exit 47exit1 48} 49 50say () { 51echo"* $*" 52} 53 54test"${test_description}"!=""|| 55error "Test script did not set test_description." 56 57whiletest"$#"-ne0 58do 59case"$1"in 60-d|--d|--de|--deb|--debu|--debug) 61 debug=t;shift;; 62-i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) 63 immediate=t;shift;; 64-h|--h|--he|--hel|--help) 65echo"$test_description" 66exit0;; 67-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) 68 verbose=t;shift;; 69--no-python) 70 no_python=t;shift;; 71*) 72break;; 73esac 74done 75 76exec5>&1 77iftest"$verbose"="t" 78then 79exec4>&2 3>&1 80else 81exec4>/dev/null 3>/dev/null 82fi 83 84test_failure=0 85test_count=0 86 87trap'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1'exit 88 89 90# You are not expected to call test_ok_ and test_failure_ directly, use 91# the text_expect_* functions instead. 92 93test_ok_ () { 94 test_count=$(expr "$test_count" + 1) 95 say " ok$test_count: $@" 96} 97 98test_failure_ () { 99 test_count=$(expr "$test_count" + 1) 100 test_failure=$(expr "$test_failure" + 1); 101 say "FAIL$test_count:$1" 102shift 103echo"$@"|sed-e's/^/ /' 104test"$immediate"=""|| {trap-exit;exit1; } 105} 106 107 108test_debug () { 109test"$debug"=""||eval"$1" 110} 111 112test_run_ () { 113eval>&3 2>&4"$1" 114 eval_ret="$?" 115return0 116} 117 118test_expect_failure () { 119test"$#"=2|| 120 error "bug in the test script: not 2 parameters to test-expect-failure" 121 say >&3"expecting failure:$2" 122 test_run_ "$2" 123if["$?"=0-a"$eval_ret"!=0] 124then 125 test_ok_ "$1" 126else 127 test_failure_ "$@" 128fi 129} 130 131test_expect_success () { 132test"$#"=2|| 133 error "bug in the test script: not 2 parameters to test-expect-success" 134 say >&3"expecting success:$2" 135 test_run_ "$2" 136if["$?"=0-a"$eval_ret"=0] 137then 138 test_ok_ "$1" 139else 140 test_failure_ "$@" 141fi 142} 143 144test_expect_code () { 145test"$#"=3|| 146 error "bug in the test script: not 3 parameters to test-expect-code" 147 say >&3"expecting exit code$1:$3" 148 test_run_ "$3" 149if["$?"=0-a"$eval_ret"="$1"] 150then 151 test_ok_ "$2" 152else 153 test_failure_ "$@" 154fi 155} 156 157# Most tests can use the created repository, but some amy need to create more. 158# Usage: test_create_repo <directory> 159test_create_repo () { 160test"$#"=1|| 161 error "bug in the test script: not 1 parameter to test-create-repo" 162 owd=`pwd` 163 repo="$1" 164mkdir"$repo" 165cd"$repo"|| error "Cannot setup test environment" 166"$GIT_EXEC_PATH/git" init-db --template=$GIT_EXEC_PATH/templates/blt/2>/dev/null || 167 error "cannot run git init-db -- have you built things yet?" 168mv .git/hooks .git/hooks-disabled 169cd"$owd" 170} 171 172test_done () { 173trap-exit 174case"$test_failure"in 1750) 176# We could: 177# cd .. && rm -fr trash 178# but that means we forbid any tests that use their own 179# subdirectory from calling test_done without coming back 180# to where they started from. 181# The Makefile provided will clean this test area so 182# we will leave things as they are. 183 184 say "passed all$test_counttest(s)" 185exit0;; 186 187*) 188 say "failed$test_failureamong$test_counttest(s)" 189exit1;; 190 191esac 192} 193 194# Test the binaries we have just built. The tests are kept in 195# t/ subdirectory and are run in trash subdirectory. 196PATH=$(pwd)/..:$PATH 197GIT_EXEC_PATH=$(pwd)/.. 198export PATH GIT_EXEC_PATH 199 200# Similarly use ../compat/subprocess.py if our python does not 201# have subprocess.py on its own. 202PYTHON=`sed -e '1{ 203 s/^#!// 204 q 205}' ../git-merge-recursive`|| { 206 error "You haven't built things yet, have you?" 207} 208"$PYTHON"-c'import subprocess'2>/dev/null || { 209 PYTHONPATH=$(pwd)/../compat 210export PYTHONPATH 211} 212test -d ../templates/blt || { 213 error "You haven't built things yet, have you?" 214} 215 216# Test repository 217test=trash 218rm-fr"$test" 219test_create_repo $test 220cd"$test"