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