Require TUs to explicitly request to overwrite a pkgbase
[aur.git] / test / sharness.sh
blob1d57ce9af29524dcccac1f0c6c3c6f77d1188bb7
1 #!/bin/sh
3 # Copyright (c) 2011-2012 Mathias Lafeldt
4 # Copyright (c) 2005-2012 Git project
5 # Copyright (c) 2005-2012 Junio C Hamano
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see http://www.gnu.org/licenses/ .
20 # Public: Current version of Sharness.
21 SHARNESS_VERSION="1.0.0"
22 export SHARNESS_VERSION
24 # Public: The file extension for tests. By default, it is set to "t".
25 : ${SHARNESS_TEST_EXTENSION:=t}
26 export SHARNESS_TEST_EXTENSION
28 # Reset TERM to original terminal if found, otherwise save orignal TERM
29 [ "x" = "x$SHARNESS_ORIG_TERM" ] &&
30 SHARNESS_ORIG_TERM="$TERM" ||
31 TERM="$SHARNESS_ORIG_TERM"
32 # Public: The unsanitized TERM under which sharness is originally run
33 export SHARNESS_ORIG_TERM
35 # Export SHELL_PATH
36 : ${SHELL_PATH:=$SHELL}
37 export SHELL_PATH
39 # For repeatability, reset the environment to a known state.
40 # TERM is sanitized below, after saving color control sequences.
41 LANG=C
42 LC_ALL=C
43 PAGER=cat
44 TZ=UTC
45 EDITOR=:
46 export LANG LC_ALL PAGER TZ EDITOR
47 unset VISUAL CDPATH GREP_OPTIONS
49 # Line feed
50 LF='
53 [ "x$TERM" != "xdumb" ] && (
54 [ -t 1 ] &&
55 tput bold >/dev/null 2>&1 &&
56 tput setaf 1 >/dev/null 2>&1 &&
57 tput sgr0 >/dev/null 2>&1
58 ) &&
59 color=t
61 while test "$#" -ne 0; do
62 case "$1" in
63 -d|--d|--de|--deb|--debu|--debug)
64 debug=t; shift ;;
65 -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate)
66 immediate=t; shift ;;
67 -l|--l|--lo|--lon|--long|--long-|--long-t|--long-te|--long-tes|--long-test|--long-tests)
68 TEST_LONG=t; export TEST_LONG; shift ;;
69 --in|--int|--inte|--inter|--intera|--interac|--interact|--interacti|--interactiv|--interactive|--interactive-|--interactive-t|--interactive-te|--interactive-tes|--interactive-test|--interactive-tests):
70 TEST_INTERACTIVE=t; export TEST_INTERACTIVE; verbose=t; shift ;;
71 -h|--h|--he|--hel|--help)
72 help=t; shift ;;
73 -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
74 verbose=t; shift ;;
75 -q|--q|--qu|--qui|--quie|--quiet)
76 # Ignore --quiet under a TAP::Harness. Saying how many tests
77 # passed without the ok/not ok details is always an error.
78 test -z "$HARNESS_ACTIVE" && quiet=t; shift ;;
79 --chain-lint)
80 chain_lint=t; shift ;;
81 --no-chain-lint)
82 chain_lint=; shift ;;
83 --no-color)
84 color=; shift ;;
85 --root=*)
86 root=$(expr "z$1" : 'z[^=]*=\(.*\)')
87 shift ;;
89 echo "error: unknown test option '$1'" >&2; exit 1 ;;
90 esac
91 done
93 if test -n "$color"; then
94 # Save the color control sequences now rather than run tput
95 # each time say_color() is called. This is done for two
96 # reasons:
97 # * TERM will be changed to dumb
98 # * HOME will be changed to a temporary directory and tput
99 # might need to read ~/.terminfo from the original HOME
100 # directory to get the control sequences
101 # Note: This approach assumes the control sequences don't end
102 # in a newline for any terminal of interest (command
103 # substitutions strip trailing newlines). Given that most
104 # (all?) terminals in common use are related to ECMA-48, this
105 # shouldn't be a problem.
106 say_color_error=$(tput bold; tput setaf 1) # bold red
107 say_color_skip=$(tput setaf 4) # blue
108 say_color_warn=$(tput setaf 3) # brown/yellow
109 say_color_pass=$(tput setaf 2) # green
110 say_color_info=$(tput setaf 6) # cyan
111 say_color_reset=$(tput sgr0)
112 say_color_="" # no formatting for normal text
113 say_color() {
114 test -z "$1" && test -n "$quiet" && return
115 eval "say_color_color=\$say_color_$1"
116 shift
117 printf "%s\\n" "$say_color_color$*$say_color_reset"
119 else
120 say_color() {
121 test -z "$1" && test -n "$quiet" && return
122 shift
123 printf "%s\n" "$*"
127 TERM=dumb
128 export TERM
130 error() {
131 say_color error "error: $*"
132 EXIT_OK=t
133 exit 1
136 say() {
137 say_color info "$*"
140 test -n "$test_description" || error "Test script did not set test_description."
142 if test "$help" = "t"; then
143 echo "$test_description"
144 exit 0
147 exec 5>&1
148 exec 6<&0
149 if test "$verbose" = "t"; then
150 exec 4>&2 3>&1
151 else
152 exec 4>/dev/null 3>/dev/null
155 test_failure=0
156 test_count=0
157 test_fixed=0
158 test_broken=0
159 test_success=0
161 die() {
162 code=$?
163 if test -n "$EXIT_OK"; then
164 exit $code
165 else
166 echo >&5 "FATAL: Unexpected exit with code $code"
167 exit 1
171 EXIT_OK=
172 trap 'die' EXIT
174 # Public: Define that a test prerequisite is available.
176 # The prerequisite can later be checked explicitly using test_have_prereq or
177 # implicitly by specifying the prerequisite name in calls to test_expect_success
178 # or test_expect_failure.
180 # $1 - Name of prerequiste (a simple word, in all capital letters by convention)
182 # Examples
184 # # Set PYTHON prerequisite if interpreter is available.
185 # command -v python >/dev/null && test_set_prereq PYTHON
187 # # Set prerequisite depending on some variable.
188 # test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
190 # Returns nothing.
191 test_set_prereq() {
192 satisfied_prereq="$satisfied_prereq$1 "
194 satisfied_prereq=" "
196 # Public: Check if one or more test prerequisites are defined.
198 # The prerequisites must have previously been set with test_set_prereq.
199 # The most common use of this is to skip all the tests if some essential
200 # prerequisite is missing.
202 # $1 - Comma-separated list of test prerequisites.
204 # Examples
206 # # Skip all remaining tests if prerequisite is not set.
207 # if ! test_have_prereq PERL; then
208 # skip_all='skipping perl interface tests, perl not available'
209 # test_done
210 # fi
212 # Returns 0 if all prerequisites are defined or 1 otherwise.
213 test_have_prereq() {
214 # prerequisites can be concatenated with ','
215 save_IFS=$IFS
216 IFS=,
217 set -- $*
218 IFS=$save_IFS
220 total_prereq=0
221 ok_prereq=0
222 missing_prereq=
224 for prerequisite; do
225 case "$prerequisite" in
227 negative_prereq=t
228 prerequisite=${prerequisite#!}
231 negative_prereq=
232 esac
234 total_prereq=$(($total_prereq + 1))
235 case "$satisfied_prereq" in
236 *" $prerequisite "*)
237 satisfied_this_prereq=t
240 satisfied_this_prereq=
241 esac
243 case "$satisfied_this_prereq,$negative_prereq" in
244 t,|,t)
245 ok_prereq=$(($ok_prereq + 1))
248 # Keep a list of missing prerequisites; restore
249 # the negative marker if necessary.
250 prerequisite=${negative_prereq:+!}$prerequisite
251 if test -z "$missing_prereq"; then
252 missing_prereq=$prerequisite
253 else
254 missing_prereq="$prerequisite,$missing_prereq"
256 esac
257 done
259 test $total_prereq = $ok_prereq
262 # You are not expected to call test_ok_ and test_failure_ directly, use
263 # the text_expect_* functions instead.
265 test_ok_() {
266 test_success=$(($test_success + 1))
267 say_color "" "ok $test_count - $@"
270 test_failure_() {
271 test_failure=$(($test_failure + 1))
272 say_color error "not ok $test_count - $1"
273 shift
274 echo "$@" | sed -e 's/^/# /'
275 test "$immediate" = "" || { EXIT_OK=t; exit 1; }
278 test_known_broken_ok_() {
279 test_fixed=$(($test_fixed + 1))
280 say_color error "ok $test_count - $@ # TODO known breakage vanished"
283 test_known_broken_failure_() {
284 test_broken=$(($test_broken + 1))
285 say_color warn "not ok $test_count - $@ # TODO known breakage"
288 # Public: Execute commands in debug mode.
290 # Takes a single argument and evaluates it only when the test script is started
291 # with --debug. This is primarily meant for use during the development of test
292 # scripts.
294 # $1 - Commands to be executed.
296 # Examples
298 # test_debug "cat some_log_file"
300 # Returns the exit code of the last command executed in debug mode or 0
301 # otherwise.
302 test_debug() {
303 test "$debug" = "" || eval "$1"
306 # Public: Stop execution and start a shell.
308 # This is useful for debugging tests and only makes sense together with "-v".
309 # Be sure to remove all invocations of this command before submitting.
310 test_pause() {
311 if test "$verbose" = t; then
312 "$SHELL_PATH" <&6 >&3 2>&4
313 else
314 error >&5 "test_pause requires --verbose"
318 test_eval_() {
319 # This is a separate function because some tests use
320 # "return" to end a test_expect_success block early.
321 case ",$test_prereq," in
322 *,INTERACTIVE,*)
323 eval "$*"
326 eval </dev/null >&3 2>&4 "$*"
328 esac
331 test_run_() {
332 test_cleanup=:
333 expecting_failure=$2
334 test_eval_ "$1"
335 eval_ret=$?
337 if test "$chain_lint" = "t"; then
338 test_eval_ "(exit 117) && $1"
339 if test "$?" != 117; then
340 error "bug in the test script: broken &&-chain: $1"
344 if test -z "$immediate" || test $eval_ret = 0 || test -n "$expecting_failure"; then
345 test_eval_ "$test_cleanup"
347 if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"; then
348 echo ""
350 return "$eval_ret"
353 test_skip_() {
354 test_count=$(($test_count + 1))
355 to_skip=
356 for skp in $SKIP_TESTS; do
357 case $this_test.$test_count in
358 $skp)
359 to_skip=t
360 break
361 esac
362 done
363 if test -z "$to_skip" && test -n "$test_prereq" && ! test_have_prereq "$test_prereq"; then
364 to_skip=t
366 case "$to_skip" in
368 of_prereq=
369 if test "$missing_prereq" != "$test_prereq"; then
370 of_prereq=" of $test_prereq"
373 say_color skip >&3 "skipping test: $@"
374 say_color skip "ok $test_count # skip $1 (missing $missing_prereq${of_prereq})"
375 : true
378 false
380 esac
383 # Public: Run test commands and expect them to succeed.
385 # When the test passed, an "ok" message is printed and the number of successful
386 # tests is incremented. When it failed, a "not ok" message is printed and the
387 # number of failed tests is incremented.
389 # With --immediate, exit test immediately upon the first failed test.
391 # Usually takes two arguments:
392 # $1 - Test description
393 # $2 - Commands to be executed.
395 # With three arguments, the first will be taken to be a prerequisite:
396 # $1 - Comma-separated list of test prerequisites. The test will be skipped if
397 # not all of the given prerequisites are set. To negate a prerequisite,
398 # put a "!" in front of it.
399 # $2 - Test description
400 # $3 - Commands to be executed.
402 # Examples
404 # test_expect_success \
405 # 'git-write-tree should be able to write an empty tree.' \
406 # 'tree=$(git-write-tree)'
408 # # Test depending on one prerequisite.
409 # test_expect_success TTY 'git --paginate rev-list uses a pager' \
410 # ' ... '
412 # # Multiple prerequisites are separated by a comma.
413 # test_expect_success PERL,PYTHON 'yo dawg' \
414 # ' test $(perl -E 'print eval "1 +" . qx[python -c "print 2"]') == "4" '
416 # Returns nothing.
417 test_expect_success() {
418 test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
419 test "$#" = 2 || error "bug in the test script: not 2 or 3 parameters to test_expect_success"
420 export test_prereq
421 if ! test_skip_ "$@"; then
422 say >&3 "expecting success: $2"
423 if test_run_ "$2"; then
424 test_ok_ "$1"
425 else
426 test_failure_ "$@"
429 echo >&3 ""
432 # Public: Run test commands and expect them to fail. Used to demonstrate a known
433 # breakage.
435 # This is NOT the opposite of test_expect_success, but rather used to mark a
436 # test that demonstrates a known breakage.
438 # When the test passed, an "ok" message is printed and the number of fixed tests
439 # is incremented. When it failed, a "not ok" message is printed and the number
440 # of tests still broken is incremented.
442 # Failures from these tests won't cause --immediate to stop.
444 # Usually takes two arguments:
445 # $1 - Test description
446 # $2 - Commands to be executed.
448 # With three arguments, the first will be taken to be a prerequisite:
449 # $1 - Comma-separated list of test prerequisites. The test will be skipped if
450 # not all of the given prerequisites are set. To negate a prerequisite,
451 # put a "!" in front of it.
452 # $2 - Test description
453 # $3 - Commands to be executed.
455 # Returns nothing.
456 test_expect_failure() {
457 test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
458 test "$#" = 2 || error "bug in the test script: not 2 or 3 parameters to test_expect_failure"
459 export test_prereq
460 if ! test_skip_ "$@"; then
461 say >&3 "checking known breakage: $2"
462 if test_run_ "$2" expecting_failure; then
463 test_known_broken_ok_ "$1"
464 else
465 test_known_broken_failure_ "$1"
468 echo >&3 ""
471 # Public: Run command and ensure that it fails in a controlled way.
473 # Use it instead of "! <command>". For example, when <command> dies due to a
474 # segfault, test_must_fail diagnoses it as an error, while "! <command>" would
475 # mistakenly be treated as just another expected failure.
477 # This is one of the prefix functions to be used inside test_expect_success or
478 # test_expect_failure.
480 # $1.. - Command to be executed.
482 # Examples
484 # test_expect_success 'complain and die' '
485 # do something &&
486 # do something else &&
487 # test_must_fail git checkout ../outerspace
490 # Returns 1 if the command succeeded (exit code 0).
491 # Returns 1 if the command died by signal (exit codes 130-192)
492 # Returns 1 if the command could not be found (exit code 127).
493 # Returns 0 otherwise.
494 test_must_fail() {
495 "$@"
496 exit_code=$?
497 if test $exit_code = 0; then
498 echo >&2 "test_must_fail: command succeeded: $*"
499 return 1
500 elif test $exit_code -gt 129 -a $exit_code -le 192; then
501 echo >&2 "test_must_fail: died by signal: $*"
502 return 1
503 elif test $exit_code = 127; then
504 echo >&2 "test_must_fail: command not found: $*"
505 return 1
507 return 0
510 # Public: Run command and ensure that it succeeds or fails in a controlled way.
512 # Similar to test_must_fail, but tolerates success too. Use it instead of
513 # "<command> || :" to catch failures caused by a segfault, for instance.
515 # This is one of the prefix functions to be used inside test_expect_success or
516 # test_expect_failure.
518 # $1.. - Command to be executed.
520 # Examples
522 # test_expect_success 'some command works without configuration' '
523 # test_might_fail git config --unset all.configuration &&
524 # do something
527 # Returns 1 if the command died by signal (exit codes 130-192)
528 # Returns 1 if the command could not be found (exit code 127).
529 # Returns 0 otherwise.
530 test_might_fail() {
531 "$@"
532 exit_code=$?
533 if test $exit_code -gt 129 -a $exit_code -le 192; then
534 echo >&2 "test_might_fail: died by signal: $*"
535 return 1
536 elif test $exit_code = 127; then
537 echo >&2 "test_might_fail: command not found: $*"
538 return 1
540 return 0
543 # Public: Run command and ensure it exits with a given exit code.
545 # This is one of the prefix functions to be used inside test_expect_success or
546 # test_expect_failure.
548 # $1 - Expected exit code.
549 # $2.. - Command to be executed.
551 # Examples
553 # test_expect_success 'Merge with d/f conflicts' '
554 # test_expect_code 1 git merge "merge msg" B master
557 # Returns 0 if the expected exit code is returned or 1 otherwise.
558 test_expect_code() {
559 want_code=$1
560 shift
561 "$@"
562 exit_code=$?
563 if test $exit_code = $want_code; then
564 return 0
567 echo >&2 "test_expect_code: command exited with $exit_code, we wanted $want_code $*"
568 return 1
571 # Public: Compare two files to see if expected output matches actual output.
573 # The TEST_CMP variable defines the command used for the comparision; it
574 # defaults to "diff -u". Only when the test script was started with --verbose,
575 # will the command's output, the diff, be printed to the standard output.
577 # This is one of the prefix functions to be used inside test_expect_success or
578 # test_expect_failure.
580 # $1 - Path to file with expected output.
581 # $2 - Path to file with actual output.
583 # Examples
585 # test_expect_success 'foo works' '
586 # echo expected >expected &&
587 # foo >actual &&
588 # test_cmp expected actual
591 # Returns the exit code of the command set by TEST_CMP.
592 test_cmp() {
593 ${TEST_CMP:-diff -u} "$@"
596 # Public: portably print a sequence of numbers.
598 # seq is not in POSIX and GNU seq might not be available everywhere,
599 # so it is nice to have a seq implementation, even a very simple one.
601 # $1 - Starting number.
602 # $2 - Ending number.
604 # Examples
606 # test_expect_success 'foo works 10 times' '
607 # for i in $(test_seq 1 10)
608 # do
609 # foo || return
610 # done
613 # Returns 0 if all the specified numbers can be displayed.
614 test_seq() {
615 i="$1"
616 j="$2"
617 while test "$i" -le "$j"
619 echo "$i" || return
620 i=$(expr "$i" + 1)
621 done
624 # Public: Check if the file expected to be empty is indeed empty, and barfs
625 # otherwise.
627 # $1 - File to check for emptyness.
629 # Returns 0 if file is empty, 1 otherwise.
630 test_must_be_empty() {
631 if test -s "$1"
632 then
633 echo "'$1' is not empty, it contains:"
634 cat "$1"
635 return 1
639 # Public: Schedule cleanup commands to be run unconditionally at the end of a
640 # test.
642 # If some cleanup command fails, the test will not pass. With --immediate, no
643 # cleanup is done to help diagnose what went wrong.
645 # This is one of the prefix functions to be used inside test_expect_success or
646 # test_expect_failure.
648 # $1.. - Commands to prepend to the list of cleanup commands.
650 # Examples
652 # test_expect_success 'test core.capslock' '
653 # git config core.capslock true &&
654 # test_when_finished "git config --unset core.capslock" &&
655 # do_something
658 # Returns the exit code of the last cleanup command executed.
659 test_when_finished() {
660 test_cleanup="{ $*
661 } && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup"
664 # Public: Schedule cleanup commands to be run unconditionally when all tests
665 # have run.
667 # This can be used to clean up things like test databases. It is not needed to
668 # clean up temporary files, as test_done already does that.
670 # Examples:
672 # cleanup mysql -e "DROP DATABASE mytest"
674 # Returns the exit code of the last cleanup command executed.
675 final_cleanup=
676 cleanup() {
677 final_cleanup="{ $*
678 } && (exit \"\$eval_ret\"); eval_ret=\$?; $final_cleanup"
681 # Public: Summarize test results and exit with an appropriate error code.
683 # Must be called at the end of each test script.
685 # Can also be used to stop tests early and skip all remaining tests. For this,
686 # set skip_all to a string explaining why the tests were skipped before calling
687 # test_done.
689 # Examples
691 # # Each test script must call test_done at the end.
692 # test_done
694 # # Skip all remaining tests if prerequisite is not set.
695 # if ! test_have_prereq PERL; then
696 # skip_all='skipping perl interface tests, perl not available'
697 # test_done
698 # fi
700 # Returns 0 if all tests passed or 1 if there was a failure.
701 test_done() {
702 EXIT_OK=t
704 if test -z "$HARNESS_ACTIVE"; then
705 test_results_dir="$SHARNESS_TEST_DIRECTORY/test-results"
706 mkdir -p "$test_results_dir"
707 test_results_path="$test_results_dir/$this_test.$$.counts"
709 cat >>"$test_results_path" <<-EOF
710 total $test_count
711 success $test_success
712 fixed $test_fixed
713 broken $test_broken
714 failed $test_failure
719 if test "$test_fixed" != 0; then
720 say_color error "# $test_fixed known breakage(s) vanished; please update test(s)"
722 if test "$test_broken" != 0; then
723 say_color warn "# still have $test_broken known breakage(s)"
725 if test "$test_broken" != 0 || test "$test_fixed" != 0; then
726 test_remaining=$(( $test_count - $test_broken - $test_fixed ))
727 msg="remaining $test_remaining test(s)"
728 else
729 test_remaining=$test_count
730 msg="$test_count test(s)"
733 case "$test_failure" in
735 # Maybe print SKIP message
736 if test -n "$skip_all" && test $test_count -gt 0; then
737 error "Can't use skip_all after running some tests"
739 [ -z "$skip_all" ] || skip_all=" # SKIP $skip_all"
741 if test $test_remaining -gt 0; then
742 say_color pass "# passed all $msg"
744 say "1..$test_count$skip_all"
746 test_eval_ "$final_cleanup"
748 test -d "$remove_trash" &&
749 cd "$(dirname "$remove_trash")" &&
750 rm -rf "$(basename "$remove_trash")"
752 exit 0 ;;
755 say_color error "# failed $test_failure among $msg"
756 say "1..$test_count"
758 exit 1 ;;
760 esac
763 # Public: Root directory containing tests. Tests can override this variable,
764 # e.g. for testing Sharness itself.
765 : ${SHARNESS_TEST_DIRECTORY:=$(pwd)}
766 export SHARNESS_TEST_DIRECTORY
768 # Public: Source directory of test code and sharness library.
769 # This directory may be different from the directory in which tests are
770 # being run.
771 : ${SHARNESS_TEST_SRCDIR:=$(cd $(dirname $0) && pwd)}
772 export SHARNESS_TEST_SRCDIR
774 # Public: Build directory that will be added to PATH. By default, it is set to
775 # the parent directory of SHARNESS_TEST_DIRECTORY.
776 : ${SHARNESS_BUILD_DIRECTORY:="$SHARNESS_TEST_DIRECTORY/.."}
777 PATH="$SHARNESS_BUILD_DIRECTORY:$PATH"
778 export PATH SHARNESS_BUILD_DIRECTORY
780 # Public: Path to test script currently executed.
781 SHARNESS_TEST_FILE="$0"
782 export SHARNESS_TEST_FILE
784 # Prepare test area.
785 SHARNESS_TRASH_DIRECTORY="trash directory.$(basename "$SHARNESS_TEST_FILE" ".$SHARNESS_TEST_EXTENSION")"
786 test -n "$root" && SHARNESS_TRASH_DIRECTORY="$root/$SHARNESS_TRASH_DIRECTORY"
787 case "$SHARNESS_TRASH_DIRECTORY" in
788 /*) ;; # absolute path is good
789 *) SHARNESS_TRASH_DIRECTORY="$SHARNESS_TEST_DIRECTORY/$SHARNESS_TRASH_DIRECTORY" ;;
790 esac
791 test "$debug" = "t" || remove_trash="$SHARNESS_TRASH_DIRECTORY"
792 rm -rf "$SHARNESS_TRASH_DIRECTORY" || {
793 EXIT_OK=t
794 echo >&5 "FATAL: Cannot prepare test area"
795 exit 1
800 # Load any extensions in $srcdir/sharness.d/*.sh
802 if test -d "${SHARNESS_TEST_SRCDIR}/sharness.d"
803 then
804 for file in "${SHARNESS_TEST_SRCDIR}"/sharness.d/*.sh
806 # Ensure glob was not an empty match:
807 test -e "${file}" || break
809 if test -n "$debug"
810 then
811 echo >&5 "sharness: loading extensions from ${file}"
813 . "${file}"
814 if test $? != 0
815 then
816 echo >&5 "sharness: Error loading ${file}. Aborting."
817 exit 1
819 done
822 # Public: Empty trash directory, the test area, provided for each test. The HOME
823 # variable is set to that directory too.
824 export SHARNESS_TRASH_DIRECTORY
826 HOME="$SHARNESS_TRASH_DIRECTORY"
827 export HOME
829 mkdir -p "$SHARNESS_TRASH_DIRECTORY" || exit 1
830 # Use -P to resolve symlinks in our working directory so that the cwd
831 # in subprocesses like git equals our $PWD (for pathname comparisons).
832 cd -P "$SHARNESS_TRASH_DIRECTORY" || exit 1
834 this_test=${SHARNESS_TEST_FILE##*/}
835 this_test=${this_test%.$SHARNESS_TEST_EXTENSION}
836 for skp in $SKIP_TESTS; do
837 case "$this_test" in
838 $skp)
839 say_color info >&3 "skipping test $this_test altogether"
840 skip_all="skip all tests in $this_test"
841 test_done
842 esac
843 done
845 test -n "$TEST_LONG" && test_set_prereq EXPENSIVE
846 test -n "$TEST_INTERACTIVE" && test_set_prereq INTERACTIVE
848 # Make sure this script ends with code 0
851 # vi: set ts=4 sw=4 noet :