72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package dataext
|
|
|
|
import (
|
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
|
"gogs.mikescher.com/BlackForestBytes/goext/tst"
|
|
"testing"
|
|
)
|
|
|
|
func TestObjectMerge(t *testing.T) {
|
|
type A struct {
|
|
Field1 *int
|
|
Field2 *string
|
|
Field3 *float64
|
|
Field4 *bool
|
|
OnlyA int64
|
|
DiffType int
|
|
}
|
|
type B struct {
|
|
Field1 *int
|
|
Field2 *string
|
|
Field3 *float64
|
|
Field4 *bool
|
|
OnlyB int64
|
|
DiffType string
|
|
}
|
|
|
|
valueA := A{
|
|
Field1: nil,
|
|
Field2: langext.Ptr("99"),
|
|
Field3: langext.Ptr(12.2),
|
|
Field4: nil,
|
|
OnlyA: 1,
|
|
DiffType: 2,
|
|
}
|
|
|
|
valueB := B{
|
|
Field1: langext.Ptr(12),
|
|
Field2: nil,
|
|
Field3: langext.Ptr(13.2),
|
|
Field4: nil,
|
|
OnlyB: 1,
|
|
DiffType: "X",
|
|
}
|
|
|
|
valueMerge := ObjectMerge(valueA, valueB)
|
|
|
|
tst.AssertIdentPtrEqual(t, "Field1", valueMerge.Field1, valueB.Field1)
|
|
tst.AssertIdentPtrEqual(t, "Field2", valueMerge.Field2, valueA.Field2)
|
|
tst.AssertIdentPtrEqual(t, "Field3", valueMerge.Field3, valueB.Field3)
|
|
tst.AssertIdentPtrEqual(t, "Field4", valueMerge.Field4, nil)
|
|
|
|
}
|
|
|
|
func assertPtrEqual[T1 comparable](t *testing.T, ident string, actual *T1, expected *T1) {
|
|
if actual == nil && expected == nil {
|
|
return
|
|
}
|
|
if actual != nil && expected != nil {
|
|
if *actual != *expected {
|
|
t.Errorf("[%s] values differ: Actual: '%v', Expected: '%v'", ident, *actual, *expected)
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
if actual == nil && expected != nil {
|
|
t.Errorf("[%s] values differ: Actual: nil, Expected: not-nil", ident)
|
|
}
|
|
if actual != nil && expected == nil {
|
|
t.Errorf("[%s] values differ: Actual: not-nil, Expected: nil", ident)
|
|
}
|
|
}
|