use saorsa_tui::buffer::ScreenBuffer;
use saorsa_tui::geometry::{Rect, Size};
use saorsa_tui::segment::Segment;
use saorsa_tui::widget::{Container, Label, StaticWidget, Widget};
fn render_widget_to_text(widget: &dyn Widget, width: u16, height: u16) -> String {
let mut buf = ScreenBuffer::new(Size::new(width, height));
widget.render(Rect::new(0, 0, width, height), &mut buf);
let mut result = String::new();
for y in 0..height {
for x in 0..width {
match buf.get(x, y) {
Some(cell) => {
if cell.is_blank() {
result.push(' ');
} else {
result.push_str(&cell.grapheme);
}
}
None => result.push(' '),
}
}
result.push('\n');
}
result
}
#[test]
fn snapshot_label_empty() {
let label = Label::new("");
let rendered = render_widget_to_text(&label, 20, 1);
insta::assert_snapshot!("label_empty", rendered);
}
#[test]
fn snapshot_label_short() {
let label = Label::new("Hello");
let rendered = render_widget_to_text(&label, 20, 1);
insta::assert_snapshot!("label_short", rendered);
}
#[test]
fn snapshot_label_long() {
let label = Label::new("This is a very long label text");
let rendered = render_widget_to_text(&label, 15, 1);
insta::assert_snapshot!("label_long", rendered);
}
#[test]
fn snapshot_static_widget() {
let segments = vec![
Segment::new("Line 1"),
Segment::new("Line 2"),
Segment::new("Line 3"),
];
let widget = StaticWidget::new(segments);
let rendered = render_widget_to_text(&widget, 30, 3);
insta::assert_snapshot!("static_widget", rendered);
}
#[test]
fn snapshot_container_empty() {
let container = Container::new();
let rendered = render_widget_to_text(&container, 20, 5);
insta::assert_snapshot!("container_empty", rendered);
}