SCXML to statechart.go Test Translator
When to Use
- •User requests SCXML test translation, conformance, or statechart validation.
- •Analyze pkg/scxml_test_suite/[num]/test*.txml → mimic in new
statechart_scxml_[category]_test.go.
Workflow
- •
Gather Context:
- •Glob
pkg/scxml_test_suite/**/test*.txml - •Read target .txml +
statechart.go+statechart_test.go(patterns). - •Grep .txml for
<state>,<transition event=,<onentry><raise>,conf:pass.
- •Glob
- •
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:passstateAssert rt.IsInState(\"pass\") - •
Generate Test:
- •Table-driven:
[]struct{Name string; Root *State; Events []Event; WantPass bool} - •New file:
statechart_scxml_tests.go(no existing edits). - •Helpers:
buildSCXMLTree(map[string]string)func.
- •Table-driven:
- •
Validate:
- •Bash
go test ./... -v -race - •Skip unsupported (data/invoke):
t.Skip(\"Needs datamodel\") - •Output: Files created, coverage gaps.
- •Bash
Examples
Input: test144.txml (raise FIFO) Output Test:
go
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.