use ratatui::backend::TestBackend;
use ratatui::layout::Position;
use ratatui::Terminal;
pub const TERM_WIDTH: u16 = 80;
pub const TERM_HEIGHT: u16 = 24;
fn row_text(buf: &ratatui::buffer::Buffer, y: u16) -> String {
(0..buf.area.width)
.map(|x| {
buf.cell(Position::new(x, y))
.map_or(" ", ratatui::buffer::Cell::symbol)
})
.collect::<String>()
.trim_end()
.to_string()
}
fn buffer_text(buf: &ratatui::buffer::Buffer) -> String {
(0..buf.area.height)
.map(|y| row_text(buf, y))
.collect::<Vec<_>>()
.join("\n")
}
pub fn render_to_text(draw_fn: impl FnOnce(&mut ratatui::Frame)) -> String {
let backend = TestBackend::new(TERM_WIDTH, TERM_HEIGHT);
let mut terminal = Terminal::new(backend).unwrap();
terminal.draw(|f| draw_fn(f)).unwrap();
buffer_text(terminal.backend().buffer())
}