Snippet content copied to clipboard.
Are you sure to delete this snippet? No, don't delete
  1. ARGZERO="$0"
  2. : "${SHARNESS_TEST_DIRECTORY:=$(dirname "$ARGZERO")}"
  3. SHARNESS_TEST_DIRECTORY=$(cd "$SHARNESS_TEST_DIRECTORY" && pwd) || exit 1
  4. export SHARNESS_TEST_DIRECTORY
  5. : "${SHARNESS_TEST_SRCDIR:=$(cd "$(dirname "${BASH_SOURCE-$0}")" && pwd)}"
  6. export SHARNESS_TEST_SRCDIR
  7. : "${SHARNESS_TEST_OUTDIR:=$SHARNESS_TEST_DIRECTORY}"
  8. export SHARNESS_TEST_OUTDIR
  9. while test "$#" -ne 0; do
  10. case "$1" in
  11. -v)
  12. verbose=t; shift ;;
  13. *)
  14. echo "error: unknown test option '$1'" >&2; exit 1 ;;
  15. esac
  16. done
  17. say() {
  18. printf '%s\n' "$*"
  19. }
  20. error() {
  21. say "error: $*"
  22. EXIT_OK=t
  23. exit 1
  24. }
  25. exec 5>&1
  26. exec 6<&0
  27. if test "$verbose" = "t"
  28. then
  29. exec 4>&2 3>&1
  30. else
  31. exec 4>/dev/null 3>/dev/null
  32. fi
  33. SHARNESS_TEST_NB=0
  34. export SHARNESS_TEST_NB
  35. die() {
  36. code=$?
  37. if test -n "$EXIT_OK"; then
  38. exit $code
  39. else
  40. echo >&5 "FATAL: Unexpected exit with code $code"
  41. exit 1
  42. fi
  43. }
  44. EXIT_OK=
  45. trap 'die' EXIT
  46. test_failure=0
  47. test_fixed=0
  48. test_broken=0
  49. test_success=0
  50. test_ok_() {
  51. test_success=$((test_success + 1))
  52. say "ok $SHARNESS_TEST_NB - $*"
  53. }
  54. test_failure_() {
  55. test_failure=$((test_failure + 1))
  56. say "not ok $SHARNESS_TEST_NB - $1"
  57. shift
  58. echo "$@" | sed -e 's/^/# /'
  59. }
  60. test_known_broken_ok_() {
  61. test_fixed=$((test_fixed + 1))
  62. say "ok $SHARNESS_TEST_NB - $* # TODO known breakage vanished"
  63. }
  64. test_known_broken_failure_() {
  65. test_broken=$((test_broken + 1))
  66. say "not ok $SHARNESS_TEST_NB - $* # TODO known breakage"
  67. }
  68. test_eval_() {
  69. eval "$1" </dev/null >&3 2>&4
  70. }
  71. test_run_() {
  72. test_cleanup=:
  73. expecting_failure=$2
  74. test_eval_ "$1"
  75. eval_ret=$?
  76. if test $eval_ret = 0 ||
  77. test -n "$expecting_failure" && test "$test_cleanup" != ":"
  78. then
  79. test_eval_ "$test_cleanup"
  80. fi
  81. if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"; then
  82. echo ""
  83. fi
  84. return "$eval_ret"
  85. }
  86. remove_trash_() {
  87. test -d "$remove_trash" && (
  88. cd "$(dirname "$remove_trash")" &&
  89. rm -rf "$(basename "$remove_trash")"
  90. )
  91. }
  92. test_expect_success() {
  93. SHARNESS_TEST_NB=$((SHARNESS_TEST_NB + 1))
  94. say >&3 "expecting success: $2"
  95. if test_run_ "$2"; then
  96. test_ok_ "$1"
  97. else
  98. test_failure_ "$@"
  99. fi
  100. echo >&3 ""
  101. }
  102. test_expect_failure() {
  103. SHARNESS_TEST_NB=$((SHARNESS_TEST_NB + 1))
  104. say >&3 "checking known breakage: $2"
  105. if test_run_ "$2" expecting_failure; then
  106. test_known_broken_ok_ "$1"
  107. else
  108. test_known_broken_failure_ "$1"
  109. fi
  110. echo >&3 ""
  111. }
  112. test_expect_unstable() {
  113. SHARNESS_TEST_NB=$((SHARNESS_TEST_NB + 1))
  114. say >&3 "checking unstable test: $2"
  115. if test_run_ "$2" unstable; then
  116. test_ok_ "$1"
  117. else
  118. test_known_broken_failure_ "$1"
  119. fi
  120. echo >&3 ""
  121. }
  122. test_done() {
  123. EXIT_OK=t
  124. if test "$test_fixed" != 0; then
  125. say "# $test_fixed known breakage(s) vanished; please update test(s)"
  126. fi
  127. if test "$test_broken" != 0; then
  128. say "# still have $test_broken known breakage(s)"
  129. fi
  130. if test "$test_broken" != 0 || test "$test_fixed" != 0; then
  131. test_remaining=$((SHARNESS_TEST_NB - test_broken - test_fixed))
  132. msg="remaining $test_remaining test(s)"
  133. else
  134. test_remaining=$SHARNESS_TEST_NB
  135. msg="$SHARNESS_TEST_NB test(s)"
  136. fi
  137. case "$test_failure" in
  138. 0)
  139. # Maybe print SKIP message
  140. if test "$test_remaining" -gt 0; then
  141. say "# passed all $msg"
  142. fi
  143. say "1..$SHARNESS_TEST_NB"
  144. test_eval_ "$final_cleanup"
  145. remove_trash_
  146. exit 0 ;;
  147. *)
  148. say "# failed $test_failure among $msg"
  149. say "1..$SHARNESS_TEST_NB"
  150. exit 1 ;;
  151. esac
  152. }
  153. : "${SHARNESS_BUILD_DIRECTORY:="$SHARNESS_TEST_DIRECTORY/.."}"
  154. export SHARNESS_BUILD_DIRECTORY
  155. PATH="$SHARNESS_BUILD_DIRECTORY:$PATH"
  156. export PATH
  157. SHARNESS_TEST_FILE="$ARGZERO"
  158. export SHARNESS_TEST_FILE
  159. SHARNESS_TRASH_DIRECTORY="$SHARNESS_TEST_OUTDIR/trash directory.$(basename "$SHARNESS_TEST_FILE" ".t")"
  160. remove_trash="$SHARNESS_TRASH_DIRECTORY"
  161. rm -rf "$SHARNESS_TRASH_DIRECTORY" || {
  162. EXIT_OK=t
  163. echo >&5 "FATAL: Cannot prepare test area"
  164. exit 1
  165. }
  166. export SHARNESS_TRASH_DIRECTORY
  167. HOME="$SHARNESS_TRASH_DIRECTORY"
  168. export HOME
  169. mkdir -p "$SHARNESS_TRASH_DIRECTORY" || exit 1
  170. cd -P "$SHARNESS_TRASH_DIRECTORY" || exit 1

Edit this Snippet