use crossterm::event::{Event, KeyModifiers, MouseButton, MouseEvent, MouseEventKind};
use ratatui::{Frame, Terminal, backend::TestBackend};
pub(super) fn create_test_terminal() -> Terminal<TestBackend> {
let backend = TestBackend::new(80, 24);
Terminal::new(backend).unwrap()
}
pub(super) fn buffer_to_string(buffer: &ratatui::buffer::Buffer) -> String {
(0..buffer.area.height)
.map(|y| {
(0..buffer.area.width)
.map(|x| buffer[(x, y)].symbol().chars().next().unwrap_or(' '))
.collect::<String>()
})
.collect::<Vec<_>>()
.join("\n")
+ "\n"
}
pub(super) fn mouse_click(col: u16, row: u16) -> Event {
Event::Mouse(MouseEvent {
kind: MouseEventKind::Down(MouseButton::Left),
column: col,
row,
modifiers: KeyModifiers::NONE,
})
}
pub(super) fn render_to_string<F>(terminal: &mut Terminal<TestBackend>, draw_fn: F) -> String
where
F: FnOnce(&mut Frame),
{
terminal.draw(draw_fn).unwrap();
buffer_to_string(terminal.backend().buffer())
}