| package env |
| |
| import ( |
| "os" |
| "runtime" |
| "sort" |
| "testing" |
| |
| "gotest.tools/v3/assert" |
| "gotest.tools/v3/fs" |
| "gotest.tools/v3/skip" |
| ) |
| |
| func TestPatchFromUnset(t *testing.T) { |
| key, value := "FOO_IS_UNSET", "VALUE" |
| revert := Patch(t, key, value) |
| |
| assert.Assert(t, value == os.Getenv(key)) |
| revert() |
| _, isSet := os.LookupEnv(key) |
| assert.Assert(t, !isSet) |
| } |
| |
| func TestPatch(t *testing.T) { |
| skip.If(t, os.Getenv("PATH") == "") |
| oldVal := os.Getenv("PATH") |
| |
| key, value := "PATH", "NEWVALUE" |
| revert := Patch(t, key, value) |
| |
| assert.Assert(t, value == os.Getenv(key)) |
| revert() |
| assert.Assert(t, oldVal == os.Getenv(key)) |
| } |
| |
| func TestPatchAll(t *testing.T) { |
| oldEnv := os.Environ() |
| newEnv := map[string]string{ |
| "FIRST": "STARS", |
| "THEN": "MOON", |
| } |
| |
| revert := PatchAll(t, newEnv) |
| |
| actual := os.Environ() |
| sort.Strings(actual) |
| assert.DeepEqual(t, []string{"FIRST=STARS", "THEN=MOON"}, actual) |
| |
| revert() |
| assert.DeepEqual(t, sorted(oldEnv), sorted(os.Environ())) |
| } |
| |
| func TestPatchAllWindows(t *testing.T) { |
| skip.If(t, runtime.GOOS != "windows") |
| oldEnv := os.Environ() |
| newEnv := map[string]string{ |
| "FIRST": "STARS", |
| "THEN": "MOON", |
| "=FINAL": "SUN", |
| "=BAR": "", |
| } |
| |
| revert := PatchAll(t, newEnv) |
| |
| actual := os.Environ() |
| sort.Strings(actual) |
| assert.DeepEqual(t, []string{"=BAR=", "=FINAL=SUN", "FIRST=STARS", "THEN=MOON"}, actual) |
| |
| revert() |
| assert.DeepEqual(t, sorted(oldEnv), sorted(os.Environ())) |
| } |
| |
| func sorted(source []string) []string { |
| sort.Strings(source) |
| return source |
| } |
| |
| func TestToMap(t *testing.T) { |
| source := []string{ |
| "key=value", |
| "novaluekey", |
| "=foo=bar", |
| "z=singlecharkey", |
| "b", |
| "", |
| } |
| actual := ToMap(source) |
| expected := map[string]string{ |
| "key": "value", |
| "novaluekey": "", |
| "=foo": "bar", |
| "z": "singlecharkey", |
| "b": "", |
| "": "", |
| } |
| assert.DeepEqual(t, expected, actual) |
| } |
| |
| func TestChangeWorkingDir(t *testing.T) { |
| tmpDir := fs.NewDir(t, t.Name()) |
| defer tmpDir.Remove() |
| |
| origWorkDir, err := os.Getwd() |
| assert.NilError(t, err) |
| |
| reset := ChangeWorkingDir(t, tmpDir.Path()) |
| t.Run("changed to dir", func(t *testing.T) { |
| wd, err := os.Getwd() |
| assert.NilError(t, err) |
| assert.Equal(t, wd, tmpDir.Path()) |
| }) |
| |
| t.Run("reset dir", func(t *testing.T) { |
| reset() |
| wd, err := os.Getwd() |
| assert.NilError(t, err) |
| assert.Equal(t, wd, origWorkDir) |
| }) |
| } |