package ui import ( "testing" "time" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) // Pressing Down in an empty table used to loop forever in tview because the // placeholder row is not selectable. func TestEmptyTableDownDoesNotHang(t *testing.T) { tbl := tview.NewTable().SetSelectable(true, false).SetFixed(1, 0) restoreSelection(tbl, 0, 0, "empty") screen := tcell.NewSimulationScreen("") if err := screen.Init(); err != nil { t.Fatal(err) } defer screen.Fini() screen.SetSize(80, 10) tbl.SetRect(0, 0, 80, 10) done := make(chan struct{}) go func() { tbl.Draw(screen) tbl.InputHandler()(tcell.NewEventKey(tcell.KeyDown, 0, 0), func(tview.Primitive) {}) tbl.InputHandler()(tcell.NewEventKey(tcell.KeyUp, 0, 0), func(tview.Primitive) {}) tbl.Draw(screen) close(done) }() select { case <-done: case <-time.After(2 * time.Second): t.Fatal("table input handler hung on an empty table") } }