1package i18n 2 3import ( 4 "reflect" 5 "testing" 6) 7 8func TestNewMessage(t *testing.T) { 9 tests := []struct { 10 name string 11 data interface{} 12 message *Message 13 err error 14 }{ 15 { 16 name: "string", 17 data: "other", 18 message: &Message{ 19 Other: "other", 20 }, 21 }, 22 { 23 name: "nil value", 24 data: map[interface{}]interface{}{ 25 "ID": "id", 26 "Zero": nil, 27 "Other": "other", 28 }, 29 message: &Message{ 30 ID: "id", 31 Other: "other", 32 }, 33 }, 34 { 35 name: "map[string]string", 36 data: map[string]string{ 37 "ID": "id", 38 "Hash": "hash", 39 "Description": "description", 40 "LeftDelim": "leftdelim", 41 "RightDelim": "rightdelim", 42 "Zero": "zero", 43 "One": "one", 44 "Two": "two", 45 "Few": "few", 46 "Many": "many", 47 "Other": "other", 48 }, 49 message: &Message{ 50 ID: "id", 51 Hash: "hash", 52 Description: "description", 53 LeftDelim: "leftdelim", 54 RightDelim: "rightdelim", 55 Zero: "zero", 56 One: "one", 57 Two: "two", 58 Few: "few", 59 Many: "many", 60 Other: "other", 61 }, 62 }, 63 { 64 name: "map[string]interface{}", 65 data: map[string]interface{}{ 66 "ID": "id", 67 "Hash": "hash", 68 "Description": "description", 69 "LeftDelim": "leftdelim", 70 "RightDelim": "rightdelim", 71 "Zero": "zero", 72 "One": "one", 73 "Two": "two", 74 "Few": "few", 75 "Many": "many", 76 "Other": "other", 77 }, 78 message: &Message{ 79 ID: "id", 80 Hash: "hash", 81 Description: "description", 82 LeftDelim: "leftdelim", 83 RightDelim: "rightdelim", 84 Zero: "zero", 85 One: "one", 86 Two: "two", 87 Few: "few", 88 Many: "many", 89 Other: "other", 90 }, 91 }, 92 { 93 name: "map[interface{}]interface{}", 94 data: map[interface{}]interface{}{ 95 "ID": "id", 96 "Hash": "hash", 97 "Description": "description", 98 "LeftDelim": "leftdelim", 99 "RightDelim": "rightdelim", 100 "Zero": "zero", 101 "One": "one", 102 "Two": "two", 103 "Few": "few", 104 "Many": "many", 105 "Other": "other", 106 }, 107 message: &Message{ 108 ID: "id", 109 Hash: "hash", 110 Description: "description", 111 LeftDelim: "leftdelim", 112 RightDelim: "rightdelim", 113 Zero: "zero", 114 One: "one", 115 Two: "two", 116 Few: "few", 117 Many: "many", 118 Other: "other", 119 }, 120 }, 121 { 122 name: "map[int]int", 123 data: map[interface{}]interface{}{ 124 1: 2, 125 }, 126 err: &keyTypeErr{key: 1}, 127 }, 128 { 129 name: "int", 130 data: 1, 131 err: &valueTypeErr{value: 1}, 132 }, 133 } 134 135 for _, test := range tests { 136 t.Run(test.name, func(t *testing.T) { 137 actual, err := NewMessage(test.data) 138 if !reflect.DeepEqual(err, test.err) { 139 t.Fatalf("expected %#v; got %#v", test.err, err) 140 } 141 if !reflect.DeepEqual(actual, test.message) { 142 t.Fatalf("\nexpected\n%#v\ngot\n%#v", test.message, actual) 143 } 144 }) 145 } 146} 147 148func TestKeyTypeErr(t *testing.T) { 149 expected := "expected key to be a string but got 1" 150 if actual := (&keyTypeErr{key: 1}).Error(); actual != expected { 151 t.Fatalf("expected %#v; got %#v", expected, actual) 152 } 153} 154 155func TestValueTypeErr(t *testing.T) { 156 expected := "unsupported type 1" 157 if actual := (&valueTypeErr{value: 1}).Error(); actual != expected { 158 t.Fatalf("expected %#v; got %#v", expected, actual) 159 } 160} 161