Skip to content

Commit

Permalink
add missing tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ktr0731 committed Oct 23, 2022
1 parent 0495e5d commit b222816
Show file tree
Hide file tree
Showing 8 changed files with 207 additions and 72 deletions.
202 changes: 130 additions & 72 deletions fuzzyfinder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,73 +122,126 @@ func TestFind(t *testing.T) {

cases := map[string]struct {
events []tcell.Event
opts []fuzzyfinder.Option
}{
"initial": {},
"input lo": {runes("lo")},
"input glow": {runes("glow")},
"arrow up-down": {keys([]input{
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyDown, rune(tcell.KeyDown), tcell.ModNone},
}...)},
"arrow left-right": {append(runes("ゆるふわ樹海"), keys([]input{
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyRight, rune(tcell.KeyRight), tcell.ModNone},
}...)...)},
"backspace": {append(runes("adr .-"), keys([]input{
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
}...)...)},
"backspace empty": {keys(input{tcell.KeyBackspace2, rune(tcell.KeyBackspace2), tcell.ModNone})},
"backspace2": {append(runes("オレンジ"), keys([]input{
{tcell.KeyBackspace2, rune(tcell.KeyBackspace2), tcell.ModNone},
{tcell.KeyBackspace2, rune(tcell.KeyBackspace2), tcell.ModNone},
}...)...)},
"arrow left backspace": {append(runes("オレンジ"), keys([]input{
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
}...)...)},
"delete": {append(runes("オレンジ"), keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyDelete, rune(tcell.KeyDelete), tcell.ModNone},
}...)...)},
"delete empty": {keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyDelete, rune(tcell.KeyDelete), tcell.ModNone},
}...)},
"ctrl-e": {append(runes("恋をしたのは"), keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyCtrlE, 'E', tcell.ModCtrl},
}...)...)},
"ctrl-w": {append(runes("ハロ / ハワユ"), keys(input{tcell.KeyCtrlW, 'W', tcell.ModCtrl})...)},
"ctrl-w empty": {keys(input{tcell.KeyCtrlW, 'W', tcell.ModCtrl})},
"ctrl-u": {append(runes("恋をしたのは"), keys([]input{
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyCtrlU, 'U', tcell.ModCtrl},
{tcell.KeyRight, rune(tcell.KeyRight), tcell.ModNone},
}...)...)},
"long item": {keys([]input{
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
}...)},
"paging": {keys([]input{
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
}...)},
"tab doesn't work": {keys(input{tcell.KeyTab, rune(tcell.KeyTab), tcell.ModNone})},
"backspace doesnt change x if cursorX is 0": {append(runes("a"), keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
{tcell.KeyCtrlF, 'F', tcell.ModCtrl},
}...)...)},
"input lo": {events: runes("lo")},
"input glow": {events: runes("glow")},
"arrow up-down": {
events: keys([]input{
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyDown, rune(tcell.KeyDown), tcell.ModNone},
}...)},
"arrow left-right": {
events: append(runes("ゆるふわ樹海"), keys([]input{
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyRight, rune(tcell.KeyRight), tcell.ModNone},
}...)...),
},
"backspace": {
events: append(runes("adr .-"), keys([]input{
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
}...)...),
},
"backspace empty": {events: keys(input{tcell.KeyBackspace2, rune(tcell.KeyBackspace2), tcell.ModNone})},
"backspace2": {
events: append(runes("オレンジ"), keys([]input{
{tcell.KeyBackspace2, rune(tcell.KeyBackspace2), tcell.ModNone},
{tcell.KeyBackspace2, rune(tcell.KeyBackspace2), tcell.ModNone},
}...)...),
},
"arrow left backspace": {
events: append(runes("オレンジ"), keys([]input{
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
}...)...),
},
"delete": {
events: append(runes("オレンジ"), keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyDelete, rune(tcell.KeyDelete), tcell.ModNone},
}...)...),
},
"delete empty": {
events: keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyDelete, rune(tcell.KeyDelete), tcell.ModNone},
}...),
},
"ctrl-e": {
events: append(runes("恋をしたのは"), keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyCtrlE, 'E', tcell.ModCtrl},
}...)...),
},
"ctrl-w": {events: append(runes("ハロ / ハワユ"), keys(input{tcell.KeyCtrlW, 'W', tcell.ModCtrl})...)},
"ctrl-w empty": {events: keys(input{tcell.KeyCtrlW, 'W', tcell.ModCtrl})},
"ctrl-u": {
events: append(runes("恋をしたのは"), keys([]input{
{tcell.KeyLeft, rune(tcell.KeyLeft), tcell.ModNone},
{tcell.KeyCtrlU, 'U', tcell.ModCtrl},
{tcell.KeyRight, rune(tcell.KeyRight), tcell.ModNone},
}...)...),
},
"pg-up": {
events: keys([]input{
{tcell.KeyPgUp, rune(tcell.KeyPgUp), tcell.ModNone},
}...),
},
"pg-up twice": {
events: keys([]input{
{tcell.KeyPgUp, rune(tcell.KeyPgUp), tcell.ModNone},
{tcell.KeyPgUp, rune(tcell.KeyPgUp), tcell.ModNone},
}...),
},
"pg-dn": {
events: keys([]input{
{tcell.KeyPgUp, rune(tcell.KeyPgUp), tcell.ModNone},
{tcell.KeyPgUp, rune(tcell.KeyPgUp), tcell.ModNone},
{tcell.KeyPgDn, rune(tcell.KeyPgDn), tcell.ModNone},
}...),
},
"pg-dn twice": {
events: keys([]input{
{tcell.KeyPgUp, rune(tcell.KeyPgUp), tcell.ModNone},
{tcell.KeyPgUp, rune(tcell.KeyPgUp), tcell.ModNone},
{tcell.KeyPgDn, rune(tcell.KeyPgDn), tcell.ModNone},
{tcell.KeyPgDn, rune(tcell.KeyPgDn), tcell.ModNone},
}...),
},
"long item": {
events: keys([]input{
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
}...),
},
"paging": {
events: keys([]input{
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
{tcell.KeyUp, rune(tcell.KeyUp), tcell.ModNone},
}...),
},
"tab doesn't work": {events: keys(input{tcell.KeyTab, rune(tcell.KeyTab), tcell.ModNone})},
"backspace doesnt change x if cursorX is 0": {
events: append(runes("a"), keys([]input{
{tcell.KeyCtrlA, 'A', tcell.ModCtrl},
{tcell.KeyBackspace, rune(tcell.KeyBackspace), tcell.ModNone},
{tcell.KeyCtrlF, 'F', tcell.ModCtrl},
}...)...),
},
"cursor begins at top": {opts: []fuzzyfinder.Option{fuzzyfinder.WithCursorPosition(fuzzyfinder.CursorPositionTop)}},
"header line": {opts: []fuzzyfinder.Option{fuzzyfinder.WithHeader("Search?")}},
"header line which exceeds max charaters": {opts: []fuzzyfinder.Option{fuzzyfinder.WithHeader("Waht do you want to search for?")}},
}

