Files
renamer/scripts/smoke-test-regex.sh
2025-10-31 10:12:02 +08:00

76 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BIN=(go run)
TMP_DIR="$(mktemp -d)"
WORK_DIR="$TMP_DIR/workspace"
PREVIEW_LOG=""
SCOPE_LOG=""
APPLY_LOG=""
UNDO_LOG=""
cleanup() {
rm -rf "$TMP_DIR"
for log in "$PREVIEW_LOG" "$SCOPE_LOG" "$APPLY_LOG" "$UNDO_LOG"; do
[[ -n "${log:-}" ]] && rm -f "$log"
done
}
trap cleanup EXIT
mkdir -p "$WORK_DIR" "$WORK_DIR/artifacts"
# Seed workspace with fixtures referenced in quickstart docs.
cp -R "$ROOT_DIR/tests/fixtures/regex/baseline/." "$WORK_DIR/"
cp "$ROOT_DIR/tests/fixtures/regex/mixed/feature-demo_2025-10-01.txt" "$WORK_DIR/"
cp "$ROOT_DIR/tests/fixtures/regex/mixed/build_101_release.tar.gz" "$WORK_DIR/artifacts/build_101_vrelease.tar.gz"
cp "$ROOT_DIR/tests/fixtures/regex/mixed/build_102_hotfix.tar.gz" "$WORK_DIR/artifacts/build_102_vhotfix.tar.gz"
mkdir -p "$WORK_DIR/artifacts/build_103_varchive"
printf 'Quarterly summary\n' >"$WORK_DIR/2025-01_report.txt"
PREVIEW_LOG="$(mktemp)"
SCOPE_LOG="$(mktemp)"
APPLY_LOG="$(mktemp)"
UNDO_LOG="$(mktemp)"
run_cli() {
local log="$1"
shift
"${BIN[@]}" "$ROOT_DIR/main.go" "$@" >"$log"
cat "$log"
}
echo "Quickstart #1: Preview captured group substitution (--dry-run)."
run_cli "$PREVIEW_LOG" regex '^(\\d{4})-(\\d{2})_(.*)$' 'Q@2-@1_@3' --dry-run --path "$WORK_DIR"
if ! grep -q 'Q01-2025_report.txt' "$PREVIEW_LOG"; then
echo "Expected preview rename for 2025-01_report.txt missing." >&2
exit 1
fi
echo
echo "Quickstart #2: Scope-limited preview with extensions and directories."
run_cli "$SCOPE_LOG" regex '^(build)_(\\d+)_v(.*)$' 'release-@2-@1-v@3' --dry-run --path "$WORK_DIR/artifacts" --extensions '.zip|.tar.gz' --include-dirs
if ! grep -q 'release-101-build-vrelease.tar.gz' "$SCOPE_LOG"; then
echo "Expected scoped preview for build artifacts missing." >&2
exit 1
fi
echo
echo "Quickstart #3: Apply regex rename non-interactively (--yes)."
run_cli "$APPLY_LOG" regex '^(feature)-(.*)$' '@2-@1' --yes --path "$WORK_DIR"
if ! [[ -f "$WORK_DIR/demo_2025-10-01-feature.txt" ]]; then
echo "Applied rename did not produce demo_2025-10-01-feature.txt." >&2
exit 1
fi
echo
echo "Quickstart #4: Undo the latest regex batch."
run_cli "$UNDO_LOG" undo --path "$WORK_DIR"
if ! [[ -f "$WORK_DIR/feature-demo_2025-10-01.txt" ]]; then
echo "Undo did not restore feature-demo_2025-10-01.txt." >&2
exit 1
fi
echo
echo "Regex smoke test completed successfully."