k9s/internal/model/cmd_buff_test.go

147 lines
2.7 KiB
Go

package model_test
import (
"testing"
"github.com/derailed/k9s/internal/model"
"github.com/stretchr/testify/assert"
)
type testListener struct {
text, suggestion string
act int
inact int
}
func (l *testListener) BufferChanged(t, s string) {
l.text, l.suggestion = t, s
}
func (l *testListener) BufferCompleted(t, s string) {
l.text, l.suggestion = t, s
}
func (l *testListener) BufferActive(s bool, _ model.BufferKind) {
if s {
l.act++
return
}
l.inact++
}
func TestCmdBuffActivate(t *testing.T) {
b, l := model.NewCmdBuff('>', model.CommandBuffer), testListener{}
b.AddListener(&l)
b.SetActive(true)
assert.Equal(t, 1, l.act)
assert.Equal(t, 0, l.inact)
assert.True(t, b.IsActive())
}
func TestCmdBuffDeactivate(t *testing.T) {
b, l := model.NewCmdBuff('>', model.CommandBuffer), testListener{}
b.AddListener(&l)
b.SetActive(false)
assert.Equal(t, 0, l.act)
assert.Equal(t, 1, l.inact)
assert.False(t, b.IsActive())
}
func TestCmdBuffChanged(t *testing.T) {
b, l := model.NewCmdBuff('>', model.CommandBuffer), testListener{}
b.AddListener(&l)
b.Add('b')
assert.Equal(t, 0, l.act)
assert.Equal(t, 0, l.inact)
assert.Equal(t, "b", l.text)
assert.Equal(t, "b", b.GetText())
b.Delete()
assert.Equal(t, 0, l.act)
assert.Equal(t, 0, l.inact)
assert.Equal(t, "", l.text)
assert.Equal(t, "", b.GetText())
b.Add('c')
b.ClearText(true)
assert.Equal(t, 0, l.act)
assert.Equal(t, 0, l.inact)
assert.Equal(t, "", l.text)
assert.Equal(t, "", b.GetText())
b.Add('c')
b.Reset()
assert.Equal(t, 0, l.act)
assert.Equal(t, 1, l.inact)
assert.Equal(t, "", l.text)
assert.Equal(t, "", b.GetText())
assert.True(t, b.Empty())
}
func TestCmdBuffAdd(t *testing.T) {
b := model.NewCmdBuff('>', model.CommandBuffer)
uu := []struct {
runes []rune
cmd string
}{
{[]rune{}, ""},
{[]rune{'a'}, "a"},
{[]rune{'a', 'b', 'c'}, "abc"},
}
for _, u := range uu {
for _, r := range u.runes {
b.Add(r)
}
assert.Equal(t, u.cmd, b.GetText())
b.Reset()
}
}
func TestCmdBuffDel(t *testing.T) {
b := model.NewCmdBuff('>', model.CommandBuffer)
uu := []struct {
runes []rune
cmd string
}{
{[]rune{}, ""},
{[]rune{'a'}, ""},
{[]rune{'a', 'b', 'c'}, "ab"},
}
for _, u := range uu {
for _, r := range u.runes {
b.Add(r)
}
b.Delete()
assert.Equal(t, u.cmd, b.GetText())
b.Reset()
}
}
func TestCmdBuffEmpty(t *testing.T) {
b := model.NewCmdBuff('>', model.CommandBuffer)
uu := []struct {
runes []rune
empty bool
}{
{[]rune{}, true},
{[]rune{'a'}, false},
{[]rune{'a', 'b', 'c'}, false},
}
for _, u := range uu {
for _, r := range u.runes {
b.Add(r)
}
assert.Equal(t, u.empty, b.Empty())
b.Reset()
}
}