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*) 67break;; 68esac 69done 70 71exec5>&1 72iftest"$verbose"="t" 73then 74exec4>&2 3>&1 75else 76exec4>/dev/null 3>/dev/null 77fi 78 79test_failure=0 80test_count=0 81 82trap'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1'exit 83 84 85# You are not expected to call test_ok_ and test_failure_ directly, use 86# the text_expect_* functions instead. 87 88test_ok_ () { 89 test_count=$(expr "$test_count" + 1) 90 say " ok$test_count: $@" 91} 92 93test_failure_ () { 94 test_count=$(expr "$test_count" + 1) 95 test_failure=$(expr "$test_failure" + 1); 96 say "FAIL$test_count:$1" 97shift 98echo"$@"|sed-e's/^/ /' 99test"$immediate"=""|| {trap-exit;exit1; } 100} 101 102 103test_debug () { 104test"$debug"=""||eval"$1" 105} 106 107test_run_ () { 108eval>&3 2>&4"$1" 109 eval_ret="$?" 110return0 111} 112 113test_expect_failure () { 114test"$#"=2|| 115 error "bug in the test script: not 2 parameters to test-expect-failure" 116 say >&3"expecting failure:$2" 117 test_run_ "$2" 118if["$?"=0-a"$eval_ret"!=0] 119then 120 test_ok_ "$1" 121else 122 test_failure_ "$@" 123fi 124} 125 126test_expect_success () { 127test"$#"=2|| 128 error "bug in the test script: not 2 parameters to test-expect-success" 129 say >&3"expecting success:$2" 130 test_run_ "$2" 131if["$?"=0-a"$eval_ret"=0] 132then 133 test_ok_ "$1" 134else 135 test_failure_ "$@" 136fi 137} 138 139test_expect_code () { 140test"$#"=3|| 141 error "bug in the test script: not 3 parameters to test-expect-code" 142 say >&3"expecting exit code$1:$3" 143 test_run_ "$3" 144if["$?"=0-a"$eval_ret"="$1"] 145then 146 test_ok_ "$2" 147else 148 test_failure_ "$@" 149fi 150} 151 152test_done () { 153trap-exit 154case"$test_failure"in 1550) 156# We could: 157# cd .. && rm -fr trash 158# but that means we forbid any tests that use their own 159# subdirectory from calling test_done without coming back 160# to where they started from. 161# The Makefile provided will clean this test area so 162# we will leave things as they are. 163 164 say "passed all$test_counttest(s)" 165exit0;; 166 167*) 168 say "failed$test_failureamong$test_counttest(s)" 169exit1;; 170 171esac 172} 173 174# Test the binaries we have just built. The tests are kept in 175# t/ subdirectory and are run in trash subdirectory. 176PATH=$(pwd)/..:$PATH 177GIT_EXEC_PATH=$(pwd)/.. 178export PATH GIT_EXEC_PATH 179 180# Similarly use ../compat/subprocess.py if our python does not 181# have subprocess.py on its own. 182PYTHON=`sed -e '1{ 183 s/^#!// 184 q 185}' ../git-merge-recursive`|| { 186 error "You haven't built things yet, have you?" 187} 188"$PYTHON"-c'import subprocess'2>/dev/null || { 189 PYTHONPATH=$(pwd)/../compat 190export PYTHONPATH 191} 192test -d ../templates/blt || { 193 error "You haven't built things yet, have you?" 194} 195 196# Test repository 197test=trash 198rm-fr"$test" 199mkdir"$test" 200cd"$test"|| error "Cannot setup test environment" 201"$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/2>/dev/null || 202error "cannot run git init-db -- have you built things yet?" 203 204mv .git/hooks .git/hooks-disabled