github.com/masahide/goansible@v0.0.0-20160116054156-01eac649e9f2/lisp/scope_test.go (about) 1 package lisp 2 3 import "testing" 4 5 func TestScope(t *testing.T) { 6 scope := NewScope() 7 if scope.Env() != nil { 8 t.Errorf("Env should be nil initially") 9 } 10 11 env := scope.AddEnv() 12 if env != scope.Env() { 13 t.Errorf("AddEnv() returns %v, should be same as scope.Env(): %v", env, scope.Env()) 14 } 15 16 env2 := scope.AddEnv() 17 if env2 != scope.Env() { 18 t.Errorf("AddEnv() returns %v, should be same as scope.Env(): %v", env2, scope.Env()) 19 } 20 21 env3 := scope.DropEnv() 22 if env3 != scope.Env() { 23 t.Errorf("DropEnv() returns %v, should be same as scope.Env(): %v", env3, scope.Env()) 24 } 25 26 if env != env3 { 27 t.Errorf("Original env: %v should be same as dropped env from DropEnv(): %v", env, env3) 28 } 29 30 env4 := scope.DropEnv() 31 if env4 != nil { 32 t.Errorf("DropEnv should be back to nil but is %v", env4) 33 } 34 } 35 36 func TestEnv(t *testing.T) { 37 scope := NewScope() 38 scope.AddEnv() 39 if v1 := scope.Create("foo", Value{symbolValue, "bar"}); v1 != (Value{symbolValue, "bar"}) { 40 t.Errorf("Env.Create should return bar but returned %v", v1) 41 } 42 43 if v2, ok := scope.Get("foo"); v2 != (Value{symbolValue, "bar"}) && ok { 44 t.Errorf("Failed to Create and Get foo, got %v, %v", v2, ok) 45 } 46 47 if _, ok := scope.Get("undefined"); ok { 48 t.Errorf("Get of undefined should give false but is %v", ok) 49 } 50 51 scope.AddEnv() 52 53 if v3, ok := scope.Get("foo"); v3 != (Value{symbolValue, "bar"}) { 54 t.Errorf("Failed to Get foo in sub env, got %v, %v", v3, ok) 55 } 56 57 scope.Create("bar", (Value{symbolValue, "baz"})) 58 59 scope.DropEnv() 60 if _, ok := scope.Get("bar"); ok { 61 t.Errorf("We should not be able to get local var bar") 62 } 63 }