Files
chkr/tests/ui_snapshot.rs
Lukas Wölfer f8b25e81bf
All checks were successful
Rust / build_and_test (push) Successful in 22s
test: improve testability of input events
2026-01-29 20:54:43 +01:00

62 lines
1.7 KiB
Rust

use ratatui::Terminal;
use ratatui::backend::TestBackend;
use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::style::Style;
use ratatui::widgets::{Block, Borders, List, ListItem, ListState};
fn render_list_into_buffer(
lines: &[&str],
marked: &[bool],
selected: Option<usize>,
width: u16,
height: u16,
) -> Buffer {
let backend = TestBackend::new(width, height);
let mut terminal = Terminal::new(backend).expect("create terminal");
let lines_vec: Vec<ListItem> = lines
.iter()
.zip(marked.iter())
.map(|(text, marked)| {
let prefix = if *marked { 'x' } else { ' ' };
ListItem::new(format!("[{prefix}] {text}"))
})
.collect();
let mut state = ListState::default();
state.select(selected);
terminal
.draw(|f| {
let size = Rect::new(0, 0, width, height);
let list = List::new(lines_vec.clone())
.block(
Block::default()
.borders(Borders::ALL)
.title("Lines (space to mark, q to quit)"),
)
.highlight_style(Style::default());
f.render_stateful_widget(list, size, &mut state);
})
.expect("draw");
// Extract the underlying backend buffer (clone to own it)
let backend = terminal.backend();
backend.buffer().clone()
}
#[test]
fn ui_snapshot_basic() {
let lines = ["first", "second", "third"];
let marked = [false, true, false];
let buf = render_list_into_buffer(&lines, &marked, Some(1), 40, 10);
// Use the buffer's debug representation for snapshotting
let out = format!("{buf:#?}");
insta::assert_snapshot!(out);
}