src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/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 "src.elv.sh/pkg/must" 10 "src.elv.sh/pkg/testutil" 11 ) 12 13 func TestChdir(t *testing.T) { 14 dst := testutil.TempDir(t) 15 16 ev := NewEvaler() 17 18 argDirInBefore, argDirInAfter := "", "" 19 ev.BeforeChdir = append(ev.BeforeChdir, func(dir string) { argDirInBefore = dir }) 20 ev.AfterChdir = append(ev.AfterChdir, func(dir string) { argDirInAfter = dir }) 21 22 back := saveWd() 23 defer back() 24 25 err := ev.Chdir(dst) 26 27 if err != nil { 28 t.Errorf("Chdir => error %v", err) 29 } 30 if envPwd := os.Getenv(env.PWD); envPwd != dst { 31 t.Errorf("$PWD is %q after Chdir, want %q", envPwd, dst) 32 } 33 34 if argDirInBefore != dst { 35 t.Errorf("Chdir called before-hook with %q, want %q", 36 argDirInBefore, dst) 37 } 38 if argDirInAfter != dst { 39 t.Errorf("Chdir called before-hook with %q, want %q", 40 argDirInAfter, dst) 41 } 42 } 43 44 func TestChdirError(t *testing.T) { 45 testutil.InTempDir(t) 46 47 ev := NewEvaler() 48 err := ev.Chdir("i/dont/exist") 49 if err == nil { 50 t.Errorf("Chdir => no error when dir does not exist") 51 } 52 } 53 54 // Saves the current working directory, and returns a function for returning to 55 // it. 56 func saveWd() func() { 57 wd, err := os.Getwd() 58 if err != nil { 59 panic(err) 60 } 61 return func() { 62 must.Chdir(wd) 63 } 64 }