github.com/informationsea/shellflow@v0.1.3/flowscript/flowscript_environment_test.go (about) 1 package flowscript 2 3 import ( 4 "testing" 5 ) 6 7 func TestEnvironment(t *testing.T) { 8 ge := NewGlobalEnvironment() 9 if p := ge.ParentEnvironment(); p != nil { 10 t.Fatalf("Global Environment should not have parent environment: %s", p) 11 } 12 13 { 14 v, e := ge.Value("basename") 15 if e != nil { 16 t.Fatalf("failed to get builtin function: %s", e.Error()) 17 } 18 sf, ok := v.(FunctionValue) 19 if !ok { 20 t.Fatalf("failed to get builtin function: %s", sf) 21 } 22 if sf.value.name != "basename" { 23 t.Fatalf("failed to get builtin function: %s", sf) 24 } 25 } 26 27 { 28 v, e := ge.Value("dirname") 29 if e != nil { 30 t.Fatalf("failed to get builtin function: %s", e.Error()) 31 } 32 sf, ok := v.(FunctionValue) 33 if !ok { 34 t.Fatalf("failed to get builtin function: %s", sf) 35 } 36 if sf.value.name != "dirname" { 37 t.Fatalf("failed to get builtin function: %s", sf) 38 } 39 } 40 41 { 42 v, e := ge.Value("prefix") 43 if e != nil { 44 t.Fatalf("failed to get builtin function: %s", e.Error()) 45 } 46 sf, ok := v.(FunctionValue) 47 if !ok { 48 t.Fatalf("failed to get builtin function: %s", sf) 49 } 50 if sf.value.name != "prefix" { 51 t.Fatalf("failed to get builtin function: %s", sf) 52 } 53 } 54 55 if e := ge.Assign("hoge", StringValue{"foo"}); e != nil { 56 t.Fatalf("Cannot assign value: %s", e) 57 } 58 if e := ge.Assign("foo", IntValue{123}); e != nil { 59 t.Fatalf("Cannot assign value: %s", e) 60 } 61 62 tempArray := [...]Value{IntValue{1}, IntValue{2}, IntValue{3}} 63 if e := ge.Assign("bar", ArrayValue{tempArray[:]}); e != nil { 64 t.Fatalf("Cannot assign value: %s", e) 65 } 66 67 if v, e := ge.Value("hoge"); e != nil || v != (StringValue{"foo"}) { 68 t.Fatalf("Invalid value: %s / error: %e", v, e) 69 } 70 if v, e := ge.Value("foo"); e != nil || v != (IntValue{123}) { 71 t.Fatalf("Invalid value: %s / error: %e", v, e) 72 } 73 //if v, e := ge.Value("bar"); e != nil || v != (ArrayValue{tempArray[:]}) { 74 // t.Fatalf("Invalid value: %s / error: %e", v, e) 75 //} 76 if v, e := ge.Value("xxx"); e.Error() != "Unknown variable xxx" || v != nil { 77 t.Fatalf("Invalid value: %s / error: %e", v, e) 78 } 79 80 se := CreateSubEnvironment(ge) 81 if se.ParentEnvironment() != ge { 82 t.Fatalf("Invalid parent environment: %p", se.ParentEnvironment()) 83 } 84 if e := se.Assign("hoge", StringValue{"x"}); e != nil { 85 t.Fatalf("Cannot assign value: %s", e) 86 } 87 if e := se.Assign("foo2", IntValue{456}); e != nil { 88 t.Fatalf("Cannot assign value: %s", e) 89 } 90 91 if v, e := se.Value("hoge"); e != nil || v != (StringValue{"x"}) { 92 t.Fatalf("Invalid value: %s / error: %e", v, e) 93 } 94 if v, e := se.Value("foo"); e != nil || v != (IntValue{123}) { 95 t.Fatalf("Invalid value: %s / error: %e", v, e) 96 } 97 if v, e := se.Value("foo2"); e != nil || v != (IntValue{456}) { 98 t.Fatalf("Invalid value: %s / error: %e", v, e) 99 } 100 //if v, e := se.Value("bar"); e != nil || v != (ArrayValue{[...]int{1, 2, 3}}) { 101 // t.Fatalf("Invalid value: %s / error: %e", v, e) 102 //} 103 if v, e := se.Value("xxx"); e.Error() != "Unknown variable xxx" || v != nil { 104 t.Fatalf("Invalid value: %s / error: %e", v, e) 105 } 106 107 nm := make(map[string]Value) 108 nm["hoge"] = StringValue{"y"} 109 nm["123"] = IntValue{0} 110 se2 := CreateMixedEnvironment(se, nm) 111 112 if v, e := se2.Value("hoge"); e != nil || v != (StringValue{"y"}) { 113 t.Fatalf("Invalid value: %s / error: %e", v, e) 114 } 115 if v, e := se2.Value("foo"); e != nil || v != (IntValue{123}) { 116 t.Fatalf("Invalid value: %s / error: %e", v, e) 117 } 118 if v, e := se2.Value("foo2"); e != nil || v != (IntValue{456}) { 119 t.Fatalf("Invalid value: %s / error: %e", v, e) 120 } 121 //if v, e := se2.Value("bar"); e != nil || v != (Value{[...]int{1, 2, 3}}) { 122 // t.Fatalf("Invalid value: %s / error: %e", v, e) 123 //} 124 if v, e := se2.Value("123"); e != nil || v != (IntValue{0}) { 125 t.Fatalf("Invalid value: %s / error: %e", v, e) 126 } 127 if v, e := se2.Value("xxx"); e.Error() != "Unknown variable xxx" || v != nil { 128 t.Fatalf("Invalid value: %s / error: %e", v, e) 129 } 130 }