github.com/docker/engine@v22.0.0-20211208180946-d456264580cf+incompatible/libnetwork/options/options_test.go (about) 1 package options 2 3 import ( 4 "reflect" 5 "strings" 6 "testing" 7 ) 8 9 func TestGenerate(t *testing.T) { 10 gen := NewGeneric() 11 gen["Int"] = 1 12 gen["Rune"] = 'b' 13 gen["Float64"] = 2.0 14 15 type Model struct { 16 Int int 17 Rune rune 18 Float64 float64 19 } 20 21 result, err := GenerateFromModel(gen, Model{}) 22 23 if err != nil { 24 t.Fatal(err) 25 } 26 27 cast, ok := result.(Model) 28 if !ok { 29 t.Fatalf("result has unexpected type %s", reflect.TypeOf(result)) 30 } 31 if expected := 1; cast.Int != expected { 32 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Int) 33 } 34 if expected := 'b'; cast.Rune != expected { 35 t.Fatalf("wrong value for field Rune: expected %v, got %v", expected, cast.Rune) 36 } 37 if expected := 2.0; cast.Float64 != expected { 38 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Float64) 39 } 40 } 41 42 func TestGeneratePtr(t *testing.T) { 43 gen := NewGeneric() 44 gen["Int"] = 1 45 gen["Rune"] = 'b' 46 gen["Float64"] = 2.0 47 48 type Model struct { 49 Int int 50 Rune rune 51 Float64 float64 52 } 53 54 result, err := GenerateFromModel(gen, &Model{}) 55 56 if err != nil { 57 t.Fatal(err) 58 } 59 60 cast, ok := result.(*Model) 61 if !ok { 62 t.Fatalf("result has unexpected type %s", reflect.TypeOf(result)) 63 } 64 if expected := 1; cast.Int != expected { 65 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Int) 66 } 67 if expected := 'b'; cast.Rune != expected { 68 t.Fatalf("wrong value for field Rune: expected %v, got %v", expected, cast.Rune) 69 } 70 if expected := 2.0; cast.Float64 != expected { 71 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Float64) 72 } 73 } 74 75 func TestGenerateMissingField(t *testing.T) { 76 type Model struct{} 77 _, err := GenerateFromModel(Generic{"foo": "bar"}, Model{}) 78 79 if _, ok := err.(NoSuchFieldError); !ok { 80 t.Fatalf("expected NoSuchFieldError, got %#v", err) 81 } else if expected := "no field"; !strings.Contains(err.Error(), expected) { 82 t.Fatalf("expected %q in error message, got %s", expected, err.Error()) 83 } 84 } 85 86 func TestFieldCannotBeSet(t *testing.T) { 87 type Model struct{ foo int } // nolint:structcheck 88 _, err := GenerateFromModel(Generic{"foo": "bar"}, Model{}) 89 90 if _, ok := err.(CannotSetFieldError); !ok { 91 t.Fatalf("expected CannotSetFieldError, got %#v", err) 92 } else if expected := "cannot set field"; !strings.Contains(err.Error(), expected) { 93 t.Fatalf("expected %q in error message, got %s", expected, err.Error()) 94 } 95 } 96 97 func TestTypeMismatchError(t *testing.T) { 98 type Model struct{ Foo int } 99 _, err := GenerateFromModel(Generic{"Foo": "bar"}, Model{}) 100 101 if _, ok := err.(TypeMismatchError); !ok { 102 t.Fatalf("expected TypeMismatchError, got %#v", err) 103 } else if expected := "type mismatch"; !strings.Contains(err.Error(), expected) { 104 t.Fatalf("expected %q in error message, got %s", expected, err.Error()) 105 } 106 }