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