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  }