SKILL.md
SCXML to statechart.go Test Translator
When to Use
- User requests SCXML test translation, conformance, or statechart validation.
- Analyze pkg/scxmltestsuite/[num]/test*.txml → mimic in new
statechartscxml[category]_test.go.
Workflow
- Gather Context:
- Glob pkg/scxmltestsuite/**/test*.txml - Read target .txml + statechart.go + statechart_test.go (patterns). - Grep .txml for <state>, <transition event=, <onentry><raise>, conf:pass.
- Map SCXML → Go State Tree:
| SCXML | Go |
|---|---|
<state id=\"s1\"><transition event=\"e\" target=\"s2\"/></state> |
&State{ID:\"s1\", Transitions:[]*Transition{{Event:\"e\", Target:\"s2\"}}} |
<onentry><raise event=\"foo\"/></onentry> |
OnEntry: func(ctx, ,,,) { rt.SendEvent(ctx, \"foo\") } |
initial=\"s0\" |
Initial: states[\"s0\"] |
conf:pass state |
Assert rt.IsInState(\"pass\") |
- Generate Test:
- Table-driven: []struct{Name string; Root *State; Events []Event; WantPass bool} - New file: statechartscxmltests.go (no existing edits). - Helpers: buildSCXMLTree(map[string]string) func.
- Validate:
- Bash go test ./... -v -race - Skip unsupported (data/invoke): t.Skip(\"Needs datamodel\") - Output: Files created, coverage gaps.
Examples
Input: test144.txml (raise FIFO) Output Test:
t.Run(\"144\", func(t *testing.T) {
// built tree with OnEntry raises
rt.Start(ctx)
require.True(t, rt.IsInState(\"pass\"))
})
Limitations
- Shallow history only.
- No data model/expr (stub guards).
- Batch 10-20 tests/file.
Activate for all SCXML tasks. Combine w/ golang-development skill.