github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/eval/builtin_fn_env_test.go (about) 1 package eval_test 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/markusbkk/elvish/pkg/eval" 8 9 . "github.com/markusbkk/elvish/pkg/eval/evaltest" 10 "github.com/markusbkk/elvish/pkg/eval/vals" 11 "github.com/markusbkk/elvish/pkg/eval/vars" 12 ) 13 14 func TestGetEnv(t *testing.T) { 15 restore := saveEnv("var") 16 defer restore() 17 18 os.Unsetenv("var") 19 Test(t, That(`get-env var`).Throws(eval.ErrNonExistentEnvVar)) 20 21 os.Setenv("var", "test1") 22 Test(t, 23 That(`get-env var`).Puts("test1"), 24 That(`put $E:var`).Puts("test1"), 25 ) 26 27 os.Setenv("var", "test2") 28 Test(t, 29 That(`get-env var`).Puts("test2"), 30 That(`put $E:var`).Puts("test2"), 31 ) 32 } 33 34 func TestHasEnv(t *testing.T) { 35 restore := saveEnv("var") 36 defer restore() 37 38 os.Setenv("var", "test1") 39 Test(t, That(`has-env var`).Puts(true)) 40 41 os.Unsetenv("var") 42 Test(t, That(`has-env var`).Puts(false)) 43 } 44 45 func TestSetEnv(t *testing.T) { 46 restore := saveEnv("var") 47 defer restore() 48 49 Test(t, That("set-env var test1").DoesNothing()) 50 if envVal := os.Getenv("var"); envVal != "test1" { 51 t.Errorf("got $E:var = %q, want 'test1'", envVal) 52 } 53 } 54 55 func TestSetEnv_PATH(t *testing.T) { 56 restore := saveEnv("PATH") 57 defer restore() 58 59 listSep := string(os.PathListSeparator) 60 Test(t, 61 That(`set-env PATH /test-path`), 62 That(`put $paths`).Puts(vals.MakeList("/test-path")), 63 That(`set paths = [/test-path2 $@paths]`), 64 That(`set paths = [$true]`).Throws(vars.ErrPathMustBeString), 65 That(`set paths = ["/invalid`+string(os.PathListSeparator)+`:path"]`). 66 Throws(vars.ErrPathContainsForbiddenChar), 67 That(`set paths = ["/invalid\000path"]`). 68 Throws(vars.ErrPathContainsForbiddenChar), 69 That(`get-env PATH`).Puts("/test-path2"+listSep+"/test-path"), 70 ) 71 } 72 73 func saveEnv(name string) func() { 74 oldValue, ok := os.LookupEnv(name) 75 return func() { 76 if ok { 77 os.Setenv(name, oldValue) 78 } 79 } 80 }