github.com/kolbycrouch/elvish@v0.14.1-0.20210614162631-215b9ac1c423/pkg/eval/chdir_test.go (about) 1 package eval_test 2 3 import ( 4 "os" 5 "testing" 6 7 "src.elv.sh/pkg/env" 8 . "src.elv.sh/pkg/eval" 9 10 . "src.elv.sh/pkg/eval/evaltest" 11 "src.elv.sh/pkg/parse" 12 "src.elv.sh/pkg/testutil" 13 ) 14 15 func TestChdir(t *testing.T) { 16 dst, cleanup := testutil.TestDir() 17 defer cleanup() 18 19 ev := NewEvaler() 20 21 argDirInBefore, argDirInAfter := "", "" 22 ev.AddBeforeChdir(func(dir string) { argDirInBefore = dir }) 23 ev.AddAfterChdir(func(dir string) { argDirInAfter = dir }) 24 25 back := saveWd() 26 defer back() 27 28 err := ev.Chdir(dst) 29 30 if err != nil { 31 t.Errorf("Chdir => error %v", err) 32 } 33 if envPwd := os.Getenv(env.PWD); envPwd != dst { 34 t.Errorf("$PWD is %q after Chdir, want %q", envPwd, dst) 35 } 36 37 if argDirInBefore != dst { 38 t.Errorf("Chdir called before-hook with %q, want %q", 39 argDirInBefore, dst) 40 } 41 if argDirInAfter != dst { 42 t.Errorf("Chdir called before-hook with %q, want %q", 43 argDirInAfter, dst) 44 } 45 } 46 47 func TestChdirElvishHooks(t *testing.T) { 48 dst, cleanup := testutil.TestDir() 49 defer cleanup() 50 51 back := saveWd() 52 defer back() 53 54 Test(t, 55 That(` 56 dir-in-before dir-in-after = '' '' 57 @before-chdir = [dst]{ dir-in-before = $dst } 58 @after-chdir = [dst]{ dir-in-after = $dst } 59 cd `+parse.Quote(dst)+` 60 put $dir-in-before $dir-in-after 61 `).Puts(dst, dst), 62 ) 63 } 64 65 func TestChdirError(t *testing.T) { 66 _, cleanup := testutil.InTestDir() 67 defer cleanup() 68 69 ev := NewEvaler() 70 err := ev.Chdir("i/dont/exist") 71 if err == nil { 72 t.Errorf("Chdir => no error when dir does not exist") 73 } 74 } 75 76 // Saves the current working directory, and returns a function for returning to 77 // it. 78 func saveWd() func() { 79 wd, err := os.Getwd() 80 if err != nil { 81 panic(err) 82 } 83 return func() { 84 testutil.MustChdir(wd) 85 } 86 }