1#!/bin/sh 2# 3# Copyright (c) 2005 Junio C Hamano 4# 5 6# For repeatability, reset the environment to known value. 7LANG=C 8PAGER=cat 9TZ=UTC 10export LANG PAGER TZ 11unset AUTHOR_DATE 12unset AUTHOR_EMAIL 13unset AUTHOR_NAME 14unset COMMIT_AUTHOR_EMAIL 15unset COMMIT_AUTHOR_NAME 16unset GIT_ALTERNATE_OBJECT_DIRECTORIES 17unset GIT_AUTHOR_DATE 18unset GIT_AUTHOR_EMAIL 19unset GIT_AUTHOR_NAME 20unset GIT_COMMITTER_EMAIL 21unset GIT_COMMITTER_NAME 22unset GIT_DIFF_OPTS 23unset GIT_DIR 24unset GIT_EXTERNAL_DIFF 25unset GIT_INDEX_FILE 26unset GIT_OBJECT_DIRECTORY 27unset SHA1_FILE_DIRECTORIES 28unset SHA1_FILE_DIRECTORY 29 30# Each test should start with something like this, after copyright notices: 31# 32# test_description='Description of this test... 33# This test checks if command xyzzy does the right thing... 34# ' 35# . ./test-lib.sh 36 37error () { 38echo"* error: $*" 39exit1 40} 41 42say () { 43echo"* $*" 44} 45 46test"${test_description}"!=""|| 47error "Test script did not set test_description." 48 49whiletest"$#"-ne0 50do 51case"$1"in 52-d|--d|--de|--deb|--debu|--debug) 53 debug=t;shift;; 54-i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) 55 immediate=t;shift;; 56-h|--h|--he|--hel|--help) 57echo"$test_description" 58exit0;; 59-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) 60 verbose=t;shift;; 61*) 62break;; 63esac 64done 65 66exec5>&1 67iftest"$verbose"="t" 68then 69exec4>&2 3>&1 70else 71exec4>/dev/null 3>/dev/null 72fi 73 74test_failure=0 75test_count=0 76 77 78# You are not expected to call test_ok_ and test_failure_ directly, use 79# the text_expect_* functions instead. 80 81test_ok_ () { 82 test_count=$(expr "$test_count" + 1) 83 say " ok$test_count: $@" 84} 85 86test_failure_ () { 87 test_count=$(expr "$test_count" + 1) 88 test_failure=$(expr "$test_failure" + 1); 89 say "FAIL$test_count:$1" 90shift 91echo"$@"|sed-e's/^/ /' 92test"$immediate"=""||exit1 93} 94 95 96test_debug () { 97test"$debug"=""||eval"$1" 98} 99 100test_run_ () { 101trap'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1'exit 102eval>&3 2>&4"$1" 103 eval_ret="$?" 104trap-exit 105return0 106} 107 108test_expect_failure () { 109test"$#"=2|| 110 error "bug in the test script: not 2 parameters to test-expect-failure" 111 say >&3"expecting failure:$2" 112 test_run_ "$2" 113if["$?"=0-a"$eval_ret"!=0] 114then 115 test_ok_ "$1" 116else 117 test_failure_ "$@" 118fi 119} 120 121test_expect_success () { 122test"$#"=2|| 123 error "bug in the test script: not 2 parameters to test-expect-success" 124 say >&3"expecting success:$2" 125 test_run_ "$2" 126if["$?"=0-a"$eval_ret"=0] 127then 128 test_ok_ "$1" 129else 130 test_failure_ "$@" 131fi 132} 133 134test_done () { 135case"$test_failure"in 1360) 137# We could: 138# cd .. && rm -fr trash 139# but that means we forbid any tests that use their own 140# subdirectory from calling test_done without coming back 141# to where they started from. 142# The Makefile provided will clean this test area so 143# we will leave things as they are. 144 145 say "passed all$test_counttest(s)" 146exit0;; 147 148*) 149 say "failed$test_failureamong$test_counttest(s)" 150exit1;; 151 152esac 153} 154 155# Test the binaries we have just built. The tests are kept in 156# t/ subdirectory and are run in trash subdirectory. 157PATH=$(pwd)/..:$PATH 158 159# Test repository 160test=trash 161rm-fr"$test" 162mkdir"$test" 163cd"$test" 164git-init-db2>/dev/null || error "cannot run git-init-db"