From 7ce23e43e7b13a7cd7a1bb09f0a8ac5e3fb21aa6 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 30 Jul 2014 19:41:54 -0400 Subject: [PATCH] More verbose error on missing field --- pkg/api/converter.go | 6 +++--- pkg/api/converter_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/pkg/api/converter.go b/pkg/api/converter.go index adf7b7b3541..f82dd772d23 100644 --- a/pkg/api/converter.go +++ b/pkg/api/converter.go @@ -141,11 +141,11 @@ func (c *Converter) convert(sv, dv reflect.Value) error { case reflect.Struct: for i := 0; i < dt.NumField(); i++ { f := dv.Type().Field(i) - df := dv.FieldByName(f.Name) sf := sv.FieldByName(f.Name) - if !df.IsValid() || !sf.IsValid() { - return fmt.Errorf("%v not present in source and dest.", f.Name) + if !sf.IsValid() { + return fmt.Errorf("%v not present in source %v for dest %v", f.Name, sv.Type(), dv.Type()) } + df := dv.Field(i) if err := c.convert(sf, df); err != nil { return err } diff --git a/pkg/api/converter_test.go b/pkg/api/converter_test.go index 433662d99a8..18a97e9298b 100644 --- a/pkg/api/converter_test.go +++ b/pkg/api/converter_test.go @@ -79,3 +79,32 @@ func TestConverter(t *testing.T) { t.Errorf("unexpected non-error") } } + +func anonymousEmptyTypeNamedA() interface{} { + type A struct{} + return &A{} +} + +func TestCopyConvertor(t *testing.T) { + type A struct { + Bar string + } + type B struct { + Bar string + } + c := NewConverter() + err := c.Convert(anonymousEmptyTypeNamedA(), &A{}) + if err == nil { + t.Errorf("unexpected non-error") + } + + err = c.Convert(&A{}, anonymousEmptyTypeNamedA()) + if err != nil { + t.Fatalf("unexpected error %v", err) + } + + err = c.Convert(&B{}, &A{}) + if err == nil { + t.Errorf("unexpected non-error") + } +}