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  }