Merge branch 'mk/test-seq'
authorJunio C Hamano <gitster@pobox.com>
Wed, 22 Aug 2012 18:51:37 +0000 (11:51 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 22 Aug 2012 18:51:38 +0000 (11:51 -0700)
Add a compatibility/utility function to the test framework.

* mk/test-seq:
tests: Introduce test_seq

1  2 
t/test-lib-functions.sh
diff --combined t/test-lib-functions.sh
index 04b1a43ef2e79e1e89f5a8d330172d156a7d25ce,9096398b184df722492cd6072d618edb78eb5206..9bc57d27e961720c98f75f95ab3186723e77f88b
@@@ -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 ','
  
        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:
  #