diff --git a/changelog.d/5-internal/cabal-make-c-test-all b/changelog.d/5-internal/cabal-make-c-test-all new file mode 100644 index 0000000000..305c0c8d6c --- /dev/null +++ b/changelog.d/5-internal/cabal-make-c-test-all @@ -0,0 +1 @@ +Fix test runner for global cabal make target diff --git a/hack/bin/cabal-run-tests.sh b/hack/bin/cabal-run-tests.sh index a9b17b4c46..46a9099eca 100755 --- a/hack/bin/cabal-run-tests.sh +++ b/hack/bin/cabal-run-tests.sh @@ -4,15 +4,19 @@ set -euo pipefail DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" TOP_LEVEL="$(cd "$DIR/../.." && pwd)" -pkgName=${1:-Please specify package name} +package=${1:-all} -# This is required because some tests (e.g. golden tests) depend on the path -# where they are run from. -pkgDir=$(find "$TOP_LEVEL" -name "$pkgName.cabal" | grep -v dist-newstyle | head -1 | xargs -n 1 dirname) -cd "$pkgDir" - -test_suites=$(cabal-plan list-bins "$pkgName"':test:*' | awk '{print $2}') - -for test_suite in $test_suites; do +if [[ "$package" == all ]]; then + pattern='*.cabal' +else + pattern="$package.cabal" +fi +for cabal in $(find "$TOP_LEVEL" -name "$pattern" | grep -v dist-newstyle); do + # This is required because some tests (e.g. golden tests) must be run from + # the package root. + cd "$(dirname $cabal)" + package="$(basename ${cabal%.*})" + for test_suite in $(cabal-plan list-bins "$package:test:*" | awk '{print $2}'); do $test_suite "${@:2}" + done done