add boilerplate reduction struct field copier
This commit is contained in:
@@ -290,3 +290,95 @@ func TestConverter_flags(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestConverter_FieldRename(t *testing.T) {
|
||||
type WeirdMeta struct {
|
||||
Name string
|
||||
Type string
|
||||
}
|
||||
type NameMeta struct {
|
||||
Name string
|
||||
}
|
||||
type TypeMeta struct {
|
||||
Type string
|
||||
}
|
||||
type A struct {
|
||||
WeirdMeta
|
||||
}
|
||||
type B struct {
|
||||
TypeMeta
|
||||
NameMeta
|
||||
}
|
||||
|
||||
c := NewConverter()
|
||||
err := c.SetStructFieldCopy(WeirdMeta{}, "WeirdMeta", TypeMeta{}, "TypeMeta")
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
err = c.SetStructFieldCopy(WeirdMeta{}, "WeirdMeta", NameMeta{}, "NameMeta")
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
err = c.SetStructFieldCopy(TypeMeta{}, "TypeMeta", WeirdMeta{}, "WeirdMeta")
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
err = c.SetStructFieldCopy(NameMeta{}, "NameMeta", WeirdMeta{}, "WeirdMeta")
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
c.Debug = t
|
||||
|
||||
aVal := &A{
|
||||
WeirdMeta: WeirdMeta{
|
||||
Name: "Foo",
|
||||
Type: "Bar",
|
||||
},
|
||||
}
|
||||
|
||||
bVal := &B{
|
||||
TypeMeta: TypeMeta{"Bar"},
|
||||
NameMeta: NameMeta{"Foo"},
|
||||
}
|
||||
|
||||
table := map[string]struct {
|
||||
from, to, expect interface{}
|
||||
flags FieldMatchingFlags
|
||||
}{
|
||||
"to": {
|
||||
aVal,
|
||||
&B{},
|
||||
bVal,
|
||||
AllowDifferentFieldTypeNames | SourceToDest | IgnoreMissingFields,
|
||||
},
|
||||
"from": {
|
||||
bVal,
|
||||
&A{},
|
||||
aVal,
|
||||
AllowDifferentFieldTypeNames | SourceToDest,
|
||||
},
|
||||
"toDestFirst": {
|
||||
aVal,
|
||||
&B{},
|
||||
bVal,
|
||||
AllowDifferentFieldTypeNames,
|
||||
},
|
||||
"fromDestFirst": {
|
||||
bVal,
|
||||
&A{},
|
||||
aVal,
|
||||
AllowDifferentFieldTypeNames | IgnoreMissingFields,
|
||||
},
|
||||
}
|
||||
|
||||
for name, item := range table {
|
||||
err := c.Convert(item.from, item.to, item.flags, nil)
|
||||
if err != nil {
|
||||
t.Errorf("%v: unexpected error: %v", name, err)
|
||||
continue
|
||||
}
|
||||
if e, a := item.expect, item.to; !reflect.DeepEqual(e, a) {
|
||||
t.Errorf("%v: unexpected diff: %v", name, objDiff(e, a))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user