test.sh 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/bin/bash
  2. source scripts/runtest.sh
  3. source scripts/portability.sh
  4. TOPDIR="$PWD"
  5. export FILES="$PWD"/tests/files
  6. trap 'kill $(jobs -p) 2>/dev/null; exit 1' INT
  7. export PREFIX=generated/testdir
  8. rm -rf "$PREFIX"
  9. mkdir -p "$PREFIX"/testdir
  10. if [ -z "$TEST_HOST" ]
  11. then
  12. if [ $# -ne 0 ]
  13. then
  14. scripts/single.sh "$@" || exit 1
  15. else
  16. scripts/install.sh --symlink --force || exit 1
  17. fi
  18. fi
  19. export -n PREFIX
  20. cd "$PREFIX"
  21. PATH="$PWD:$PATH"
  22. TESTDIR="$PWD"
  23. export LC_COLLATE=C
  24. [ -f "$TOPDIR/generated/config.h" ] &&
  25. export OPTIONFLAGS=:$($SED -nr 's/^#define CFG_(.*) 1$/\1/p' "$TOPDIR/generated/config.h" | tr '\n' :)
  26. do_test()
  27. {
  28. cd "$TESTDIR" && rm -rf testdir continue && mkdir testdir && cd testdir ||
  29. exit 1
  30. CMDNAME="${1##*/}"
  31. CMDNAME="${CMDNAME%.test}"
  32. if [ -z "$TEST_HOST" ]
  33. then
  34. C="$TESTDIR/$CMDNAME"
  35. [ ! -e "$C" ] && echo "$SHOWSKIP: $CMDNAME disabled" && return
  36. C="$(dirname $(realpath "$C"))/$CMDNAME"
  37. else
  38. C="$(which $CMDNAME 2>/dev/null)"
  39. [ -z "$C" ] && printf '%s\n' "$SHOWSKIP: no $CMDNAME" && return
  40. fi
  41. (. "$1"; cd "$TESTDIR"; echo "$FAILCOUNT" > continue)
  42. cd "$TESTDIR"
  43. [ -e continue ] && FAILCOUNT=$(($(cat continue)+$FAILCOUNT)) || exit 1
  44. }
  45. if [ $# -ne 0 ]
  46. then
  47. for i in "$@"
  48. do
  49. do_test "$TOPDIR"/tests/$i.test
  50. done
  51. else
  52. for i in "$TOPDIR"/tests/*.test
  53. do
  54. [ -z "$TEST_ALL" ] && [ ! -x "$i" ] && continue
  55. do_test "$i"
  56. done
  57. fi
  58. [ $FAILCOUNT -eq 0 ]