github.com/mattn/anko@v0.1.10/env/env_test.go (about) 1 package env 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestString(t *testing.T) { 9 t.Parallel() 10 11 env := NewEnv() 12 env.Define("a", "a") 13 output := env.String() 14 expected := `No parent 15 a = "a" 16 ` 17 if output != expected { 18 t.Errorf("received: %v - expected: %v", output, expected) 19 } 20 21 env = env.NewEnv() 22 env.Define("b", "b") 23 output = env.String() 24 expected = `Has parent 25 b = "b" 26 ` 27 if output != expected { 28 t.Errorf("received: %v - expected: %v", output, expected) 29 } 30 31 env = NewEnv() 32 env.Define("c", "c") 33 env.DefineType("string", "a") 34 output = env.String() 35 expected = `No parent 36 c = "c" 37 string = string 38 ` 39 if output != expected { 40 t.Errorf("received: %v - expected: %v", output, expected) 41 } 42 } 43 44 func TestGetEnvFromPath(t *testing.T) { 45 t.Parallel() 46 47 env := NewEnv() 48 a, err := env.NewModule("a") 49 if err != nil { 50 t.Fatal("NewModule error:", err) 51 } 52 var b *Env 53 b, err = a.NewModule("b") 54 if err != nil { 55 t.Fatal("NewModule error:", err) 56 } 57 var c *Env 58 c, err = b.NewModule("c") 59 if err != nil { 60 t.Fatal("NewModule error:", err) 61 } 62 err = c.Define("d", "d") 63 if err != nil { 64 t.Fatal("Define error:", err) 65 } 66 67 e, err := env.GetEnvFromPath(nil) 68 if err != nil { 69 t.Fatal("GetEnvFromPath error:", err) 70 } 71 if e == nil { 72 t.Fatal("GetEnvFromPath e nil") 73 } 74 75 e, err = env.GetEnvFromPath([]string{}) 76 if err != nil { 77 t.Fatal("GetEnvFromPath error:", err) 78 } 79 if e == nil { 80 t.Fatal("GetEnvFromPath e nil") 81 } 82 83 e, err = env.GetEnvFromPath([]string{"a", "c"}) 84 expected := "no namespace called: c" 85 if err == nil || err.Error() != expected { 86 t.Fatalf("GetEnvFromPath error - received: %v - expected: %v", err, expected) 87 } 88 if e != nil { 89 t.Fatal("GetEnvFromPath e not nil") 90 } 91 92 // a.b.c 93 94 e, err = env.GetEnvFromPath([]string{"a", "b", "c"}) 95 if err != nil { 96 t.Fatal("GetEnvFromPath error:", err) 97 } 98 if e == nil { 99 t.Fatal("GetEnvFromPath e nil") 100 } 101 var value interface{} 102 value, err = e.Get("d") 103 if err != nil { 104 t.Fatal("Get error:", err) 105 } 106 v, ok := value.(string) 107 if !ok { 108 t.Fatal("value not string") 109 } 110 if v != "d" { 111 t.Errorf("value - received: %v - expected: %v", v, "d") 112 } 113 114 e, err = a.GetEnvFromPath([]string{"a", "b", "c"}) 115 if err != nil { 116 t.Fatal("GetEnvFromPath error:", err) 117 } 118 if e == nil { 119 t.Fatal("GetEnvFromPath e nil") 120 } 121 value, err = e.Get("d") 122 if err != nil { 123 t.Fatal("Get error:", err) 124 } 125 v, ok = value.(string) 126 if !ok { 127 t.Fatal("value not string") 128 } 129 if v != "d" { 130 t.Errorf("value - received: %v - expected: %v", v, "d") 131 } 132 133 e, err = b.GetEnvFromPath([]string{"a", "b", "c"}) 134 if err != nil { 135 t.Fatal("GetEnvFromPath error:", err) 136 } 137 if e == nil { 138 t.Fatal("GetEnvFromPath e nil") 139 } 140 value, err = e.Get("d") 141 if err != nil { 142 t.Fatal("Get error:", err) 143 } 144 v, ok = value.(string) 145 if !ok { 146 t.Fatal("value not string") 147 } 148 if v != "d" { 149 t.Errorf("value - received: %v - expected: %v", v, "d") 150 } 151 152 e, err = c.GetEnvFromPath([]string{"a", "b", "c"}) 153 if err != nil { 154 t.Fatal("GetEnvFromPath error:", err) 155 } 156 if e == nil { 157 t.Fatal("GetEnvFromPath e nil") 158 } 159 value, err = e.Get("d") 160 if err != nil { 161 t.Fatal("Get error:", err) 162 } 163 v, ok = value.(string) 164 if !ok { 165 t.Fatal("value not string") 166 } 167 if v != "d" { 168 t.Errorf("value - received: %v - expected: %v", v, "d") 169 } 170 171 // b.c 172 173 e, err = env.GetEnvFromPath([]string{"b", "c"}) 174 expected = "no namespace called: b" 175 if err == nil || err.Error() != expected { 176 t.Fatalf("GetEnvFromPath error - received: %v - expected: %v", err, expected) 177 } 178 if e != nil { 179 t.Fatal("GetEnvFromPath e not nil") 180 } 181 182 e, err = a.GetEnvFromPath([]string{"b", "c"}) 183 if err != nil { 184 t.Fatal("GetEnvFromPath error:", err) 185 } 186 if e == nil { 187 t.Fatal("GetEnvFromPath e nil") 188 } 189 value, err = e.Get("d") 190 if err != nil { 191 t.Fatal("Get error:", err) 192 } 193 v, ok = value.(string) 194 if !ok { 195 t.Fatal("value not string") 196 } 197 if v != "d" { 198 t.Errorf("value - received: %v - expected: %v", v, "d") 199 } 200 201 e, err = b.GetEnvFromPath([]string{"b", "c"}) 202 if err != nil { 203 t.Fatal("GetEnvFromPath error:", err) 204 } 205 if e == nil { 206 t.Fatal("GetEnvFromPath e nil") 207 } 208 value, err = e.Get("d") 209 if err != nil { 210 t.Fatal("Get error:", err) 211 } 212 v, ok = value.(string) 213 if !ok { 214 t.Fatal("value not string") 215 } 216 if v != "d" { 217 t.Errorf("value - received: %v - expected: %v", v, "d") 218 } 219 220 e, err = c.GetEnvFromPath([]string{"b", "c"}) 221 if err != nil { 222 t.Fatal("GetEnvFromPath error:", err) 223 } 224 if e == nil { 225 t.Fatal("GetEnvFromPath e nil") 226 } 227 value, err = e.Get("d") 228 if err != nil { 229 t.Fatal("Get error:", err) 230 } 231 v, ok = value.(string) 232 if !ok { 233 t.Fatal("value not string") 234 } 235 if v != "d" { 236 t.Errorf("value - received: %v - expected: %v", v, "d") 237 } 238 239 // c 240 241 e, err = env.GetEnvFromPath([]string{"c"}) 242 expected = "no namespace called: c" 243 if err == nil || err.Error() != expected { 244 t.Fatalf("GetEnvFromPath error - received: %v - expected: %v", err, expected) 245 } 246 if e != nil { 247 t.Fatal("GetEnvFromPath e not nil") 248 } 249 250 e, err = b.GetEnvFromPath([]string{"c"}) 251 if err != nil { 252 t.Fatal("GetEnvFromPath error:", err) 253 } 254 if e == nil { 255 t.Fatal("GetEnvFromPath e nil") 256 } 257 value, err = e.Get("d") 258 if err != nil { 259 t.Fatal("Get error:", err) 260 } 261 v, ok = value.(string) 262 if !ok { 263 t.Fatal("value not string") 264 } 265 if v != "d" { 266 t.Errorf("value - received: %v - expected: %v", v, "d") 267 } 268 269 e, err = c.GetEnvFromPath(nil) 270 if err != nil { 271 t.Fatal("GetEnvFromPath error:", err) 272 } 273 if e == nil { 274 t.Fatal("GetEnvFromPath e nil") 275 } 276 value, err = e.Get("d") 277 if err != nil { 278 t.Fatal("Get error:", err) 279 } 280 v, ok = value.(string) 281 if !ok { 282 t.Fatal("value not string") 283 } 284 if v != "d" { 285 t.Errorf("value - received: %v - expected: %v", v, "d") 286 } 287 } 288 289 func TestCopy(t *testing.T) { 290 t.Parallel() 291 292 parent := NewEnv() 293 parent.Define("a", "a") 294 parent.DefineType("b", []bool{}) 295 child := parent.NewEnv() 296 child.Define("c", "c") 297 child.DefineType("d", []int64{}) 298 copy := child.Copy() 299 300 if v, e := copy.Get("a"); e != nil || v != "a" { 301 t.Errorf("copy missing value") 302 } 303 if v, e := copy.Type("b"); e != nil || v != reflect.TypeOf([]bool{}) { 304 t.Errorf("copy missing type") 305 } 306 if v, e := copy.Get("c"); e != nil || v != "c" { 307 t.Errorf("copy missing value") 308 } 309 if v, e := copy.Type("d"); e != nil || v != reflect.TypeOf([]int64{}) { 310 t.Errorf("copy missing type") 311 } 312 313 // TODO: add more get type tests 314 315 copy.Set("a", "i") 316 if v, e := child.Get("a"); e != nil || v != "i" { 317 t.Errorf("parent was not modified") 318 } 319 if v, e := copy.Get("a"); e != nil || v != "i" { 320 t.Errorf("copy did not get parent value") 321 } 322 323 copy.Set("c", "j") 324 if v, e := child.Get("c"); e != nil || v != "c" { 325 t.Errorf("child was not modified") 326 } 327 if v, e := copy.Get("c"); e != nil || v != "j" { 328 t.Errorf("copy child was not modified") 329 } 330 331 child.Set("a", "x") 332 if v, e := child.Get("a"); e != nil || v != "x" { 333 t.Errorf("parent was not modified") 334 } 335 if v, e := copy.Get("a"); e != nil || v != "x" { 336 t.Errorf("copy did not get parent value") 337 } 338 339 child.Set("c", "z") 340 if v, e := child.Get("c"); e != nil || v != "z" { 341 t.Errorf("child was not modified") 342 } 343 if v, e := copy.Get("c"); e != nil || v != "j" { 344 t.Errorf("copy child was modified") 345 } 346 347 parent.Set("a", "m") 348 if v, e := child.Get("a"); e != nil || v != "m" { 349 t.Errorf("parent was not modified") 350 } 351 if v, e := copy.Get("a"); e != nil || v != "m" { 352 t.Errorf("copy did not get parent value") 353 } 354 355 parent.Define("x", "n") 356 if v, e := child.Get("x"); e != nil || v != "n" { 357 t.Errorf("child did not get parent value") 358 } 359 if v, e := copy.Get("x"); e != nil || v != "n" { 360 t.Errorf("copy did not get parent value") 361 } 362 } 363 364 func TestDeepCopy(t *testing.T) { 365 t.Parallel() 366 367 parent := NewEnv() 368 parent.Define("a", "a") 369 env := parent.NewEnv() 370 copy := env.DeepCopy() 371 372 // TODO: add more/better tests, like above 373 if v, e := copy.Get("a"); e != nil || v != "a" { 374 t.Errorf("copy doesn't retain original values") 375 } 376 parent.Set("a", "b") 377 if v, e := env.Get("a"); e != nil || v != "b" { 378 t.Errorf("son was not modified") 379 } 380 if v, e := copy.Get("a"); e != nil || v != "a" { 381 t.Errorf("copy got the new value") 382 } 383 parent.Set("a", "c") 384 if v, e := env.Get("a"); e != nil || v != "c" { 385 t.Errorf("original was not modified") 386 } 387 if v, e := copy.Get("a"); e != nil || v != "a" { 388 t.Errorf("copy was modified") 389 } 390 parent.Define("b", "b") 391 if _, e := copy.Get("b"); e == nil { 392 t.Errorf("copy parent was modified") 393 } 394 }