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