From 13de56ecbeb7e0f04d45af2d8b90378f828b67b3 Mon Sep 17 00:00:00 2001 From: baw-benji <35989742+baw-benji@users.noreply.github.com> Date: Fri, 15 Jul 2022 12:40:18 +0200 Subject: [PATCH] graphviz: Highlight current state instead of drawing it first (#84) We want to have a stable graph output. Signed-off-by: Benjamin Imhof --- graphviz_visualizer.go | 30 ++++++++++++------------------ graphviz_visualizer_test.go | 2 +- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/graphviz_visualizer.go b/graphviz_visualizer.go index 5a5b641..a938a9b 100644 --- a/graphviz_visualizer.go +++ b/graphviz_visualizer.go @@ -14,8 +14,8 @@ func Visualize(fsm *FSM) string { sortedStateKeys, _ := getSortedStates(fsm.transitions) writeHeaderLine(&buf) - writeTransitions(&buf, fsm.current, sortedEKeys, fsm.transitions) - writeStates(&buf, sortedStateKeys) + writeTransitions(&buf, sortedEKeys, fsm.transitions) + writeStates(&buf, fsm.current, sortedStateKeys) writeFooter(&buf) return buf.String() @@ -26,29 +26,23 @@ func writeHeaderLine(buf *bytes.Buffer) { buf.WriteString("\n") } -func writeTransitions(buf *bytes.Buffer, current string, sortedEKeys []eKey, transitions map[eKey]string) { - // make sure the current state is at top +func writeTransitions(buf *bytes.Buffer, sortedEKeys []eKey, transitions map[eKey]string) { for _, k := range sortedEKeys { - if k.src == current { - v := transitions[k] - buf.WriteString(fmt.Sprintf(` "%s" -> "%s" [ label = "%s" ];`, k.src, v, k.event)) - buf.WriteString("\n") - } - } - for _, k := range sortedEKeys { - if k.src != current { - v := transitions[k] - buf.WriteString(fmt.Sprintf(` "%s" -> "%s" [ label = "%s" ];`, k.src, v, k.event)) - buf.WriteString("\n") - } + v := transitions[k] + buf.WriteString(fmt.Sprintf(` "%s" -> "%s" [ label = "%s" ];`, k.src, v, k.event)) + buf.WriteString("\n") } buf.WriteString("\n") } -func writeStates(buf *bytes.Buffer, sortedStateKeys []string) { +func writeStates(buf *bytes.Buffer, current string, sortedStateKeys []string) { for _, k := range sortedStateKeys { - buf.WriteString(fmt.Sprintf(` "%s";`, k)) + if k == current { + buf.WriteString(fmt.Sprintf(` "%s" [color = "red"];`, k)) + } else { + buf.WriteString(fmt.Sprintf(` "%s";`, k)) + } buf.WriteString("\n") } } diff --git a/graphviz_visualizer_test.go b/graphviz_visualizer_test.go index b28c476..74cecf0 100644 --- a/graphviz_visualizer_test.go +++ b/graphviz_visualizer_test.go @@ -24,7 +24,7 @@ digraph fsm { "intermediate" -> "closed" [ label = "part-close" ]; "open" -> "closed" [ label = "close" ]; - "closed"; + "closed" [color = "red"]; "intermediate"; "open"; }`