78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
|
|
package d2ir_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"oss.terrastruct.com/d2/d2ast"
|
||
|
|
"oss.terrastruct.com/d2/d2ir"
|
||
|
|
"oss.terrastruct.com/d2/internal/assert"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestCopy(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
|
||
|
|
const scalStr = `Those who claim the dead never return to life haven't ever been around.`
|
||
|
|
s := &d2ir.Scalar{
|
||
|
|
parent: nil,
|
||
|
|
Value: d2ast.FlatUnquotedString(scalStr),
|
||
|
|
}
|
||
|
|
a := &d2ir.Array{
|
||
|
|
Parent: nil,
|
||
|
|
Values: []d2ir.Value{
|
||
|
|
&d2ir.Scalar{
|
||
|
|
parent: nil,
|
||
|
|
Value: &d2ast.Boolean{
|
||
|
|
Value: true,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
m2 := &d2ir.Map{
|
||
|
|
Parent: nil,
|
||
|
|
Fields: []*d2ir.Field{
|
||
|
|
{Primary: s},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
const keyStr = `Absence makes the heart grow frantic.`
|
||
|
|
f := &d2ir.Field{
|
||
|
|
Parent: nil,
|
||
|
|
Name: keyStr,
|
||
|
|
|
||
|
|
Primary: s,
|
||
|
|
Composite: a,
|
||
|
|
}
|
||
|
|
e := &d2ir.Edge{
|
||
|
|
Parent: nil,
|
||
|
|
|
||
|
|
Primary: s,
|
||
|
|
Map: m2,
|
||
|
|
}
|
||
|
|
m := &d2ir.Map{
|
||
|
|
Parent: nil,
|
||
|
|
|
||
|
|
Fields: []*d2ir.Field{f},
|
||
|
|
Edges: []*d2ir.Edge{e},
|
||
|
|
}
|
||
|
|
|
||
|
|
m = m.Copy(nil).(*d2ir.Map)
|
||
|
|
f.Name = `Many a wife thinks her husband is the world's greatest lover.`
|
||
|
|
|
||
|
|
assert.Equal(t, m, m.Fields[0].Parent)
|
||
|
|
assert.Equal(t, keyStr, m.Fields[0].Name)
|
||
|
|
assert.Equal(t, m.Fields[0], m.Fields[0].Primary.parent)
|
||
|
|
assert.Equal(t, m.Fields[0], m.Fields[0].Composite.(*d2ir.Array).Parent)
|
||
|
|
|
||
|
|
assert.Equal(t,
|
||
|
|
m.Fields[0].Composite,
|
||
|
|
m.Fields[0].Composite.(*d2ir.Array).Values[0].(*d2ir.Scalar).parent,
|
||
|
|
)
|
||
|
|
|
||
|
|
assert.Equal(t, m, m.Edges[0].Parent)
|
||
|
|
assert.Equal(t, m.Edges[0], m.Edges[0].Primary.parent)
|
||
|
|
assert.Equal(t, m.Edges[0], m.Edges[0].Map.Parent)
|
||
|
|
|
||
|
|
assert.Equal(t, m.Edges[0].Map, m.Edges[0].Map.Fields[0].Parent)
|
||
|
|
assert.Equal(t, m.Edges[0].Map.Fields[0], m.Edges[0].Map.Fields[0].Primary.parent)
|
||
|
|
}
|