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: $*" 39trap-exit 40exit1 41} 42 43say () { 44echo"* $*" 45} 46 47test"${test_description}"!=""|| 48error "Test script did not set test_description." 49 50whiletest"$#"-ne0 51do 52case"$1"in 53-d|--d|--de|--deb|--debu|--debug) 54 debug=t;shift;; 55-i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) 56 immediate=t;shift;; 57-h|--h|--he|--hel|--help) 58echo"$test_description" 59exit0;; 60-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) 61 verbose=t;shift;; 62*) 63break;; 64esac 65done 66 67exec5>&1 68iftest"$verbose"="t" 69then 70exec4>&2 3>&1 71else 72exec4>/dev/null 3>/dev/null 73fi 74 75test_failure=0 76test_count=0 77 78trap'echo >&5 "FATAL: Unexpected exit with code $?"; exit 1'exit 79 80 81# You are not expected to call test_ok_ and test_failure_ directly, use 82# the text_expect_* functions instead. 83 84test_ok_ () { 85 test_count=$(expr "$test_count" + 1) 86 say " ok$test_count: $@" 87} 88 89test_failure_ () { 90 test_count=$(expr "$test_count" + 1) 91 test_failure=$(expr "$test_failure" + 1); 92 say "FAIL$test_count:$1" 93shift 94echo"$@"|sed-e's/^/ /' 95test"$immediate"=""|| {trap-exit;exit1; } 96} 97 98 99test_debug () { 100test"$debug"=""||eval"$1" 101} 102 103test_run_ () { 104eval>&3 2>&4"$1" 105 eval_ret="$?" 106return0 107} 108 109test_expect_failure () { 110test"$#"=2|| 111 error "bug in the test script: not 2 parameters to test-expect-failure" 112 say >&3"expecting failure:$2" 113 test_run_ "$2" 114if["$?"=0-a"$eval_ret"!=0] 115then 116 test_ok_ "$1" 117else 118 test_failure_ "$@" 119fi 120} 121 122test_expect_success () { 123test"$#"=2|| 124 error "bug in the test script: not 2 parameters to test-expect-success" 125 say >&3"expecting success:$2" 126 test_run_ "$2" 127if["$?"=0-a"$eval_ret"=0] 128then 129 test_ok_ "$1" 130else 131 test_failure_ "$@" 132fi 133} 134 135test_done () { 136trap-exit 137case"$test_failure"in 1380) 139# We could: 140# cd .. && rm -fr trash 141# but that means we forbid any tests that use their own 142# subdirectory from calling test_done without coming back 143# to where they started from. 144# The Makefile provided will clean this test area so 145# we will leave things as they are. 146 147 say "passed all$test_counttest(s)" 148exit0;; 149 150*) 151 say "failed$test_failureamong$test_counttest(s)" 152exit1;; 153 154esac 155} 156 157# Test the binaries we have just built. The tests are kept in 158# t/ subdirectory and are run in trash subdirectory. 159PATH=$(pwd)/..:$PATH 160 161# Test repository 162test=trash 163rm-fr"$test" 164mkdir"$test" 165cd"$test" 166git-init-db2>/dev/null || error "cannot run git-init-db"