github.com/mattn/anko@v0.1.10/env/envTypes_test.go (about) 1 package env 2 3 import ( 4 "fmt" 5 "reflect" 6 "testing" 7 ) 8 9 func TestBasicType(t *testing.T) { 10 env := NewEnv() 11 aType, err := env.Type("string") 12 if err != nil { 13 t.Fatalf("Type error - %v", err) 14 } 15 if aType != reflect.TypeOf("a") { 16 t.Errorf("Type - received: %v - expected: %v", aType, reflect.TypeOf("a")) 17 } 18 19 aType, err = env.Type("int64") 20 if err != nil { 21 t.Fatal("Type error:", err) 22 } 23 if aType != reflect.TypeOf(int64(1)) { 24 t.Errorf("Type - received: %v - expected: %v", aType, reflect.TypeOf(int64(1))) 25 } 26 } 27 28 func TestDefineType(t *testing.T) { 29 var err error 30 var valueType reflect.Type 31 tests := []struct { 32 testInfo string 33 varName string 34 varDefineValue interface{} 35 defineError error 36 typeError error 37 }{ 38 {testInfo: "nil", varName: "a", varDefineValue: nil}, 39 {testInfo: "bool", varName: "a", varDefineValue: true}, 40 {testInfo: "int16", varName: "a", varDefineValue: int16(1)}, 41 {testInfo: "int32", varName: "a", varDefineValue: int32(1)}, 42 {testInfo: "int64", varName: "a", varDefineValue: int64(1)}, 43 {testInfo: "uint32", varName: "a", varDefineValue: uint32(1)}, 44 {testInfo: "uint64", varName: "a", varDefineValue: uint64(1)}, 45 {testInfo: "float32", varName: "a", varDefineValue: float32(1)}, 46 {testInfo: "float64", varName: "a", varDefineValue: float64(1)}, 47 {testInfo: "string", varName: "a", varDefineValue: "a"}, 48 49 {testInfo: "string with dot", varName: "a.a", varDefineValue: nil, defineError: ErrSymbolContainsDot, typeError: fmt.Errorf("undefined type 'a.a'")}, 50 } 51 52 // DefineType 53 for _, test := range tests { 54 env := NewEnv() 55 56 err = env.DefineType(test.varName, test.varDefineValue) 57 if err != nil && test.defineError != nil { 58 if err.Error() != test.defineError.Error() { 59 t.Errorf("DefineType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 60 continue 61 } 62 } else if err != test.defineError { 63 t.Errorf("DefineType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 64 continue 65 } 66 67 valueType, err = env.Type(test.varName) 68 if err != nil && test.typeError != nil { 69 if err.Error() != test.typeError.Error() { 70 t.Errorf("DefineType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 71 continue 72 } 73 } else if err != test.typeError { 74 t.Errorf("DefineType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 75 continue 76 } 77 if valueType == nil || test.varDefineValue == nil { 78 if valueType != reflect.TypeOf(test.varDefineValue) { 79 t.Errorf("DefineType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 80 } 81 } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() { 82 t.Errorf("DefineType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 83 } 84 } 85 86 // DefineType NewEnv 87 for _, test := range tests { 88 envParent := NewEnv() 89 envChild := envParent.NewEnv() 90 91 err = envParent.DefineType(test.varName, test.varDefineValue) 92 if err != nil && test.defineError != nil { 93 if err.Error() != test.defineError.Error() { 94 t.Errorf("DefineType NewEnv %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 95 continue 96 } 97 } else if err != test.defineError { 98 t.Errorf("DefineType NewEnv %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 99 continue 100 } 101 102 valueType, err = envChild.Type(test.varName) 103 if err != nil && test.typeError != nil { 104 if err.Error() != test.typeError.Error() { 105 t.Errorf("DefineType NewEnv %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 106 continue 107 } 108 } else if err != test.typeError { 109 t.Errorf("DefineType NewEnv %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 110 continue 111 } 112 if valueType == nil || test.varDefineValue == nil { 113 if valueType != reflect.TypeOf(test.varDefineValue) { 114 t.Errorf("DefineType NewEnv %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 115 } 116 } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() { 117 t.Errorf("DefineType NewEnv %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 118 } 119 } 120 121 // DefineType NewModule 122 for _, test := range tests { 123 envParent := NewEnv() 124 envChild, err := envParent.NewModule("envChild") 125 if err != nil { 126 t.Fatalf("DefineType NewModule %v - NewModule error - received: %v - expected: %v", test.testInfo, err, nil) 127 } 128 129 err = envParent.DefineType(test.varName, test.varDefineValue) 130 if err != nil && test.defineError != nil { 131 if err.Error() != test.defineError.Error() { 132 t.Errorf("DefineType NewModule %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 133 continue 134 } 135 } else if err != test.defineError { 136 t.Errorf("DefineType NewModule %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 137 continue 138 } 139 140 valueType, err = envChild.Type(test.varName) 141 if err != nil && test.typeError != nil { 142 if err.Error() != test.typeError.Error() { 143 t.Errorf("DefineType NewModule %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 144 continue 145 } 146 } else if err != test.typeError { 147 t.Errorf("DefineType NewModule %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 148 continue 149 } 150 if valueType == nil || test.varDefineValue == nil { 151 if valueType != reflect.TypeOf(test.varDefineValue) { 152 t.Errorf("DefineType NewModule %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 153 } 154 } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() { 155 t.Errorf("DefineType NewModule %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 156 } 157 } 158 159 // DefineGlobalType 160 for _, test := range tests { 161 envParent := NewEnv() 162 envChild := envParent.NewEnv() 163 164 err = envChild.DefineGlobalType(test.varName, test.varDefineValue) 165 if err != nil && test.defineError != nil { 166 if err.Error() != test.defineError.Error() { 167 t.Errorf("DefineGlobalType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 168 continue 169 } 170 } else if err != test.defineError { 171 t.Errorf("DefineGlobalType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 172 continue 173 } 174 175 valueType, err = envParent.Type(test.varName) 176 if err != nil && test.typeError != nil { 177 if err.Error() != test.typeError.Error() { 178 t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 179 continue 180 } 181 } else if err != test.typeError { 182 t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 183 continue 184 } 185 if valueType == nil || test.varDefineValue == nil { 186 if valueType != reflect.TypeOf(test.varDefineValue) { 187 t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 188 } 189 } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() { 190 t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 191 } 192 193 valueType, err = envChild.Type(test.varName) 194 if err != nil && test.typeError != nil { 195 if err.Error() != test.typeError.Error() { 196 t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 197 continue 198 } 199 } else if err != test.typeError { 200 t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 201 continue 202 } 203 if valueType == nil || test.varDefineValue == nil { 204 if valueType != reflect.TypeOf(test.varDefineValue) { 205 t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 206 } 207 } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() { 208 t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 209 } 210 } 211 212 // DefineGlobalReflectType 213 for _, test := range tests { 214 envParent := NewEnv() 215 envChild := envParent.NewEnv() 216 217 err = envChild.DefineGlobalReflectType(test.varName, reflect.TypeOf(test.varDefineValue)) 218 if err != nil && test.defineError != nil { 219 if err.Error() != test.defineError.Error() { 220 t.Errorf("DefineGlobalReflectType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 221 continue 222 } 223 } else if err != test.defineError { 224 t.Errorf("DefineGlobalReflectType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 225 continue 226 } 227 228 valueType, err = envParent.Type(test.varName) 229 if err != nil && test.typeError != nil { 230 if err.Error() != test.typeError.Error() { 231 t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 232 continue 233 } 234 } else if err != test.typeError { 235 t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 236 continue 237 } 238 if valueType == nil || test.varDefineValue == nil { 239 if valueType != reflect.TypeOf(test.varDefineValue) { 240 t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 241 } 242 } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() { 243 t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 244 } 245 246 valueType, err = envChild.Type(test.varName) 247 if err != nil && test.typeError != nil { 248 if err.Error() != test.typeError.Error() { 249 t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 250 continue 251 } 252 } else if err != test.typeError { 253 t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 254 continue 255 } 256 if valueType == nil || test.varDefineValue == nil { 257 if valueType != reflect.TypeOf(test.varDefineValue) { 258 t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 259 } 260 } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() { 261 t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue)) 262 } 263 } 264 } 265 266 func TestDefineTypeFail(t *testing.T) { 267 var err error 268 tests := []struct { 269 testInfo string 270 varName string 271 varDefineValue interface{} 272 defineError error 273 typeError error 274 }{ 275 {testInfo: "nil", varName: "a", varDefineValue: nil, typeError: fmt.Errorf("undefined type 'a'")}, 276 {testInfo: "bool", varName: "a", varDefineValue: true, typeError: fmt.Errorf("undefined type 'a'")}, 277 {testInfo: "int16", varName: "a", varDefineValue: int16(1), typeError: fmt.Errorf("undefined type 'a'")}, 278 {testInfo: "int32", varName: "a", varDefineValue: int32(1), typeError: fmt.Errorf("undefined type 'a'")}, 279 {testInfo: "int64", varName: "a", varDefineValue: int64(1), typeError: fmt.Errorf("undefined type 'a'")}, 280 {testInfo: "uint32", varName: "a", varDefineValue: uint32(1), typeError: fmt.Errorf("undefined type 'a'")}, 281 {testInfo: "uint64", varName: "a", varDefineValue: uint64(1), typeError: fmt.Errorf("undefined type 'a'")}, 282 {testInfo: "float32", varName: "a", varDefineValue: float32(1), typeError: fmt.Errorf("undefined type 'a'")}, 283 {testInfo: "float64", varName: "a", varDefineValue: float64(1), typeError: fmt.Errorf("undefined type 'a'")}, 284 {testInfo: "string", varName: "a", varDefineValue: "a", typeError: fmt.Errorf("undefined type 'a'")}, 285 } 286 287 // DefineTypeFail 288 for _, test := range tests { 289 envParent := NewEnv() 290 envChild := envParent.NewEnv() 291 292 err = envChild.DefineType(test.varName, test.varDefineValue) 293 if err != nil && test.defineError != nil { 294 if err.Error() != test.defineError.Error() { 295 t.Errorf("TestDefineTypeFail %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 296 continue 297 } 298 } else if err != test.defineError { 299 t.Errorf("TestDefineTypeFail %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError) 300 continue 301 } 302 303 _, err = envParent.Type(test.varName) 304 if err != nil && test.typeError != nil { 305 if err.Error() != test.typeError.Error() { 306 t.Errorf("TestDefineTypeFail %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 307 continue 308 } 309 } else if err != test.typeError { 310 t.Errorf("TestDefineTypeFail %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError) 311 } 312 } 313 } 314 315 func TestGetTypeSymbols(t *testing.T) { 316 var symbols []string 317 values := map[string]interface{}{ 318 "a": int64(1), 319 "b": float64(1), 320 "c": true, 321 "d": "a", 322 } 323 324 env := NewEnv() 325 for s, v := range values { 326 env.DefineType(s, v) 327 } 328 329 symbols = env.GetTypeSymbols() 330 if len(symbols) != len(values) { 331 t.Errorf("Expected %d symbols, received %d", len(values), len(symbols)) 332 } 333 334 for _, symbol := range symbols { 335 _, ok := values[symbol] 336 if !ok { 337 t.Errorf("Missing %s symbol", symbol) 338 } 339 } 340 }