github.com/naoina/kocha@v0.7.1-0.20171129072645-78c7a531f799/param_test.go (about) 1 package kocha_test 2 3 import ( 4 "net/url" 5 "reflect" 6 "testing" 7 8 "github.com/naoina/kocha" 9 ) 10 11 func TestFromParams_Bind(t *testing.T) { 12 func() { 13 type User struct{} 14 p := &kocha.Params{Values: url.Values{}} 15 user := User{} 16 err := p.From("user").Bind(user) 17 if err == nil { 18 t.Errorf("From(%#v).Bind(%#v) => %#v, want error", "user", user, err) 19 } 20 }() 21 22 func() { 23 p := &kocha.Params{Values: url.Values{}} 24 var s string 25 err := p.From("user").Bind(&s) 26 if err == nil { 27 t.Errorf("From.Bind(%#v) => %#v, want error", s, err) 28 } 29 }() 30 31 func() { 32 type User struct { 33 Name string 34 Age int 35 } 36 p := &kocha.Params{Values: url.Values{}} 37 user := &User{} 38 err := p.From("user").Bind(user) 39 if err != nil { 40 t.Errorf("From.Bind(%#v) => %#v, want nil", user, err) 41 } 42 43 actual := user 44 expected := &User{} 45 if !reflect.DeepEqual(actual, expected) { 46 t.Errorf("%T => %#v, want %q", user, actual, expected) 47 } 48 }() 49 50 func() { 51 type User struct { 52 Name string 53 Age int 54 Address string 55 } 56 p := &kocha.Params{Values: url.Values{ 57 "user.name": {"naoina"}, 58 "user.age": {"17"}, 59 "admin.name": {"administrator"}, 60 }} 61 user := &User{} 62 err := p.From("user").Bind(user, "name", "age") 63 if err != nil { 64 t.Errorf("From.Bind(%#v) => %#v, want nil", user, err) 65 } 66 67 actual := user 68 expected := &User{ 69 Name: "naoina", 70 Age: 17, 71 Address: "", 72 } 73 if !reflect.DeepEqual(actual, expected) { 74 t.Errorf("%T => %#v, want %#v", user, actual, expected) 75 } 76 }() 77 78 func() { 79 type User struct { 80 Name string 81 } 82 type Admin struct { 83 User 84 Name string 85 } 86 p := &kocha.Params{Values: url.Values{ 87 "user.name": {"naoina"}, 88 }} 89 admin := &Admin{} 90 err := p.From("user").Bind(admin, "name") 91 if err != nil { 92 t.Errorf("From.Bind(%#v) => %#v, want nil", admin, err) 93 } 94 95 actual := admin 96 expected := &Admin{ 97 Name: "naoina", 98 } 99 if !reflect.DeepEqual(actual, expected) { 100 t.Errorf("%T => %#v, want %#v", admin, actual, expected) 101 } 102 }() 103 }