d2/e2etests/regression_test.go

646 lines
8 KiB
Go
Raw Normal View History

package e2etests
import (
"testing"
)
func testRegression(t *testing.T) {
2022-12-05 19:10:45 +00:00
tcs := []testCase{
2023-02-27 20:56:04 +00:00
{
// https://github.com/terrastruct/d2/issues/919
name: "hex-fill",
script: `x: {
style.fill: "#0D32B2"
}
`,
},
2022-12-05 19:10:45 +00:00
{
name: "dagre_special_ids",
2022-12-05 19:40:21 +00:00
script: `
ninety\nnine
eighty\reight
seventy\r\nseven
a\\yode -> there
a\\"ode -> there
a\\node -> there
2022-12-05 22:51:01 +00:00
`,
},
{
name: "empty_sequence",
script: `
A: hello {
shape: sequence_diagram
}
B: goodbye {
shape: sequence_diagram
}
2022-12-06 22:19:17 +00:00
A->B`,
2023-02-24 07:15:01 +00:00
},
{
name: "undeclared_nested_sequence",
script: `shape: sequence_diagram
group.nested: {
a -> b
}
`,
expErr: "no actors declared in sequence diagram",
2023-02-24 01:20:15 +00:00
},
{
name: "class_font_style_sequence",
script: `shape: sequence_diagram
a: {
shape: class
style: {
font-color: red
}
}
`,
},
2023-02-24 01:20:15 +00:00
{
name: "nested_steps",
script: `a: {
a: {
shape: step
}
b: {
shape: step
}
a -> b
}
c: {
shape: step
}
d: {
shape: step
}
c -> d
`,
},
{
2022-12-06 22:19:17 +00:00
name: "sequence_diagram_span_cover",
script: `shape: sequence_diagram
b.1 -> b.1
b.1 -> b.1`,
2022-12-12 00:28:30 +00:00
}, {
name: "sequence_diagram_no_message",
script: `shape: sequence_diagram
a: A
b: B`,
2022-12-05 19:10:45 +00:00
},
2022-12-19 04:03:07 +00:00
{
name: "sequence_diagram_name_crash",
script: `foo: {
shape: sequence_diagram
a -> b
}
foobar: {
shape: sequence_diagram
c -> d
}
foo -> foobar`,
},
2022-12-18 01:46:52 +00:00
{
name: "sql_table_overflow",
script: `
table: sql_table_overflow {
shape: sql_table
short: loooooooooooooooooooong
loooooooooooooooooooong: short
}
table_constrained: sql_table_constrained_overflow {
shape: sql_table
short: loooooooooooooooooooong {
constraint: unique
}
loooooooooooooooooooong: short {
constraint: foreign_key
}
}
2022-12-20 20:54:24 +00:00
`,
},
{
name: "elk_alignment",
script: `
direction: down
build_workflow: lambda-build.yaml {
push: Push to main branch {
style.font-size: 25
}
GHA: GitHub Actions {
style.font-size: 25
}
S3.style.font-size: 25
Terraform.style.font-size: 25
AWS.style.font-size: 25
push -> GHA: Triggers {
style.font-size: 20
}
GHA -> S3: Builds zip and pushes it {
style.font-size: 20
}
S3 <-> Terraform: Pulls zip to deploy {
style.font-size: 20
}
Terraform -> AWS: Changes live lambdas {
style.font-size: 20
}
}
deploy_workflow: lambda-deploy.yaml {
manual: Manual Trigger {
style.font-size: 25
}
GHA: GitHub Actions {
style.font-size: 25
}
AWS.style.font-size: 25
Manual -> GHA: Launches {
style.font-size: 20
}
GHA -> AWS: Builds zip\npushes them to S3.\n\nDeploys lambdas\nusing Terraform {
style.font-size: 20
}
}
apollo_workflow: apollo-deploy.yaml {
apollo: Apollo Repo {
style.font-size: 25
}
GHA: GitHub Actions {
style.font-size: 25
}
AWS.style.font-size: 25
apollo -> GHA: Triggered manually/push to master test test test test test test test {
style.font-size: 20
}
GHA -> AWS: test {
style.font-size: 20
}
}
2022-12-20 23:50:06 +00:00
`,
},
{
name: "dagre_edge_label_spacing",
script: `direction: right
build_workflow: lambda-build.yaml {
push: Push to main branch {
style.font-size: 25
}
GHA: GitHub Actions {
style.font-size: 25
}
S3.style.font-size: 25
Terraform.style.font-size: 25
AWS.style.font-size: 25
push -> GHA: Triggers
GHA -> S3: Builds zip & pushes it
S3 <-> Terraform: Pulls zip to deploy
Terraform -> AWS: Changes the live lambdas
}
2022-12-24 20:45:12 +00:00
`,
},
{
name: "query_param_escape",
script: `my network: {
icon: https://icons.terrastruct.com/infra/019-network.svg?fuga=1&hoge
}
2022-12-24 21:34:23 +00:00
`,
},
{
name: "elk_order",
script: `queue: {
shape: queue
label: ''
M0
M1
M2
M3
M4
M5
M6
}
m0_desc: |md
Oldest message
|
m0_desc -> queue.M0
m2_desc: |md
Offset
|
m2_desc -> queue.M2
m5_desc: |md
Last message
|
m5_desc -> queue.M5
m6_desc: |md
Next message will be\
inserted here
|
m6_desc -> queue.M6
`,
},
{
name: "unnamed_class_table_code",
script: `
class -> users -> code
class: "" {
shape: class
-num: int
-timeout: int
-pid
+getStatus(): Enum
+getJobs(): "Job[]"
+setTimeout(seconds int)
}
users: "" {
shape: sql_table
id: int
name: string
email: string
password: string
last_login: datetime
}
code: |go
a := 5
b := a + 7
fmt.Printf("%d", b)
|
2022-12-29 07:46:29 +00:00
`,
},
{
name: "elk_img_empty_label_panic",
script: `
img: {
label: ""
shape: image
icon: https://icons.terrastruct.com/infra/019-network.svg
}
ico: {
label: ""
icon: https://icons.terrastruct.com/infra/019-network.svg
}
`,
},
{
name: "only_header_class_table",
script: `
class: RefreshAuthorizationPolicyProtocolServerSideTranslatorProtocolBuffer {
shape: class
}
table: RefreshAuthorizationPolicyCache {
shape: sql_table
}
table with short col: RefreshAuthorizationPolicyCache {
shape: sql_table
ok
}
class -> table -> table with short col
2023-01-06 20:18:26 +00:00
`,
},
{
name: "overlapping-edge-label",
script: `k8s: Kubernetes
k8s.m1: k8s-master1
k8s.m2: k8s-master2
k8s.m3: k8s-master3
k8s.w1: k8s-worker1
k8s.w2: k8s-worker2
k8s.w3: k8s-worker3
osvc: opensvc
osvc.vm1: VM1
osvc.vm2: VM2
k8s -> osvc: keycloak
k8s -> osvc: heptapod
k8s -> osvc: harbor
k8s -> osvc: vault
2023-01-12 07:53:02 +00:00
`,
},
{
name: "no-lexer",
script: `x: |d2
x -> y
|
`,
},
{
name: "dagre_broken_arrowhead",
script: `
a.b -> a.c: "line 1\nline 2\nline 3\nline 4" {
style: {
font-color: red
stroke: red
}
target-arrowhead: {
shape: diamond
}
}
a.1 -> a.c
a.2 <-> a.c
a.c {
style.stroke: white
d
}
`,
},
{
name: "code_leading_trailing_newlines",
script: `
hello world: |python
# 2 leading, 2 trailing
def hello():
print "world"
|
no trailing: |python
# 2 leading
def hello():
print "world"
|
no leading: |python
# 2 trailing
def hello():
print "world"
|
2022-12-18 01:46:52 +00:00
`,
},
2023-01-14 04:51:11 +00:00
{
name: "md_h1_li_li",
script: mdTestScript(`
# hey
- they
1. they
`),
},
{
name: "elk_loop_panic",
script: `x: {
a
b
}
x.a -> x.a
2023-01-19 08:26:00 +00:00
`,
},
{
name: "opacity-on-label",
script: `x.style.opacity: 0.4
y: |md
linux: because a PC is a terrible thing to waste
| {
style.opacity: 0.4
}
2023-01-19 08:46:30 +00:00
x -> a: {
label: You don't have to know how the computer works,\njust how to work the computer.
style.opacity: 0.4
}
`,
},
{
name: "sequence_diagram_self_edge_group_overlap",
script: `
shape: sequence_diagram
a: A
b: B
c: C
group 1: {
a -> a
}
group 2: {
a -> b
}
group 3: {
a -> a.a
}
group 4: {
a.a -> b
}
group 5: {
b -> b
b -> b
}
group 6: {
b -> a
}
group 7: {
a -> a
}
group 8: {
a -> a
}
a -> a
group 9: {
a -> a
}
a -> a
b -> c
group 10: {
c -> c
}
b -> c
group 11: {
c -> c
}
b -> c
`,
},
2023-02-04 02:27:38 +00:00
{
name: "empty_class_height",
2023-03-28 02:19:12 +00:00
script: `A: {
style.font: mono
2023-02-04 02:27:38 +00:00
}
`,
},
2023-02-05 09:56:43 +00:00
{
name: "just-width",
script: `x: "teamwork: having someone to blame" {
width: 100
}
`,
},
2023-02-05 09:38:50 +00:00
{
name: "sequence-panic",
script: `
shape: sequence_diagram
2023-02-08 03:53:39 +00:00
a
2023-02-05 09:38:50 +00:00
2023-02-08 03:53:39 +00:00
group: {
inner_group: {
a -> b
}
2023-02-05 09:38:50 +00:00
}
`,
2023-02-08 04:47:12 +00:00
expErr: "could not find center of b. Is it declared as an actor?",
2023-02-05 09:38:50 +00:00
},
2023-02-12 20:01:33 +00:00
{
name: "ampersand-escape",
script: `h&y: & {
tooltip: beans & rice
}
&foo
&&bar
2023-02-14 19:34:18 +00:00
`,
},
{
name: "dagre-disconnect",
script: `a: {
k.t -> f.i
f.g -> _.s.n
}
k
k.s <-> u.o
h.m.s -> a.f.g
a.f.j -> u.s.j
u: {
c -> _.s.z.c
}
s: {
n: {
style.stroke: red
f
}
}
2023-02-14 19:35:00 +00:00
s.n -> y.r: {style.stroke-width: 8; style.stroke: red}
2023-02-14 19:34:18 +00:00
y.r -> a.g.i: 1\n2\n3\n4
2023-02-22 21:21:29 +00:00
`,
},
{
name: "sequence-note-escape-group",
script: `shape: sequence_diagram
a
b
"04:20,11:20": {
"loop through each table": {
a."start_time = datetime.datetime.now"
a -> b
}
}
2023-02-12 20:01:33 +00:00
`,
},
2023-02-27 18:31:33 +00:00
loadFromFile(t, "unconnected"),
2023-02-27 22:53:45 +00:00
{
name: "straight_hierarchy_container_direction_right",
script: `
direction: right
a
c
b
l1: {
b
a
c
}
b -> l1.b
a -> l1.a
c -> l1.c
l2c1: {
a
}
l1.a -> l2c1.a
l2c3: {
c
}
l1.c -> l2c3.c
l2c2: {
b
}
l1.b -> l2c2.b
l3c1: {
a
b
}
l2c1.a -> l3c1.a
l2c2.b -> l3c1.b
l3c2: {
c
}
l2c3.c -> l3c2.c
l4: {
c1: {
a
}
c2: {
b
}
c3: {
c
}
}
l3c1.a -> l4.c1.a
l3c1.b -> l4.c2.b
l3c2.c -> l4.c3.c`,
},
{
name: "link_with_ampersand",
script: `a.link: https://calendar.google.com/calendar/u/0/r?tab=mc&pli=1`,
},
2022-12-05 19:10:45 +00:00
}
runa(t, tcs)
}