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

     1  package edit
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/markusbkk/elvish/pkg/cli/tk"
     7  	"github.com/markusbkk/elvish/pkg/eval/vals"
     8  	"github.com/markusbkk/elvish/pkg/store/storedefs"
     9  )
    10  
    11  func TestCommandHistory(t *testing.T) {
    12  	f := setup(t, storeOp(func(s storedefs.Store) {
    13  		s.AddCmd("echo 0")
    14  		s.AddCmd("echo 1")
    15  		s.AddCmd("echo 2")
    16  		s.AddCmd("echo 2")
    17  		s.AddCmd("echo 1")
    18  		s.AddCmd("echo 3")
    19  		s.AddCmd("echo 1")
    20  	}))
    21  
    22  	// TODO(xiaq): Test session history too. See NewHybridStore and NewMemStore.
    23  
    24  	evals(f.Evaler, `var @cmds = (edit:command-history)`)
    25  	testGlobal(t, f.Evaler,
    26  		"cmds",
    27  		vals.MakeList(
    28  			cmdMap(1, "echo 0"),
    29  			cmdMap(2, "echo 1"),
    30  			cmdMap(3, "echo 2"),
    31  			cmdMap(4, "echo 2"),
    32  			cmdMap(5, "echo 1"),
    33  			cmdMap(6, "echo 3"),
    34  			cmdMap(7, "echo 1"),
    35  		))
    36  
    37  	evals(f.Evaler, `var @cmds = (edit:command-history &newest-first)`)
    38  	testGlobal(t, f.Evaler,
    39  		"cmds",
    40  		vals.MakeList(
    41  			cmdMap(7, "echo 1"),
    42  			cmdMap(6, "echo 3"),
    43  			cmdMap(5, "echo 1"),
    44  			cmdMap(4, "echo 2"),
    45  			cmdMap(3, "echo 2"),
    46  			cmdMap(2, "echo 1"),
    47  			cmdMap(1, "echo 0"),
    48  		))
    49  
    50  	evals(f.Evaler, `var @cmds = (edit:command-history &dedup)`)
    51  	testGlobal(t, f.Evaler,
    52  		"cmds",
    53  		vals.MakeList(
    54  			cmdMap(1, "echo 0"),
    55  			cmdMap(4, "echo 2"),
    56  			cmdMap(6, "echo 3"),
    57  			cmdMap(7, "echo 1"),
    58  		))
    59  
    60  	evals(f.Evaler, `var @cmds = (edit:command-history &dedup &newest-first)`)
    61  	testGlobal(t, f.Evaler,
    62  		"cmds",
    63  		vals.MakeList(
    64  			cmdMap(7, "echo 1"),
    65  			cmdMap(6, "echo 3"),
    66  			cmdMap(4, "echo 2"),
    67  			cmdMap(1, "echo 0"),
    68  		))
    69  
    70  	evals(f.Evaler, `var @cmds = (edit:command-history &dedup &newest-first &cmd-only)`)
    71  	testGlobal(t, f.Evaler,
    72  		"cmds",
    73  		vals.MakeList(
    74  			"echo 1",
    75  			"echo 3",
    76  			"echo 2",
    77  			"echo 0",
    78  		))
    79  
    80  	testThatOutputErrorIsBubbled(t, f, "edit:command-history")
    81  	testThatOutputErrorIsBubbled(t, f, "edit:command-history &cmd-only")
    82  }
    83  
    84  func cmdMap(id int, cmd string) vals.Map {
    85  	return vals.MakeMap("id", id, "cmd", cmd)
    86  }
    87  
    88  func TestInsertLastWord(t *testing.T) {
    89  	f := setup(t, storeOp(func(s storedefs.Store) {
    90  		s.AddCmd("echo foo bar")
    91  	}))
    92  
    93  	evals(f.Evaler, "edit:insert-last-word")
    94  	wantBuf := tk.CodeBuffer{Content: "bar", Dot: 3}
    95  	if buf := codeArea(f.Editor.app).CopyState().Buffer; buf != wantBuf {
    96  		t.Errorf("buf = %v, want %v", buf, wantBuf)
    97  	}
    98  }