Newer
Older
dub_jkp / test / run-unittest.sh
  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 [ "$#" -gt 0 ]; then FILTER=$1; else FILTER=".*"; fi
  41.  
  42. for script in $(ls $CURR_DIR/*.sh); do
  43. if [[ ! "$script" =~ $FILTER ]]; then continue; fi
  44. if [ "$script" = "$(gnureadlink ${BASH_SOURCE[0]})" ] || [ "$(basename $script)" = "common.sh" ]; then continue; fi
  45. if [ -e $script.min_frontend ] && [ ! -z "$FRONTEND" ] && [ ${FRONTEND} \< $(cat $script.min_frontend) ]; then continue; fi
  46. log "Running $script..."
  47. DUB=$DUB DC=$DC CURR_DIR="$CURR_DIR" $script || logError "Script failure."
  48. done
  49.  
  50. for pack in $(ls -d $CURR_DIR/*/); do
  51. if [[ ! "$pack" =~ $FILTER ]]; then continue; fi
  52. if [ -e $pack/.min_frontend ] && [ ! -z "$FRONTEND" -a "$FRONTEND" \< $(cat $pack/.min_frontend) ]; then continue; fi
  53.  
  54. # First we build the packages
  55. if [ ! -e $pack/.no_build ] && [ ! -e $pack/.no_build_$DC_BIN ]; then # For sourceLibrary
  56. build=1
  57. if [ -e $pack/.fail_build ]; then
  58. log "Building $pack, expected failure..."
  59. $DUB build --force --root=$pack --compiler=$DC 2>/dev/null && logError "Error: Failure expected, but build passed."
  60. else
  61. log "Building $pack..."
  62. $DUB build --force --root=$pack --compiler=$DC || logError "Build failure."
  63. fi
  64. else
  65. build=0
  66. fi
  67.  
  68. # We run the ones that are supposed to be run
  69. if [ $build -eq 1 ] && [ ! -e $pack/.no_run ] && [ ! -e $pack/.no_run_$DC_BIN ]; then
  70. log "Running $pack..."
  71. $DUB run --force --root=$pack --compiler=$DC || logError "Run failure."
  72. fi
  73.  
  74. # Finally, the unittest part
  75. if [ $build -eq 1 ] && [ ! -e $pack/.no_test ] && [ ! -e $pack/.no_test_$DC_BIN ]; then
  76. log "Testing $pack..."
  77. $DUB test --force --root=$pack --compiler=$DC || logError "Test failure."
  78. fi
  79. done
  80.  
  81. echo
  82. echo 'Testing summary:'
  83. cat $(dirname "${BASH_SOURCE[0]}")/test.log
  84.  
  85. exit ${any_errors:-0}