aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/tests/install-lang.bats42
1 files changed, 42 insertions, 0 deletions
diff --git a/scripts/tests/install-lang.bats b/scripts/tests/install-lang.bats
new file mode 100644
index 0000000..523be99
--- /dev/null
+++ b/scripts/tests/install-lang.bats
@@ -0,0 +1,42 @@
+#!/usr/bin/env bats
+#
+# Tests for scripts/install-lang.sh — install a language ruleset into a project.
+#
+# Strategy: scaffold a fresh git project in a temp dir, run install-lang.sh
+# against it. Canonical source stays the real one (install-lang.sh resolves
+# languages/ and claude-rules/ relative to its own location).
+
+REAL_REPO="$(cd "$(dirname "$BATS_TEST_FILENAME")/../.." && pwd)"
+INSTALL_LANG="$REAL_REPO/scripts/install-lang.sh"
+
+setup() {
+ PROJECT="$(mktemp -d -t install-lang-bats.XXXXXX)"
+ (cd "$PROJECT" && git init -q)
+}
+
+teardown() {
+ rm -rf "$PROJECT"
+}
+
+@test "install-lang elisp: lands the tooling footprint" {
+ run bash "$INSTALL_LANG" elisp "$PROJECT"
+
+ [ "$status" -eq 0 ]
+ [ -d "$PROJECT/.claude/rules" ]
+ [ -d "$PROJECT/githooks" ]
+ [ -f "$PROJECT/CLAUDE.md" ]
+}
+
+@test "install-lang elisp: gitignores the full Claude tooling footprint" {
+ run bash "$INSTALL_LANG" elisp "$PROJECT"
+
+ [ "$status" -eq 0 ]
+ # The whole .claude/, CLAUDE.md, and githooks/ stay out of the project's
+ # git history — Claude tooling is delivered by install/sync, never committed.
+ grep -qxF ".claude/" "$PROJECT/.gitignore"
+ grep -qxF "CLAUDE.md" "$PROJECT/.gitignore"
+ grep -qxF "githooks/" "$PROJECT/.gitignore"
+ # Elisp byte-compile artifacts.
+ grep -qxF "*.elc" "$PROJECT/.gitignore"
+ grep -qxF "*.eln" "$PROJECT/.gitignore"
+}