From a541a63b717202f88fa4d35af678c1ea8d09fe76 Mon Sep 17 00:00:00 2001 From: fixerdude Date: Wed, 15 Jan 2025 10:25:19 +0100 Subject: [PATCH] Fix graph for exit actions with specific trigger --- graph.go | 16 ++++++++++------ testdata/golden/phoneCall.dot | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/graph.go b/graph.go index 2327771..e9a58cf 100644 --- a/graph.go +++ b/graph.go @@ -64,7 +64,9 @@ func (g *graph) formatActions(sr *stateRepresentation) string { } } for _, act := range sr.ExitActions { - es = append(es, fmt.Sprintf("exit / %s", esc(act.Description.String(), false))) + if act.Trigger == nil { + es = append(es, fmt.Sprintf("exit / %s", esc(act.Description.String(), false))) + } } return strings.Join(es, "\\n") } @@ -98,7 +100,7 @@ func (g *graph) formatOneState(sb *strings.Builder, sr *stateRepresentation, lev } } -func (g *graph) getEntryActions(ab []actionBehaviour, t Trigger) []string { +func (g *graph) getActions(ab []actionBehaviour, t Trigger) []string { var actions []string for _, ea := range ab { if ea.Trigger != nil && *ea.Trigger == t { @@ -135,14 +137,14 @@ func (g *graph) formatAllStateTransitions(sb *strings.Builder, sm *StateMachine, } lines[ln] = append(lines[ln], formatOneTransition(t.Trigger, nil, t.Guard)) case *reentryTriggerBehaviour: - actions := g.getEntryActions(sr.EntryActions, t.Trigger) + actions := g.getActions(sr.EntryActions, t.Trigger) ln := line{sr.State, t.Destination} if _, ok := lines[ln]; !ok { order = append(order, ln) } lines[ln] = append(lines[ln], formatOneTransition(t.Trigger, actions, t.Guard)) case *internalTriggerBehaviour: - actions := g.getEntryActions(sr.EntryActions, t.Trigger) + actions := g.getActions(sr.EntryActions, t.Trigger) ln := line{sr.State, sr.State} if _, ok := lines[ln]; !ok { order = append(order, ln) @@ -153,10 +155,12 @@ func (g *graph) formatAllStateTransitions(sb *strings.Builder, sm *StateMachine, if src == nil { continue } - dest := sm.stateConfig[t.Destination] var actions []string + actions = g.getActions(sr.ExitActions, t.Trigger) + dest := sm.stateConfig[t.Destination] if dest != nil { - actions = g.getEntryActions(dest.EntryActions, t.Trigger) + entryActions := g.getActions(dest.EntryActions, t.Trigger) + actions = append(actions, entryActions...) } var destState State if dest == nil { diff --git a/testdata/golden/phoneCall.dot b/testdata/golden/phoneCall.dot index 5b8cfb6..c939dd9 100644 --- a/testdata/golden/phoneCall.dot +++ b/testdata/golden/phoneCall.dot @@ -7,7 +7,7 @@ digraph { subgraph cluster_Connected { label="Substates of\nConnected"; style="dashed"; - OnHold [label="OnHold|exit / func6"]; + OnHold [label="OnHold"]; } OffHook [label="OffHook"]; Ringing [label="Ringing"]; @@ -15,7 +15,7 @@ digraph { Connected -> Connected [label="MuteMicrophone\nSetVolume\nUnmuteMicrophone"]; Connected -> OnHold [label="PlacedOnHold"]; OffHook -> Ringing [label="CallDialed / func1"]; - OnHold -> PhoneDestroyed [label="PhoneHurledAgainstWall"]; + OnHold -> PhoneDestroyed [label="PhoneHurledAgainstWall / func6"]; OnHold -> Connected [label="TakenOffHold"]; Ringing -> Connected [label="CallConnected"]; init [label="", shape=point];