for name, c := range cases {
Expand All @@ -203,19 +256,24 @@ func TestFind(t *testing.T) {
events = append(events, key(input{tcell.KeyEsc, rune(tcell.KeyEsc), tcell.ModNone}))
term.SetEventsV2(events...)

opts := append(
c.opts,
fuzzyfinder.WithPreviewWindow(func(i, width, height int) string {
if i == -1 {
return "not found"
}
return "Name: " + tracks[i].Name + "\nArtist: " + tracks[i].Artist
}),
fuzzyfinder.WithMode(fuzzyfinder.ModeCaseSensitive),
)

assertWithGolden(t, func(t *testing.T) string {
_, err := f.Find(
tracks,
func(i int) string {
return tracks[i].Name
},
fuzzyfinder.WithPreviewWindow(func(i, width, height int) string {
if i == -1 {
return "not found"
}
return "Name: " + tracks[i].Name + "\nArtist: " + tracks[i].Artist
}),
fuzzyfinder.WithMode(fuzzyfinder.ModeCaseSensitive),
opts...,
)
if !errors.Is(err, fuzzyfinder.ErrAbort) {
t.Fatalf("Find must return ErrAbort, but got '%s'", err)
Expand Down
11 changes: 11 additions & 0 deletions testdata/fixtures/testfind-cursor_begins_at_top.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ICHIDAIJI ┌────────────────────────────┐
メーベル │ Name: Catch the Moment │
glow │ Artist: LiSA │
closing │ │
ソラニン │ │
adrenaline!!! │ │
ヒトリノ夜 │ │
あの日自分が出て行ってや.. │ │
9/9 │ │
> █ └────────────────────────────┘

11 changes: 11 additions & 0 deletions testdata/fixtures/testfind-header_line.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
メーベル ┌────────────────────────────┐
glow │ Name: あの日自分が出て行.. │
closing │ Artist: │
ソラニン │ │
adrenaline!!! │ │
ヒトリノ夜 │ │
> あの日自分が出て行ってや.. │ │
9/9 │ │
Search? │ │
> █ └────────────────────────────┘

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
メーベル ┌────────────────────────────┐
glow │ Name: あの日自分が出て行.. │
closing │ Artist: │
ソラニン │ │
adrenaline!!! │ │
ヒトリノ夜 │ │
> あの日自分が出て行ってや.. │ │
9/9 │ │
Waht do you want to searc.. │ │
> █ └────────────────────────────┘

11 changes: 11 additions & 0 deletions testdata/fixtures/testfind-pg-dn.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Catch the Moment ┌────────────────────────────┐
ICHIDAIJI │ Name: ヒトリノ夜 │
メーベル │ Artist: ポルノグラフィテ.. │
glow │ │
closing │ │
ソラニン │ │
adrenaline!!! │ │
> ヒトリノ夜 │ │
9/9 │ │
> █ └────────────────────────────┘

11 changes: 11 additions & 0 deletions testdata/fixtures/testfind-pg-dn_twice.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ICHIDAIJI ┌────────────────────────────┐
メーベル │ Name: あの日自分が出て行.. │
glow │ Artist: │
closing │ │
ソラニン │ │
adrenaline!!! │ │
ヒトリノ夜 │ │
> あの日自分が出て行ってや.. │ │
9/9 │ │
> █ └────────────────────────────┘

11 changes: 11 additions & 0 deletions testdata/fixtures/testfind-pg-up.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
> ICHIDAIJI ┌────────────────────────────┐
メーベル │ Name: ICHIDAIJI │
glow │ Artist: ポルカドットステ.. │
closing │ │
ソラニン │ │
adrenaline!!! │ │
ヒトリノ夜 │ │
あの日自分が出て行ってや.. │ │
9/9 │ │
> █ └────────────────────────────┘

11 changes: 11 additions & 0 deletions testdata/fixtures/testfind-pg-up_twice.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
> Catch the Moment ┌────────────────────────────┐
ICHIDAIJI │ Name: Catch the Moment │
メーベル │ Artist: LiSA │
glow │ │
closing │ │
ソラニン │ │
adrenaline!!! │ │
ヒトリノ夜 │ │
9/9 │ │
> █ └────────────────────────────┘


0 comments on commit b222816

Please sign in to comment.