k9s/internal/model/history_test.go

190 lines
3.0 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package model_test
import (
"fmt"
"testing"
"github.com/derailed/k9s/internal/model"
"github.com/stretchr/testify/assert"
)
func TestHistoryClear(t *testing.T) {
h := model.NewHistory(3)
for i := 1; i < 5; i++ {
h.Push(fmt.Sprintf("cmd%d", i))
}
assert.Equal(t, []string{"cmd1", "cmd2", "cmd3"}, h.List())
h.Clear()
assert.True(t, h.Empty())
}
func TestHistoryPush(t *testing.T) {
h := model.NewHistory(3)
for i := 1; i < 4; i++ {
h.Push(fmt.Sprintf("cmd%d", i))
}
h.Push("cmd1")
h.Push("")
assert.Equal(t, []string{"cmd1", "cmd2", "cmd3"}, h.List())
}
func TestHistoryTop(t *testing.T) {
uu := map[string]struct {
push []string
pop int
cmd string
ok bool
}{
"empty": {},
"no-one-left": {
push: []string{"cmd1", "cmd2", "cmd3"},
pop: 3,
},
"last": {
push: []string{"cmd1", "cmd2", "cmd3"},
cmd: "cmd3",
ok: true,
},
"middle": {
push: []string{"cmd1", "cmd2", "cmd3"},
pop: 1,
cmd: "cmd2",
ok: true,
},
"first": {
push: []string{"cmd1", "cmd2", "cmd3"},
pop: 2,
cmd: "cmd1",
ok: true,
},
}
for k, u := range uu {
t.Run(k, func(t *testing.T) {
h := model.NewHistory(3)
for _, cmd := range u.push {
h.Push(cmd)
}
for range u.pop {
_ = h.Pop()
}
cmd, ok := h.Top()
assert.Equal(t, u.ok, ok)
assert.Equal(t, u.cmd, cmd)
})
}
}
func TestHistoryBack(t *testing.T) {
uu := map[string]struct {
push []string
pop int
cmd string
ok bool
}{
"empty": {},
"pop-all": {
push: []string{"cmd1", "cmd2", "cmd3"},
pop: 3,
},
"pop-none": {
push: []string{"cmd1", "cmd2", "cmd3"},
cmd: "cmd2",
ok: true,
},
"pop-one": {
push: []string{"cmd1", "cmd2", "cmd3"},
pop: 1,
cmd: "cmd1",
ok: true,
},
"pop-to-first": {
push: []string{"cmd1", "cmd2", "cmd3"},
pop: 2,
},
}
for k, u := range uu {
t.Run(k, func(t *testing.T) {
h := model.NewHistory(3)
for _, cmd := range u.push {
h.Push(cmd)
}
for range u.pop {
_ = h.Pop()
}
cmd, ok := h.Back()
assert.Equal(t, u.ok, ok)
assert.Equal(t, u.cmd, cmd)
})
}
}
func TestHistoryForward(t *testing.T) {
uu := map[string]struct {
push []string
back int
cmd string
ok bool
}{
"empty": {},
"back-2": {
push: []string{"cmd1", "cmd2", "cmd3"},
back: 2,
cmd: "cmd2",
ok: true,
},
"back-1": {
push: []string{"cmd1", "cmd2", "cmd3"},
back: 1,
cmd: "cmd3",
ok: true,
},
"back-all": {
push: []string{"cmd1", "cmd2", "cmd3"},
back: 3,
cmd: "cmd2",
ok: true,
},
"back-none": {
push: []string{"cmd1", "cmd2", "cmd3"},
back: 0,
},
}
for k, u := range uu {
t.Run(k, func(t *testing.T) {
h := model.NewHistory(3)
for _, cmd := range u.push {
h.Push(cmd)
}
for range u.back {
_, _ = h.Back()
}
cmd, ok := h.Forward()
assert.Equal(t, u.ok, ok)
assert.Equal(t, u.cmd, cmd)
})
}
}