mirror of
https://github.com/obra/superpowers.git
synced 2026-07-04 08:39:04 +08:00
Compare commits
2 Commits
fix/render
...
codex/pri-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
79d83245aa | ||
|
|
f0fece9404 |
@@ -13,9 +13,9 @@
|
|||||||
* Requires: graphviz (dot) installed on system
|
* Requires: graphviz (dot) installed on system
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as fs from 'fs';
|
const fs = require('fs');
|
||||||
import * as path from 'path';
|
const path = require('path');
|
||||||
import { execFileSync } from 'child_process';
|
const { execSync } = require('child_process');
|
||||||
|
|
||||||
function extractDotBlocks(markdown) {
|
function extractDotBlocks(markdown) {
|
||||||
const blocks = [];
|
const blocks = [];
|
||||||
@@ -69,7 +69,7 @@ ${bodies.join('\n\n')}
|
|||||||
|
|
||||||
function renderToSvg(dotContent) {
|
function renderToSvg(dotContent) {
|
||||||
try {
|
try {
|
||||||
return execFileSync('dot', ['-Tsvg'], {
|
return execSync('dot -Tsvg', {
|
||||||
input: dotContent,
|
input: dotContent,
|
||||||
encoding: 'utf-8',
|
encoding: 'utf-8',
|
||||||
maxBuffer: 10 * 1024 * 1024
|
maxBuffer: 10 * 1024 * 1024
|
||||||
@@ -107,10 +107,9 @@ function main() {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if dot is available. Run the binary directly rather than probing
|
// Check if dot is available
|
||||||
// with `which`, which is not a command on Windows.
|
|
||||||
try {
|
try {
|
||||||
execFileSync('dot', ['-V'], { stdio: 'ignore' });
|
execSync('which dot', { encoding: 'utf-8' });
|
||||||
} catch {
|
} catch {
|
||||||
console.error('Error: graphviz (dot) not found. Install with:');
|
console.error('Error: graphviz (dot) not found. Install with:');
|
||||||
console.error(' brew install graphviz # macOS');
|
console.error(' brew install graphviz # macOS');
|
||||||
|
|||||||
@@ -1,113 +0,0 @@
|
|||||||
#!/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
|
|
||||||
Reference in New Issue
Block a user