...
1 package d2ir_test
2
3 import (
4 "testing"
5
6 "oss.terrastruct.com/util-go/assert"
7
8 "oss.terrastruct.com/d2/d2ast"
9 "oss.terrastruct.com/d2/d2ir"
10 )
11
12 func TestCopy(t *testing.T) {
13 t.Parallel()
14
15 const scalStr = `Those who claim the dead never return to life haven't ever been around.`
16 s := &d2ir.Scalar{
17 Value: d2ast.FlatUnquotedString(scalStr),
18 }
19 a := &d2ir.Array{
20 Values: []d2ir.Value{
21 &d2ir.Scalar{
22 Value: &d2ast.Boolean{
23 Value: true,
24 },
25 },
26 },
27 }
28 m2 := &d2ir.Map{
29 Fields: []*d2ir.Field{
30 {Primary_: s},
31 },
32 }
33
34 const keyStr = `Absence makes the heart grow frantic.`
35 f := &d2ir.Field{
36 Name: keyStr,
37
38 Primary_: s,
39 Composite: a,
40 }
41 e := &d2ir.Edge{
42 Primary_: s,
43 Map_: m2,
44 }
45 m := &d2ir.Map{
46 Fields: []*d2ir.Field{f},
47 Edges: []*d2ir.Edge{e},
48 }
49
50 m = m.Copy(nil).(*d2ir.Map)
51 f.Name = `Many a wife thinks her husband is the world's greatest lover.`
52
53 assert.Equal(t, m, m.Fields[0].Parent())
54 assert.Equal(t, keyStr, m.Fields[0].Name)
55 assert.Equal(t, m.Fields[0], m.Fields[0].Primary_.Parent())
56 assert.Equal(t, m.Fields[0], m.Fields[0].Composite.(*d2ir.Array).Parent())
57
58 assert.Equal(t,
59 m.Fields[0].Composite,
60 m.Fields[0].Composite.(*d2ir.Array).Values[0].(*d2ir.Scalar).Parent(),
61 )
62
63 assert.Equal(t, m, m.Edges[0].Parent())
64 assert.Equal(t, m.Edges[0], m.Edges[0].Primary_.Parent())
65 assert.Equal(t, m.Edges[0], m.Edges[0].Map_.Parent())
66
67 assert.Equal(t, m.Edges[0].Map_, m.Edges[0].Map_.Fields[0].Parent())
68 assert.Equal(t, m.Edges[0].Map_.Fields[0], m.Edges[0].Map_.Fields[0].Primary_.Parent())
69 }
70
View as plain text