| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/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
|