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 }