From: Junio C Hamano Date: Wed, 22 Aug 2012 18:51:37 +0000 (-0700) Subject: Merge branch 'mk/test-seq' X-Git-Tag: v1.8.0-rc0~152 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/c90f06efd84ef0ace0c92509a8bfa1bb1d8b05a8?hp=-c Merge branch 'mk/test-seq' Add a compatibility/utility function to the test framework. * mk/test-seq: tests: Introduce test_seq --- c90f06efd84ef0ace0c92509a8bfa1bb1d8b05a8 diff --combined t/test-lib-functions.sh index 04b1a43ef2,9096398b18..9bc57d27e9 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@@ -221,35 -221,9 +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 ',' @@@ -264,24 -238,8 +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)) ;; @@@ -572,6 -530,27 +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: #