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:
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.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.