k9s/internal/model/text_test.go

91 lines
1.7 KiB
Go

package model_test
import (
"testing"
"github.com/derailed/k9s/internal/model"
"github.com/sahilm/fuzzy"
"github.com/stretchr/testify/assert"
)
func TestNewText(t *testing.T) {
m := model.NewText()
lis := textLis{}
m.AddListener(&lis)
m.SetText("Hello World\nBumbleBeeTuna")
assert.Equal(t, 1, lis.changed)
assert.Equal(t, 2, lis.lines)
assert.Equal(t, 0, lis.filtered)
assert.Equal(t, 0, lis.matches)
}
func TestTextFilterRXMatch(t *testing.T) {
m := model.NewText()
lis := textLis{}
m.AddListener(&lis)
m.SetText("Hello World\nBumbleBeeTuna")
m.Filter("world")
assert.Equal(t, 1, lis.changed)
assert.Equal(t, 2, lis.lines)
assert.Equal(t, 1, lis.filtered)
assert.Equal(t, 1, lis.matches)
assert.Equal(t, 6, lis.index)
}
func TestTextFilterFuzzyMatch(t *testing.T) {
m := model.NewText()
lis := textLis{}
m.AddListener(&lis)
m.SetText("Hello World\nBumbleBeeTuna")
m.Filter("-f world")
assert.Equal(t, 1, lis.changed)
assert.Equal(t, 2, lis.lines)
assert.Equal(t, 1, lis.filtered)
assert.Equal(t, 1, lis.matches)
assert.Equal(t, 6, lis.index)
}
func TestTextFilterNoMatch(t *testing.T) {
m := model.NewText()
lis := textLis{}
m.AddListener(&lis)
m.SetText("Hello World\nBumbleBeeTuna")
m.Filter("blee")
assert.Equal(t, 1, lis.changed)
assert.Equal(t, 2, lis.lines)
assert.Equal(t, 1, lis.filtered)
assert.Equal(t, 0, lis.matches)
assert.Equal(t, 0, lis.index)
}
// Helpers...
type textLis struct {
changed, filtered, matches, lines, index int
}
func (l *textLis) TextChanged(ll []string) {
l.lines = len(ll)
l.changed++
}
func (l *textLis) TextFiltered(ll []string, mm fuzzy.Matches) {
l.matches = len(mm)
l.filtered++
if len(mm) > 0 && len(mm[0].MatchedIndexes) > 0 {
l.index = mm[0].MatchedIndexes[0]
}
}