github.com/kolbycrouch/elvish@v0.14.1-0.20210614162631-215b9ac1c423/pkg/eval/pwd_test.go (about) 1 package eval_test 2 3 import ( 4 "errors" 5 "path/filepath" 6 "runtime" 7 "testing" 8 9 . "src.elv.sh/pkg/eval" 10 "src.elv.sh/pkg/testutil" 11 12 . "src.elv.sh/pkg/eval/evaltest" 13 "src.elv.sh/pkg/eval/vars" 14 ) 15 16 func TestBuiltinPwd(t *testing.T) { 17 tmpHome, cleanup := testutil.InTempHome() 18 defer cleanup() 19 20 testutil.MustMkdirAll("dir1") 21 testutil.MustMkdirAll("dir2") 22 dir1 := filepath.Join(tmpHome, "dir1") 23 dir2 := filepath.Join(tmpHome, "dir2") 24 25 Test(t, 26 That(`pwd=dir1 put $pwd; put $pwd`).Puts(dir1, tmpHome), 27 That(`pwd=(num 1) put $pwd`).Throws(vars.ErrPathMustBeString, "pwd"), 28 ) 29 30 // We could separate these two test variants into separate unit test 31 // modules but that's overkill for this situation and makes the 32 // equivalence between the two environments harder to see. 33 if runtime.GOOS == "windows" { 34 Test(t, 35 That(`cd $E:HOME\dir2; pwd=$E:HOME put $pwd; put $pwd`).Puts(tmpHome, dir2), 36 That(`cd $E:HOME\dir2; pwd=..\dir1 put $pwd; put $pwd`).Puts(dir1, dir2), 37 That(`cd $E:HOME\dir1; pwd=..\dir2 put $pwd; put $pwd`).Puts(dir2, dir1), 38 ) 39 } else { 40 Test(t, 41 That(`cd ~/dir2; pwd=~ put $pwd; put $pwd`).Puts(tmpHome, dir2), 42 That(`cd ~/dir2; pwd=~/dir1 put $pwd; put $pwd`).Puts(dir1, dir2), 43 That(`cd ~/dir1; pwd=../dir2 put $pwd; put $pwd`).Puts(dir2, dir1), 44 ) 45 } 46 } 47 48 // Verify the behavior when the CWD cannot be determined. 49 func TestBuiltinPwd_GetwdError(t *testing.T) { 50 origGetwd := Getwd 51 Getwd = mockGetwdWithError 52 defer func() { Getwd = origGetwd }() 53 54 Test(t, 55 That(`put $pwd`).Puts("/unknown/pwd"), 56 ) 57 } 58 59 func mockGetwdWithError() (string, error) { 60 return "", errors.New("cwd unknown") 61 }