options_test.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package options
  2. import (
  3. "reflect"
  4. "strings"
  5. "testing"
  6. _ "github.com/docker/libnetwork/netutils"
  7. )
  8. func TestGenerate(t *testing.T) {
  9. gen := NewGeneric()
  10. gen["Int"] = 1
  11. gen["Rune"] = 'b'
  12. gen["Float64"] = 2.0
  13. type Model struct {
  14. Int int
  15. Rune rune
  16. Float64 float64
  17. }
  18. result, err := GenerateFromModel(gen, Model{})
  19. if err != nil {
  20. t.Fatal(err)
  21. }
  22. cast, ok := result.(Model)
  23. if !ok {
  24. t.Fatalf("result has unexpected type %s", reflect.TypeOf(result))
  25. }
  26. if expected := 1; cast.Int != expected {
  27. t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Int)
  28. }
  29. if expected := 'b'; cast.Rune != expected {
  30. t.Fatalf("wrong value for field Rune: expected %v, got %v", expected, cast.Rune)
  31. }
  32. if expected := 2.0; cast.Float64 != expected {
  33. t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Float64)
  34. }
  35. }
  36. func TestGeneratePtr(t *testing.T) {
  37. gen := NewGeneric()
  38. gen["Int"] = 1
  39. gen["Rune"] = 'b'
  40. gen["Float64"] = 2.0
  41. type Model struct {
  42. Int int
  43. Rune rune
  44. Float64 float64
  45. }
  46. result, err := GenerateFromModel(gen, &Model{})
  47. if err != nil {
  48. t.Fatal(err)
  49. }
  50. cast, ok := result.(*Model)
  51. if !ok {
  52. t.Fatalf("result has unexpected type %s", reflect.TypeOf(result))
  53. }
  54. if expected := 1; cast.Int != expected {
  55. t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Int)
  56. }
  57. if expected := 'b'; cast.Rune != expected {
  58. t.Fatalf("wrong value for field Rune: expected %v, got %v", expected, cast.Rune)
  59. }
  60. if expected := 2.0; cast.Float64 != expected {
  61. t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Float64)
  62. }
  63. }
  64. func TestGenerateMissingField(t *testing.T) {
  65. type Model struct{}
  66. _, err := GenerateFromModel(Generic{"foo": "bar"}, Model{})
  67. if _, ok := err.(NoSuchFieldError); !ok {
  68. t.Fatalf("expected NoSuchFieldError, got %#v", err)
  69. } else if expected := "no field"; !strings.Contains(err.Error(), expected) {
  70. t.Fatalf("expected %q in error message, got %s", expected, err.Error())
  71. }
  72. }
  73. func TestFieldCannotBeSet(t *testing.T) {
  74. type Model struct{ foo int }
  75. _, err := GenerateFromModel(Generic{"foo": "bar"}, Model{})
  76. if _, ok := err.(CannotSetFieldError); !ok {
  77. t.Fatalf("expected CannotSetFieldError, got %#v", err)
  78. } else if expected := "cannot set field"; !strings.Contains(err.Error(), expected) {
  79. t.Fatalf("expected %q in error message, got %s", expected, err.Error())
  80. }
  81. }