#!/bin/bash set -e cd "$(dirname "$0")/.." . tools/_util.sh [ -d build/classes ] || { echo "No build/classes - run tools/build.sh first" exit 1 } JUNIT_JAR=$(ls lib/junit/junit-platform-console-standalone-*.jar 2>/dev/null | head -n 1) [ -n "$JUNIT_JAR" ] || { echo "JUnit standalone jar missing from lib/junit/" exit 1 } PROD_CP="$(module_cp $MODULES)" echo "=== Compiling test sources ===" : >"$TMP/tests.txt" for m in $MODULES; do [ -d "$m/src/test/java" ] && find "$m/src/test/java" -name '*.java' >>"$TMP/tests.txt" done if [ ! -s "$TMP/tests.txt" ]; then echo " (no test sources)" exit 0 fi mkdir -p build/test-classes javac --release "$JAVA_RELEASE" -d build/test-classes \ -cp "$PROD_CP$SEP$JUNIT_JAR$SEP$LIBCP" "@$TMP/tests.txt" echo "=== Running tests ===" TEST_CP="$PROD_CP${SEP}build/test-classes" for j in lib/*/*.jar; do case "$j" in *junit-platform-console-standalone* | lib/jacoco/*) continue ;; esac TEST_CP="$TEST_CP$SEP$j" done AGENT_JAR=$(ls lib/mockito/byte-buddy-agent-*.jar 2>/dev/null | head -n 1) AGENT_ARG="" [ -n "$AGENT_JAR" ] && AGENT_ARG="-javaagent:$AGENT_JAR" JACOCO_AGENT=lib/jacoco/jacocoagent.jar JACOCO_CLI=lib/jacoco/jacococli.jar mkdir -p build/coverage [ -n "$AGENT_ARG" ] && AGENT_ARG="$AGENT_ARG " AGENT_ARG="$AGENT_ARG-javaagent:$JACOCO_AGENT=destfile=build/coverage/jacoco.exec" java $AGENT_ARG -jar "$JUNIT_JAR" execute \ --class-path "$TEST_CP" --scan-class-path --details=summary echo "=== Generating coverage report ===" CLASSFILES="" SOURCEFILES="" for m in $MODULES; do CLASSFILES="$CLASSFILES --classfiles build/classes/$m" [ -d "$m/src/main/java" ] && SOURCEFILES="$SOURCEFILES --sourcefiles $m/src/main/java" done java -jar "$JACOCO_CLI" report build/coverage/jacoco.exec \ $CLASSFILES $SOURCEFILES \ --html build/coverage/html --xml build/coverage/jacoco.xml echo " build/coverage/html/index.html"