Merge pull request #886 from alixander/sequence-panic-3

report error if sequence diagram has no actors
This commit is contained in:
Alexander Wang 2023-02-23 23:25:06 -08:00 committed by GitHub
commit e850b24b25
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 4 deletions

View file

@ -3,3 +3,5 @@
#### Improvements 🧹
#### Bugfixes ⛑️
- Error reported when no actors are declared in sequence diagram. [#886](https://github.com/terrastruct/d2/pull/886)

View file

@ -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
}

View file

@ -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 {

View file

@ -30,6 +30,15 @@ B: goodbye {
A->B`,
},
{
name: "undeclared_nested_sequence",
script: `shape: sequence_diagram
group.nested: {
a -> b
}
`,
expErr: "no actors declared in sequence diagram",
},
{
name: "nested_steps",
script: `a: {