|
|
@@ -0,0 +1,113 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+set -u
|
|
|
+
|
|
|
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
+REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
+SCRIPT_UNDER_TEST="$REPO_ROOT/skills/writing-skills/render-graphs.js"
|
|
|
+NODE_BIN="$(command -v node)"
|
|
|
+
|
|
|
+PASSES=0
|
|
|
+FAILURES=0
|
|
|
+TEST_ROOT="$(mktemp -d)"
|
|
|
+
|
|
|
+cleanup() {
|
|
|
+ rm -rf "$TEST_ROOT"
|
|
|
+}
|
|
|
+trap cleanup EXIT
|
|
|
+
|
|
|
+pass() {
|
|
|
+ echo " [PASS] $1"
|
|
|
+ PASSES=$((PASSES + 1))
|
|
|
+}
|
|
|
+
|
|
|
+fail() {
|
|
|
+ echo " [FAIL] $1"
|
|
|
+ FAILURES=$((FAILURES + 1))
|
|
|
+}
|
|
|
+
|
|
|
+assert_contains() {
|
|
|
+ local haystack="$1"
|
|
|
+ local needle="$2"
|
|
|
+ local description="$3"
|
|
|
+
|
|
|
+ if printf '%s' "$haystack" | grep -Fq -- "$needle"; then
|
|
|
+ pass "$description"
|
|
|
+ else
|
|
|
+ fail "$description"
|
|
|
+ echo " expected to find: $needle"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+assert_not_contains() {
|
|
|
+ local haystack="$1"
|
|
|
+ local needle="$2"
|
|
|
+ local description="$3"
|
|
|
+
|
|
|
+ if printf '%s' "$haystack" | grep -Fq -- "$needle"; then
|
|
|
+ fail "$description"
|
|
|
+ echo " did not expect to find: $needle"
|
|
|
+ else
|
|
|
+ pass "$description"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+fixture="$TEST_ROOT/fixture-skill"
|
|
|
+mkdir -p "$fixture" "$TEST_ROOT/empty-path"
|
|
|
+cat >"$fixture/SKILL.md" <<'EOF'
|
|
|
+---
|
|
|
+name: fixture-skill
|
|
|
+---
|
|
|
+
|
|
|
+# Fixture Skill
|
|
|
+
|
|
|
+```dot
|
|
|
+digraph fixture_graph {
|
|
|
+ start -> end;
|
|
|
+}
|
|
|
+```
|
|
|
+EOF
|
|
|
+
|
|
|
+echo "Writing-skills render-graphs tests"
|
|
|
+
|
|
|
+missing_dot_output="$(PATH="$TEST_ROOT/empty-path" "$NODE_BIN" "$SCRIPT_UNDER_TEST" "$fixture" 2>&1)"
|
|
|
+missing_dot_status=$?
|
|
|
+
|
|
|
+if [[ "$missing_dot_status" -ne 0 ]]; then
|
|
|
+ pass "missing Graphviz exits non-zero"
|
|
|
+else
|
|
|
+ fail "missing Graphviz exits non-zero"
|
|
|
+fi
|
|
|
+assert_contains "$missing_dot_output" "Error: graphviz (dot) not found." "missing Graphviz reports install guidance"
|
|
|
+assert_not_contains "$missing_dot_output" "ReferenceError: require is not defined" "script runs as an ES module"
|
|
|
+
|
|
|
+render_output="$("$NODE_BIN" "$SCRIPT_UNDER_TEST" "$fixture" 2>&1)"
|
|
|
+render_status=$?
|
|
|
+
|
|
|
+if [[ "$render_status" -eq 0 ]]; then
|
|
|
+ pass "fixture diagram renders"
|
|
|
+else
|
|
|
+ fail "fixture diagram renders"
|
|
|
+ printf '%s\n' "$render_output"
|
|
|
+fi
|
|
|
+
|
|
|
+assert_contains "$render_output" "Found 1 diagram(s)" "reports discovered diagram"
|
|
|
+assert_contains "$render_output" "Rendered: fixture_graph.svg" "reports rendered SVG"
|
|
|
+
|
|
|
+if [[ -f "$fixture/diagrams/fixture_graph.svg" ]]; then
|
|
|
+ pass "writes SVG output"
|
|
|
+else
|
|
|
+ fail "writes SVG output"
|
|
|
+fi
|
|
|
+
|
|
|
+if [[ -f "$fixture/diagrams/fixture_graph.svg" ]] && grep -Fq "<svg" "$fixture/diagrams/fixture_graph.svg"; then
|
|
|
+ pass "SVG output has SVG markup"
|
|
|
+else
|
|
|
+ fail "SVG output has SVG markup"
|
|
|
+fi
|
|
|
+
|
|
|
+echo
|
|
|
+echo "Results: $PASSES passed, $FAILURES failed"
|
|
|
+
|
|
|
+if [[ "$FAILURES" -gt 0 ]]; then
|
|
|
+ exit 1
|
|
|
+fi
|