github.com/ipld/go-ipld-prime@v0.21.0/datamodel/copy_test.go (about) 1 package datamodel_test 2 3 import ( 4 "testing" 5 6 "github.com/ipld/go-ipld-prime/datamodel" 7 "github.com/ipld/go-ipld-prime/fluent/qp" 8 basic "github.com/ipld/go-ipld-prime/node/basicnode" 9 ) 10 11 var copyTests = []struct { 12 name string 13 na datamodel.NodeBuilder 14 n datamodel.Node 15 err string 16 }{ 17 {name: "Null / Any", na: basic.Prototype.Any.NewBuilder(), n: datamodel.Null}, 18 {name: "Int / Any", na: basic.Prototype.Any.NewBuilder(), n: basic.NewInt(100)}, 19 {name: "Int / Int", na: basic.Prototype.Int.NewBuilder(), n: basic.NewInt(1000)}, 20 {name: "Bool / Any", na: basic.Prototype.Any.NewBuilder(), n: basic.NewBool(true)}, 21 {name: "Bool / Bool", na: basic.Prototype.Bool.NewBuilder(), n: basic.NewBool(false)}, 22 {name: "Float / Any", na: basic.Prototype.Any.NewBuilder(), n: basic.NewFloat(1.1)}, 23 {name: "Float / Float", na: basic.Prototype.Float.NewBuilder(), n: basic.NewFloat(1.2)}, 24 {name: "String / Any", na: basic.Prototype.Any.NewBuilder(), n: basic.NewString("mary had")}, 25 {name: "String / String", na: basic.Prototype.String.NewBuilder(), n: basic.NewString("a little lamb")}, 26 {name: "Bytes / Any", na: basic.Prototype.Any.NewBuilder(), n: basic.NewBytes([]byte("mary had"))}, 27 {name: "Bytes / Bytes", na: basic.Prototype.Bytes.NewBuilder(), n: basic.NewBytes([]byte("a little lamb"))}, 28 {name: "Link / Any", na: basic.Prototype.Any.NewBuilder(), n: basic.NewLink(globalLink)}, 29 {name: "Link / Link", na: basic.Prototype.Link.NewBuilder(), n: basic.NewLink(globalLink2)}, 30 { 31 name: "List / Any", 32 na: basic.Prototype.Any.NewBuilder(), 33 n: qpMust(qp.BuildList(basic.Prototype.Any, -1, func(am datamodel.ListAssembler) { 34 qp.ListEntry(am, qp.Int(7)) 35 qp.ListEntry(am, qp.Int(8)) 36 })), 37 }, 38 { 39 name: "List / List", 40 na: basic.Prototype.List.NewBuilder(), 41 n: qpMust(qp.BuildList(basic.Prototype.List, -1, func(am datamodel.ListAssembler) { 42 qp.ListEntry(am, qp.String("yep")) 43 qp.ListEntry(am, qp.Int(8)) 44 qp.ListEntry(am, qp.String("nope")) 45 })), 46 }, 47 { 48 name: "Map / Any", 49 na: basic.Prototype.Any.NewBuilder(), 50 n: qpMust(qp.BuildMap(basic.Prototype.Any, -1, func(am datamodel.MapAssembler) { 51 qp.MapEntry(am, "foo", qp.Int(7)) 52 qp.MapEntry(am, "bar", qp.Int(8)) 53 })), 54 }, 55 { 56 name: "Map / Map", 57 na: basic.Prototype.Map.NewBuilder(), 58 n: qpMust(qp.BuildMap(basic.Prototype.Map, -1, func(am datamodel.MapAssembler) { 59 qp.MapEntry(am, "foo", qp.Int(7)) 60 qp.MapEntry(am, "bar", qp.Int(8)) 61 qp.MapEntry(am, "bang", qp.Link(globalLink)) 62 })), 63 }, 64 {name: "nil", na: basic.Prototype.Any.NewBuilder(), n: nil, err: "cannot copy a nil node"}, 65 {name: "absent", na: basic.Prototype.Any.NewBuilder(), n: datamodel.Absent, err: "copying an absent node makes no sense"}, 66 } 67 68 func TestCopy(t *testing.T) { 69 for _, tt := range copyTests { 70 tt := tt 71 t.Run(tt.name, func(t *testing.T) { 72 t.Parallel() 73 err := datamodel.Copy(tt.n, tt.na) 74 if err != nil { 75 if tt.err != "" { 76 if err.Error() != tt.err { 77 t.Fatalf("expected error %q, got %q", tt.err, err.Error()) 78 } 79 } else { 80 t.Fatal(err) 81 } 82 return 83 } else if tt.err != "" { 84 t.Fatalf("expected error %q, got nil", tt.err) 85 return 86 } 87 out := tt.na.Build() 88 if !datamodel.DeepEqual(tt.n, out) { 89 t.Fatalf("deep equal failed") 90 } 91 }) 92 } 93 }