github.com/ladydascalie/elvish@v0.0.0-20170703214355-2964dd3ece7f/store/cmd_test.go (about)

     1  package store
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/elves/elvish/store/storedefs"
     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, "", storedefs.ErrNoMatchingCmd},
    23  
    24  		{true, 1, "echo", 1, "echo foo", nil},
    25  		{true, 1, "put", 2, "put bar", nil},
    26  		{true, 2, "echo", 4, "echo bar", nil},
    27  		{true, 4, "put", 0, "", storedefs.ErrNoMatchingCmd},
    28  	}
    29  )
    30  
    31  func TestCmd(t *testing.T) {
    32  	startSeq, err := tStore.NextCmdSeq()
    33  	if startSeq != 1 || err != nil {
    34  		t.Errorf("tStore.NextCmdSeq() => (%v, %v), want (1, nil)",
    35  			startSeq, err)
    36  	}
    37  	for i, cmd := range cmds {
    38  		wantSeq := startSeq + i
    39  		seq, err := tStore.AddCmd(cmd)
    40  		if seq != wantSeq || err != nil {
    41  			t.Errorf("tStore.AddCmd(%v) => (%v, %v), want (%v, nil)",
    42  				cmd, seq, err, wantSeq)
    43  		}
    44  	}
    45  	endSeq, err := tStore.NextCmdSeq()
    46  	wantedEndSeq := startSeq + len(cmds)
    47  	if endSeq != wantedEndSeq || err != nil {
    48  		t.Errorf("tStore.NextCmdSeq() => (%v, %v), want (%v, nil)",
    49  			endSeq, err, wantedEndSeq)
    50  	}
    51  	for i, wantedCmd := range cmds {
    52  		seq := i + startSeq
    53  		cmd, err := tStore.Cmd(seq)
    54  		if cmd != wantedCmd || err != nil {
    55  			t.Errorf("tStore.Cmd(%v) => (%v, %v), want (%v, nil)",
    56  				seq, cmd, err, wantedCmd)
    57  		}
    58  	}
    59  	for _, tt := range searches {
    60  		f := tStore.PrevCmd
    61  		funcname := "tStore.PrevCmd"
    62  		if tt.next {
    63  			f = tStore.NextCmd
    64  			funcname = "tStore.NextCmd"
    65  		}
    66  		seq, cmd, err := f(tt.seq, tt.prefix)
    67  		if seq != tt.wantedSeq || cmd != tt.wantedCmd || err != tt.wantedErr {
    68  			t.Errorf("%s(%v, %v) => (%v, %v), want (%v, %v)",
    69  				funcname, tt.seq, tt.prefix,
    70  				seq, cmd, err,
    71  				tt.wantedSeq, tt.wantedCmd, tt.wantedErr)
    72  		}
    73  	}
    74  }