fix: stop paging up or down on a single row table from crashing
page_up and page_down wrap the selection with a modulus of items_len - 1, which is a remainder by zero when the table holds exactly one row. Ctrl-U or Ctrl-D on such a table panicked the TUI. Both now return early for tables of one row or fewer, mirroring the existing empty-table guard; tables of two or more rows keep their existing paging arithmetic.
This commit is contained in:
2 files changed
+55
-2
No files matched your search
@@ -100,7 +100,7 @@ where
|
||||
{
|
||||
fn page_down(&mut self) {
|
||||
let items_len = self.active_items().len();
|
||||
if items_len == 0 {
|
||||
if items_len <= 1 {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ where
|
||||
|
||||
fn page_up(&mut self) {
|
||||
let items_len = self.active_items().len();
|
||||
if items_len == 0 {
|
||||
if items_len <= 1 {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -239,6 +239,59 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_stateful_table_pagination_on_single_item_table_performs_no_op() {
|
||||
let mut stateful_table: StatefulTable<String> = StatefulTable::default();
|
||||
stateful_table.set_items(vec!["Test 1".to_owned()]);
|
||||
|
||||
assert_some_eq_x!(stateful_table.state.selected(), 0);
|
||||
|
||||
stateful_table.page_down();
|
||||
|
||||
assert_some_eq_x!(stateful_table.state.selected(), 0);
|
||||
|
||||
stateful_table.page_up();
|
||||
|
||||
assert_some_eq_x!(stateful_table.state.selected(), 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_stateful_table_filtered_pagination_on_single_item_table_performs_no_op() {
|
||||
let mut filtered_stateful_table: StatefulTable<String> = StatefulTable::default();
|
||||
filtered_stateful_table.set_filtered_items(vec!["Test 1".to_owned()]);
|
||||
|
||||
assert_some_eq_x!(
|
||||
filtered_stateful_table
|
||||
.filtered_state
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.selected(),
|
||||
0
|
||||
);
|
||||
|
||||
filtered_stateful_table.page_down();
|
||||
|
||||
assert_some_eq_x!(
|
||||
filtered_stateful_table
|
||||
.filtered_state
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.selected(),
|
||||
0
|
||||
);
|
||||
|
||||
filtered_stateful_table.page_up();
|
||||
|
||||
assert_some_eq_x!(
|
||||
filtered_stateful_table
|
||||
.filtered_state
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.selected(),
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_stateful_table_pagination() {
|
||||
let mut stateful_table = StatefulTable::default();
|
||||
|
||||
Reference in new issue
Block a user