From 811be06d42f562074f34dde6f067347e18e342b3 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 23 Feb 2023 23:15:01 -0800 Subject: [PATCH 1/3] add test --- e2etests/regression_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/e2etests/regression_test.go b/e2etests/regression_test.go index 6b35a551e..33eecefcb 100644 --- a/e2etests/regression_test.go +++ b/e2etests/regression_test.go @@ -29,6 +29,14 @@ B: goodbye { } A->B`, + }, + { + name: "undeclared_nested_sequence", + script: `shape: sequence_diagram +group.nested: { + a -> b +} +`, }, { name: "nested_steps", From 25f6c84a3a81bed0438b86f708e972f0144a28f8 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 23 Feb 2023 23:17:45 -0800 Subject: [PATCH 2/3] check for no actors in sequence diagram --- d2layouts/d2sequence/layout.go | 7 +++++-- d2layouts/d2sequence/sequence_diagram.go | 9 +++++++-- e2etests/regression_test.go | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/d2layouts/d2sequence/layout.go b/d2layouts/d2sequence/layout.go index 8f2c6e9e3..28755f3e0 100644 --- a/d2layouts/d2sequence/layout.go +++ b/d2layouts/d2sequence/layout.go @@ -106,8 +106,11 @@ func layoutSequenceDiagram(g *d2graph.Graph, obj *d2graph.Object) (*sequenceDiag } } - sd := newSequenceDiagram(obj.ChildrenArray, edges) - err := sd.layout() + sd, err := newSequenceDiagram(obj.ChildrenArray, edges) + if err != nil { + return nil, err + } + err = sd.layout() return sd, err } diff --git a/d2layouts/d2sequence/sequence_diagram.go b/d2layouts/d2sequence/sequence_diagram.go index cac36e113..98129222c 100644 --- a/d2layouts/d2sequence/sequence_diagram.go +++ b/d2layouts/d2sequence/sequence_diagram.go @@ -1,6 +1,7 @@ package d2sequence import ( + "errors" "fmt" "math" "sort" @@ -64,7 +65,7 @@ func getEdgeEarliestLineNum(e *d2graph.Edge) int { return min } -func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *sequenceDiagram { +func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) (*sequenceDiagram, error) { var actors []*d2graph.Object var groups []*d2graph.Object @@ -84,6 +85,10 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se } } + if len(actors) == 0 { + return nil, errors.New("no actors declared in sequence diagram") + } + sd := &sequenceDiagram{ messages: messages, actors: actors, @@ -185,7 +190,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se sd.maxActorHeight += float64(*sd.root.LabelHeight) } - return sd + return sd, nil } func (sd *sequenceDiagram) layout() error { diff --git a/e2etests/regression_test.go b/e2etests/regression_test.go index 33eecefcb..dc2f152bc 100644 --- a/e2etests/regression_test.go +++ b/e2etests/regression_test.go @@ -37,6 +37,7 @@ group.nested: { a -> b } `, + expErr: "no actors declared in sequence diagram", }, { name: "nested_steps", From 633e044049c84fa1a4527a218a2e75d8d4a57201 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 23 Feb 2023 23:18:48 -0800 Subject: [PATCH 3/3] changelog --- ci/release/changelogs/next.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index f3c0d2a77..269c3dcb0 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -3,3 +3,5 @@ #### Improvements 🧹 #### Bugfixes ⛑️ + +- Error reported when no actors are declared in sequence diagram. [#886](https://github.com/terrastruct/d2/pull/886)