#![forbid(unsafe_code)]
use ftui_core::geometry::Rect;
use ftui_render::frame::Frame;
use ftui_render::grapheme_pool::GraphemePool;
use ftui_widgets::StatefulWidget;
use ftui_widgets::list::{List, ListItem, ListState};
#[test]
fn list_scroll_independent_of_selection() {
let items: Vec<ListItem> = (0..20)
.map(|i| ListItem::new(format!("Item {i}")))
.collect();
let list = List::new(items);
let area = Rect::new(0, 0, 10, 5);
let mut pool = GraphemePool::new();
let mut frame = Frame::new(10, 5, &mut pool);
let mut state = ListState::default();
state.select(Some(0));
StatefulWidget::render(&list, area, &mut frame, &mut state);
assert_eq!(state.offset, 0, "Offset should be 0 initially");
state.scroll_down(5, 20);
assert_eq!(state.offset, 5, "Offset should be 5 after scroll_down");
StatefulWidget::render(&list, area, &mut frame, &mut state);
assert_eq!(
state.offset, 5,
"Offset should remain 5, respecting manual scroll"
);
}