#!/usr/bin/env bash # Builds all three modules and runs every example, writing real output to # docs/output/-.txt. The before/after pairs share a class name so # the outputs can be diffed directly: # # diff docs/output/before-S07DefaultsThatFlipped.txt \ # docs/output/after-S07DefaultsThatFlipped.txt set -u cd "$(dirname "$0")" mvn -B -q clean compile || { echo "compile failed"; exit 1; } mkdir -p docs/output FAILED=0 run_module() { local module="$1" prefix="$2" pkg="$3" local cp cp="$module/target/classes:$(cd "$module" && mvn -B -q dependency:build-classpath \ -Dmdep.outputFile=/dev/stdout -DincludeScope=runtime 2>/dev/null | tail -1)" for f in $(find "$module/src/main/java" -name '*.java' | sort); do grep -q 'public static void main' "$f" || continue local short class short=$(basename "$f" .java) class="$pkg.$short" printf '%-14s %-32s' "$prefix" "$short" if java -cp "$cp" "$class" > "docs/output/$prefix-$short.txt" 2>&1; then echo "ok" else echo "FAILED"; FAILED=1 fi done } run_module jackson2-before before com.ankurm.migration.before run_module jackson3-after after com.ankurm.migration.after run_module coexistence coexistence com.ankurm.migration.coexist echo echo "--- before/after diffs ---" for after in docs/output/after-*.txt; do short=$(basename "$after" .txt); short=${short#after-} before="docs/output/before-$short.txt" [ -f "$before" ] || continue if diff -q "$before" "$after" >/dev/null; then echo " $short: identical output" else echo " $short: differs (expected — that is the migration surface)" fi done echo if [ "$FAILED" -eq 0 ]; then echo "All examples ran successfully."; else echo "Some examples failed."; fi exit $FAILED