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  }