Newer
Older
dub_jkp / test / run-unittest.sh
@WebFreak001 WebFreak001 on 1 Mar 2023 2 KB auto-guess CI frontend version
  1. #!/usr/bin/env bash
  2. set -ueo pipefail
  3.  
  4. . $(dirname "${BASH_SOURCE[0]}")/common.sh
  5.  
  6. > $(dirname "${BASH_SOURCE[0]}")/test.log
  7.  
  8. function log() {
  9. echo -e "\033[0;33m[INFO] $@\033[0m"
  10. echo "[INFO] $@" >> $(dirname "${BASH_SOURCE[0]}")/test.log
  11. }
  12.  
  13. function logError() {
  14. echo -e 1>&2 "\033[0;31m[ERROR] $@\033[0m"
  15. echo "[ERROR] $@" >> $(dirname "${BASH_SOURCE[0]}")/test.log
  16. any_errors=1
  17. }
  18.  
  19. function die() {
  20. logError "$@"
  21. exit 1
  22. }
  23.  
  24. export -f log
  25. export -f die
  26.  
  27. if [ -z ${DUB:-} ]; then
  28. die $LINENO 'Variable $DUB must be defined to run the tests.'
  29. fi
  30.  
  31. if [ -z ${DC:-} ]; then
  32. log '$DC not defined, assuming dmd...'
  33. DC=dmd
  34. fi
  35.  
  36. DC_BIN=$(basename "$DC")
  37. CURR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
  38. FRONTEND="${FRONTEND:-}"
  39.  
  40. if [ -z ${FRONTEND:-} ]; then
  41. if [ "$DC_BIN" == "ldc2" ]; then
  42. FRONTEND=$(ldc2 --version | grep -Po "based on DMD v\K(2\.\d+\.\d)")
  43. fi
  44. if [ "$DC_BIN" == "dmd" ]; then
  45. FRONTEND=$(dmd --version | grep -Po "D Compiler v\K(2\.\d+\.\d)")
  46. fi
  47. fi
  48.  
  49. echo "Running unittests with $DC_BIN (frontend=$FRONTEND)"
  50.  
  51. if [ "$#" -gt 0 ]; then FILTER=$1; else FILTER=".*"; fi
  52.  
  53. for pack in $(ls -d $CURR_DIR/*/); do
  54. if [[ ! "$pack" =~ $FILTER ]]; then continue; fi
  55. if [ -f $pack/.min_frontend ] && [ ! -z "$FRONTEND" -a "$FRONTEND" \< $(cat $pack/.min_frontend) ]; then continue; fi
  56.  
  57. # First we build the packages
  58. if [ ! -e $pack/.no_build ] && [ ! -e $pack/.no_build_$DC_BIN ]; then # For sourceLibrary
  59. build=1
  60. if [ -e $pack/.fail_build ]; then
  61. log "Building $pack, expected failure..."
  62. $DUB build --force --root=$pack --compiler=$DC 2>/dev/null && logError "Error: Failure expected, but build passed."
  63. else
  64. log "Building $pack..."
  65. $DUB build --force --root=$pack --compiler=$DC || logError "Build failure."
  66. fi
  67. else
  68. build=0
  69. fi
  70.  
  71. # We run the ones that are supposed to be run
  72. if [ $build -eq 1 ] && [ ! -e $pack/.no_run ] && [ ! -e $pack/.no_run_$DC_BIN ]; then
  73. log "Running $pack..."
  74. $DUB run --force --root=$pack --compiler=$DC || logError "Run failure."
  75. fi
  76.  
  77. # Finally, the unittest part
  78. if [ $build -eq 1 ] && [ ! -e $pack/.no_test ] && [ ! -e $pack/.no_test_$DC_BIN ]; then
  79. log "Testing $pack..."
  80. $DUB test --force --root=$pack --compiler=$DC || logError "Test failure."
  81. fi
  82. done
  83.  
  84. echo
  85. echo 'Testing summary:'
  86. cat $(dirname "${BASH_SOURCE[0]}")/test.log
  87.  
  88. exit ${any_errors:-0}