github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/edit/listing_nonwindows_test.go (about)

     1  //go:build !windows
     2  // +build !windows
     3  
     4  package edit
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  	"reflect"
    10  	"sort"
    11  	"testing"
    12  
    13  	"github.com/markusbkk/elvish/pkg/cli/term"
    14  	"github.com/markusbkk/elvish/pkg/store/storedefs"
    15  	"github.com/markusbkk/elvish/pkg/testutil"
    16  	"github.com/markusbkk/elvish/pkg/ui"
    17  )
    18  
    19  func TestLocationAddon(t *testing.T) {
    20  	f := setup(t, storeOp(func(s storedefs.Store) {
    21  		s.AddDir("/usr/bin", 1)
    22  		s.AddDir("/tmp", 1)
    23  		s.AddDir("/home/elf", 1)
    24  	}))
    25  
    26  	evals(f.Evaler,
    27  		`set edit:location:pinned = [/opt]`,
    28  		`set edit:location:hidden = [/tmp]`)
    29  	f.TTYCtrl.Inject(term.K('L', ui.Ctrl))
    30  
    31  	f.TestTTY(t,
    32  		"~> \n",
    33  		" LOCATION  ", Styles,
    34  		"********** ", term.DotHere, "\n",
    35  		"  * /opt                                          \n", Styles,
    36  		"++++++++++++++++++++++++++++++++++++++++++++++++++",
    37  		" 10 /home/elf\n",
    38  		" 10 /usr/bin",
    39  	)
    40  }
    41  
    42  func TestLocationAddon_Workspace(t *testing.T) {
    43  	f := setup(t, storeOp(func(s storedefs.Store) {
    44  		s.AddDir("/usr/bin", 1)
    45  		s.AddDir("ws/bin", 1)
    46  		s.AddDir("other-ws/bin", 1)
    47  	}))
    48  
    49  	testutil.ApplyDir(
    50  		testutil.Dir{
    51  			"ws1": testutil.Dir{
    52  				"bin": testutil.Dir{},
    53  				"tmp": testutil.Dir{}}})
    54  	err := os.Chdir("ws1/tmp")
    55  	if err != nil {
    56  		t.Skip("chdir:", err)
    57  	}
    58  
    59  	evals(f.Evaler,
    60  		`set edit:location:workspaces = [&ws=$E:HOME/ws.]`)
    61  
    62  	f.TTYCtrl.Inject(term.K('L', ui.Ctrl))
    63  	f.TestTTY(t,
    64  		"~/ws1/tmp> \n",
    65  		" LOCATION  ", Styles,
    66  		"********** ", term.DotHere, "\n",
    67  		" 10 ws/bin                                        \n", Styles,
    68  		"++++++++++++++++++++++++++++++++++++++++++++++++++",
    69  		" 10 /usr/bin",
    70  	)
    71  
    72  	f.TTYCtrl.Inject(term.K(ui.Enter))
    73  	f.TestTTY(t, "~/ws1/bin> ", term.DotHere)
    74  }
    75  
    76  func TestLocation_AddDir(t *testing.T) {
    77  	f := setup(t)
    78  
    79  	testutil.ApplyDir(
    80  		testutil.Dir{
    81  			"bin": testutil.Dir{},
    82  			"ws1": testutil.Dir{
    83  				"bin": testutil.Dir{}}})
    84  	evals(f.Evaler, `set edit:location:workspaces = [&ws=$E:HOME/ws.]`)
    85  
    86  	chdir := func(path string) {
    87  		err := f.Evaler.Chdir(path)
    88  		if err != nil {
    89  			t.Skip("chdir:", err)
    90  		}
    91  	}
    92  	chdir("bin")
    93  	chdir("../ws1/bin")
    94  
    95  	entries, err := f.Store.Dirs(map[string]struct{}{})
    96  	if err != nil {
    97  		t.Error("unable to list dir history:", err)
    98  	}
    99  	dirs := make([]string, len(entries))
   100  	for i, entry := range entries {
   101  		dirs[i] = entry.Path
   102  	}
   103  
   104  	wantDirs := []string{
   105  		filepath.Join(f.Home, "bin"),
   106  		filepath.Join(f.Home, "ws1", "bin"),
   107  		filepath.Join("ws", "bin"),
   108  	}
   109  
   110  	sort.Strings(dirs)
   111  	sort.Strings(wantDirs)
   112  	if !reflect.DeepEqual(dirs, wantDirs) {
   113  		t.Errorf("got dirs %v, want %v", dirs, wantDirs)
   114  	}
   115  }