From 80d59be42980a7d6fe25d9a755edd12db3edf0b3 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Mon, 5 Dec 2022 14:51:01 -0800 Subject: [PATCH] fix empty sequence panic --- d2layouts/d2sequence/layout.go | 3 + e2etests/regression_test.go | 14 ++ .../dagre/board.exp.json | 3 + .../dagre/sketch.exp.svg | 4 + .../dagre_id_with_newline/elk/board.exp.json | 3 + .../dagre_id_with_newline/elk/sketch.exp.svg | 4 + .../empty_sequence/dagre/board.exp.json | 135 ++++++++++++++++++ .../empty_sequence/dagre/sketch.exp.svg | 28 ++++ .../empty_sequence/elk/board.exp.json | 126 ++++++++++++++++ .../empty_sequence/elk/sketch.exp.svg | 28 ++++ 10 files changed, 348 insertions(+) create mode 100644 e2etests/testdata/regression/empty_sequence/dagre/board.exp.json create mode 100644 e2etests/testdata/regression/empty_sequence/dagre/sketch.exp.svg create mode 100644 e2etests/testdata/regression/empty_sequence/elk/board.exp.json create mode 100644 e2etests/testdata/regression/empty_sequence/elk/sketch.exp.svg diff --git a/d2layouts/d2sequence/layout.go b/d2layouts/d2sequence/layout.go index 6a9498642..7940e13b1 100644 --- a/d2layouts/d2sequence/layout.go +++ b/d2layouts/d2sequence/layout.go @@ -32,6 +32,9 @@ func Layout(ctx context.Context, g *d2graph.Graph, layout func(ctx context.Conte for len(queue) > 0 { obj := queue[0] queue = queue[1:] + if len(obj.ChildrenArray) == 0 { + continue + } if obj.Attributes.Shape.Value != d2target.ShapeSequenceDiagram { queue = append(queue, obj.ChildrenArray...) continue diff --git a/e2etests/regression_test.go b/e2etests/regression_test.go index fc0f6c7c7..8170bc359 100644 --- a/e2etests/regression_test.go +++ b/e2etests/regression_test.go @@ -12,6 +12,20 @@ func testRegression(t *testing.T) { ninety\nnine eighty\reight seventy\r\nseven +`, + }, + { + name: "empty_sequence", + script: ` +A: hello { + shape: sequence_diagram +} + +B: goodbye { + shape: sequence_diagram +} + +A->B `, }, } diff --git a/e2etests/testdata/regression/dagre_id_with_newline/dagre/board.exp.json b/e2etests/testdata/regression/dagre_id_with_newline/dagre/board.exp.json index be2cc9969..83a5c2112 100644 --- a/e2etests/testdata/regression/dagre_id_with_newline/dagre/board.exp.json +++ b/e2etests/testdata/regression/dagre_id_with_newline/dagre/board.exp.json @@ -23,6 +23,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -62,6 +63,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, @@ -101,6 +103,7 @@ "link": "", "icon": null, "iconPosition": "", + "blend": false, "fields": null, "methods": null, "columns": null, diff --git a/e2etests/testdata/regression/dagre_id_with_newline/dagre/sketch.exp.svg b/e2etests/testdata/regression/dagre_id_with_newline/dagre/sketch.exp.svg index eeb82e050..89f85e41d 100644 --- a/e2etests/testdata/regression/dagre_id_with_newline/dagre/sketch.exp.svg +++ b/e2etests/testdata/regression/dagre_id_with_newline/dagre/sketch.exp.svg @@ -12,6 +12,10 @@ width="784" height="342" viewBox="-100 -100 784 342">ninetynineeighty eightseventy sevenninetynineeighty eightseventy sevenhellogoodbye \ No newline at end of file diff --git a/e2etests/testdata/regression/empty_sequence/elk/board.exp.json b/e2etests/testdata/regression/empty_sequence/elk/board.exp.json new file mode 100644 index 000000000..e5224a34d --- /dev/null +++ b/e2etests/testdata/regression/empty_sequence/elk/board.exp.json @@ -0,0 +1,126 @@ +{ + "name": "", + "shapes": [ + { + "id": "A", + "type": "sequence_diagram", + "pos": { + "x": 25, + "y": 12 + }, + "width": 140, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "#FFFFFF", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "hello", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 40, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + }, + { + "id": "B", + "type": "sequence_diagram", + "pos": { + "x": 12, + "y": 238 + }, + "width": 166, + "height": 126, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 0, + "borderRadius": 0, + "fill": "#FFFFFF", + "stroke": "#0D32B2", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": null, + "label": "goodbye", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 66, + "labelHeight": 26, + "labelPosition": "INSIDE_MIDDLE_CENTER", + "zIndex": 0, + "level": 1 + } + ], + "connections": [ + { + "id": "(A -> B)[0]", + "src": "A", + "srcArrow": "none", + "srcLabel": "", + "dst": "B", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 95, + "y": 138 + }, + { + "x": 95, + "y": 238 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/regression/empty_sequence/elk/sketch.exp.svg b/e2etests/testdata/regression/empty_sequence/elk/sketch.exp.svg new file mode 100644 index 000000000..34c98543a --- /dev/null +++ b/e2etests/testdata/regression/empty_sequence/elk/sketch.exp.svg @@ -0,0 +1,28 @@ + +hellogoodbye \ No newline at end of file