github.com/kolbycrouch/elvish@v0.14.1-0.20210614162631-215b9ac1c423/pkg/store/storetest/cmd.go (about) 1 package storetest 2 3 import ( 4 "testing" 5 6 "src.elv.sh/pkg/store" 7 ) 8 9 var ( 10 cmds = []string{"echo foo", "put bar", "put lorem", "echo bar"} 11 searches = []struct { 12 next bool 13 seq int 14 prefix string 15 wantedSeq int 16 wantedCmd string 17 wantedErr error 18 }{ 19 {false, 5, "echo", 4, "echo bar", nil}, 20 {false, 5, "put", 3, "put lorem", nil}, 21 {false, 4, "echo", 1, "echo foo", nil}, 22 {false, 3, "f", 0, "", store.ErrNoMatchingCmd}, 23 {false, 1, "", 0, "", store.ErrNoMatchingCmd}, 24 25 {true, 1, "echo", 1, "echo foo", nil}, 26 {true, 1, "put", 2, "put bar", nil}, 27 {true, 2, "echo", 4, "echo bar", nil}, 28 {true, 4, "put", 0, "", store.ErrNoMatchingCmd}, 29 } 30 ) 31 32 // TestCmd tests the command history functionality of a Store. 33 func TestCmd(t *testing.T, tStore store.Store) { 34 startSeq, err := tStore.NextCmdSeq() 35 if startSeq != 1 || err != nil { 36 t.Errorf("tStore.NextCmdSeq() => (%v, %v), want (1, nil)", 37 startSeq, err) 38 } 39 for i, cmd := range cmds { 40 wantSeq := startSeq + i 41 seq, err := tStore.AddCmd(cmd) 42 if seq != wantSeq || err != nil { 43 t.Errorf("tStore.AddCmd(%v) => (%v, %v), want (%v, nil)", 44 cmd, seq, err, wantSeq) 45 } 46 } 47 endSeq, err := tStore.NextCmdSeq() 48 wantedEndSeq := startSeq + len(cmds) 49 if endSeq != wantedEndSeq || err != nil { 50 t.Errorf("tStore.NextCmdSeq() => (%v, %v), want (%v, nil)", 51 endSeq, err, wantedEndSeq) 52 } 53 for i, wantedCmd := range cmds { 54 seq := i + startSeq 55 cmd, err := tStore.Cmd(seq) 56 if cmd != wantedCmd || err != nil { 57 t.Errorf("tStore.Cmd(%v) => (%v, %v), want (%v, nil)", 58 seq, cmd, err, wantedCmd) 59 } 60 } 61 for _, tt := range searches { 62 f := tStore.PrevCmd 63 funcname := "tStore.PrevCmd" 64 if tt.next { 65 f = tStore.NextCmd 66 funcname = "tStore.NextCmd" 67 } 68 cmd, err := f(tt.seq, tt.prefix) 69 wantedCmd := store.Cmd{Text: tt.wantedCmd, Seq: tt.wantedSeq} 70 if cmd != wantedCmd || !matchErr(err, tt.wantedErr) { 71 t.Errorf("%s(%v, %v) => (%v, %v), want (%v, %v)", 72 funcname, tt.seq, tt.prefix, cmd, err, wantedCmd, tt.wantedErr) 73 } 74 } 75 76 if err := tStore.DelCmd(1); err != nil { 77 t.Error("Failed to remove cmd") 78 } 79 if seq, err := tStore.Cmd(1); !matchErr(err, store.ErrNoMatchingCmd) { 80 t.Errorf("Cmd(1) => (%v, %v), want (%v, %v)", 81 seq, err, "", store.ErrNoMatchingCmd) 82 } 83 }