From: Junio C Hamano Date: Tue, 11 Sep 2012 17:51:58 +0000 (-0700) Subject: Merge branch 'jc/test-prereq' into maint X-Git-Tag: v1.7.12.1~25 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/6508d0358d139336742676f88fd0248e54c8a59a?ds=inline;hp=-c Merge branch 'jc/test-prereq' into maint * jc/test-prereq: t3910: use the UTF8_NFD_TO_NFC test prereq test-lib: provide UTF8 behaviour as a prerequisite t0050: use the SYMLINKS test prereq t0050: use the CASE_INSENSITIVE_FS test prereq test-lib: provide case insensitivity as a prerequisite test: allow prerequisite to be evaluated lazily test: rename $satisfied to $satisfied_prereq --- 6508d0358d139336742676f88fd0248e54c8a59a diff --combined t/test-lib-functions.sh index 9096398b18,04b1a43ef2..9bc57d27e9 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@@ -221,9 -221,35 +221,35 @@@ write_script () # capital letters by convention). test_set_prereq () { - satisfied="$satisfied$1 " + satisfied_prereq="$satisfied_prereq$1 " + } + satisfied_prereq=" " + lazily_testable_prereq= lazily_tested_prereq= + + # Usage: test_lazy_prereq PREREQ 'script' + test_lazy_prereq () { + lazily_testable_prereq="$lazily_testable_prereq$1 " + eval test_prereq_lazily_$1=\$2 + } + + test_run_lazy_prereq_ () { + script=' + mkdir -p "$TRASH_DIRECTORY/prereq-test-dir" && + ( + cd "$TRASH_DIRECTORY/prereq-test-dir" &&'"$2"' + )' + say >&3 "checking prerequisite: $1" + say >&3 "$script" + test_eval_ "$script" + eval_ret=$? + rm -rf "$TRASH_DIRECTORY/prereq-test-dir" + if test "$eval_ret" = 0; then + say >&3 "prerequisite $1 ok" + else + say >&3 "prerequisite $1 not satisfied" + fi + return $eval_ret } - satisfied=" " test_have_prereq () { # prerequisites can be concatenated with ',' @@@ -238,8 -264,24 +264,24 @@@ for prerequisite do + case " $lazily_tested_prereq " in + *" $prerequisite "*) + ;; + *) + case " $lazily_testable_prereq " in + *" $prerequisite "*) + eval "script=\$test_prereq_lazily_$prerequisite" && + if test_run_lazy_prereq_ "$prerequisite" "$script" + then + test_set_prereq $prerequisite + fi + lazily_tested_prereq="$lazily_tested_prereq$prerequisite " + esac + ;; + esac + total_prereq=$(($total_prereq + 1)) - case $satisfied in + case "$satisfied_prereq" in *" $prerequisite "*) ok_prereq=$(($ok_prereq + 1)) ;; @@@ -530,27 -572,6 +572,27 @@@ test_cmp() $GIT_TEST_CMP "$@" } +# Print a sequence of numbers or letters in increasing order. This is +# similar to GNU seq(1), but the latter might not be available +# everywhere (and does not do letters). It may be used like: +# +# for i in `test_seq 100`; do +# for j in `test_seq 10 20`; do +# for k in `test_seq a z`; do +# echo $i-$j-$k +# done +# done +# done + +test_seq () { + case $# in + 1) set 1 "$@" ;; + 2) ;; + *) error "bug in the test script: not 1 or 2 parameters to test_seq" ;; + esac + "$PERL_PATH" -le 'print for $ARGV[0]..$ARGV[1]' -- "$@" +} + # This function can be used to schedule some commands to be run # unconditionally at the end of the test to restore sanity: #