|
|
@@ -0,0 +1,82 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+# Tests for the SDD workspace: scripts/sdd-workspace resolves a self-ignoring
|
|
|
+# working-tree directory for SDD artifacts, and the SDD scripts write into it.
|
|
|
+set -euo pipefail
|
|
|
+
|
|
|
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
+REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
+SDD_SCRIPTS="$REPO_ROOT/skills/subagent-driven-development/scripts"
|
|
|
+
|
|
|
+FAILURES=0
|
|
|
+TEST_ROOT=""
|
|
|
+
|
|
|
+pass() { echo " [PASS] $1"; }
|
|
|
+fail() {
|
|
|
+ echo " [FAIL] $1"
|
|
|
+ FAILURES=$((FAILURES + 1))
|
|
|
+}
|
|
|
+
|
|
|
+cleanup() {
|
|
|
+ if [[ -n "$TEST_ROOT" && -d "$TEST_ROOT" ]]; then
|
|
|
+ rm -rf "$TEST_ROOT"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+main() {
|
|
|
+ echo "=== Test: sdd-workspace ==="
|
|
|
+
|
|
|
+ TEST_ROOT="$(mktemp -d)"
|
|
|
+ trap cleanup EXIT
|
|
|
+
|
|
|
+ # Resolve repo to its physical path so string comparisons match the
|
|
|
+ # helper's output (git rev-parse --show-toplevel resolves symlinks; on
|
|
|
+ # macOS mktemp lives under /var -> /private/var).
|
|
|
+ git init -q -b main "$TEST_ROOT/repo"
|
|
|
+ local repo
|
|
|
+ repo="$(cd "$TEST_ROOT/repo" && git rev-parse --show-toplevel)"
|
|
|
+
|
|
|
+ local dir
|
|
|
+ dir="$(cd "$repo" && "$SDD_SCRIPTS/sdd-workspace")"
|
|
|
+
|
|
|
+ if [[ "$dir" == "$repo/.superpowers/sdd" ]]; then
|
|
|
+ pass "prints <repo-root>/.superpowers/sdd"
|
|
|
+ else
|
|
|
+ fail "prints <repo-root>/.superpowers/sdd"
|
|
|
+ echo " got: $dir"
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [[ -f "$repo/.superpowers/sdd/.gitignore" && "$(cat "$repo/.superpowers/sdd/.gitignore")" == "*" ]]; then
|
|
|
+ pass "self-ignoring .gitignore created with '*'"
|
|
|
+ else
|
|
|
+ fail "self-ignoring .gitignore created with '*'"
|
|
|
+ fi
|
|
|
+
|
|
|
+ printf 'x\n' > "$repo/.superpowers/sdd/artifact.md"
|
|
|
+ local status
|
|
|
+ status="$(cd "$repo" && git status --porcelain)"
|
|
|
+ if [[ -z "$status" ]]; then
|
|
|
+ pass "workspace invisible to git status"
|
|
|
+ else
|
|
|
+ fail "workspace invisible to git status"
|
|
|
+ echo " status: $status"
|
|
|
+ fi
|
|
|
+
|
|
|
+ ( cd "$repo" && git add -A )
|
|
|
+ local staged
|
|
|
+ staged="$(cd "$repo" && git diff --cached --name-only)"
|
|
|
+ if [[ -z "$staged" ]]; then
|
|
|
+ pass "git add -A does not stage the workspace"
|
|
|
+ else
|
|
|
+ fail "git add -A does not stage the workspace"
|
|
|
+ echo " staged: $staged"
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo ""
|
|
|
+ if [[ "$FAILURES" -ne 0 ]]; then
|
|
|
+ echo "FAILED: $FAILURES assertion(s)."
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ echo "PASS"
|
|
|
+}
|
|
|
+
|
|
|
+main "$@"
|