package d2ir_test import ( "testing" "oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/d2/d2ast" "oss.terrastruct.com/d2/d2ir" ) 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{ Value: d2ast.FlatUnquotedString(scalStr), } a := &d2ir.Array{ Values: []d2ir.Value{ &d2ir.Scalar{ Value: &d2ast.Boolean{ Value: true, }, }, }, } m2 := &d2ir.Map{ Fields: []*d2ir.Field{ {Primary_: s}, }, } const keyStr = `Absence makes the heart grow frantic.` f := &d2ir.Field{ Name: keyStr, Primary_: s, Composite: a, } e := &d2ir.Edge{ Primary_: s, Map_: m2, } m := &d2ir.Map{ 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()) }