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  }