use self::view::View;
use super::*;
use pretty_assertions::assert_eq;
pub(crate) fn assert_rendered_view(
view: impl View,
expected: Vec<&str>,
buffer_width: u16,
buffer_height: u16,
) {
let mut buffer = Buffer::new(buffer_width, buffer_height);
let render_context = Context::new(Rect {
point: Point::zero(),
size: buffer.size.clone(),
});
view.render(
&mut ViewId::empty(),
render_context,
&mut AppState::new(),
&mut buffer,
);
let result: String = buffer.as_plain_str();
assert_eq!(result, expected.join("\n"));
}
#[test]
fn test_rendered_padded_text() {
let padded_text_view = text("RUST").padding(1);
let expected = vec![
" ", " RUST ", " ",
];
assert_rendered_view(padded_text_view, expected, 6, 3);
}
#[test]
fn test_vstack_of_texts() {
let vstack = vstack((text("Hello"), text("World"), text("!!!!!")));
let expected = vec![
"Hello", "World", "!!!!!", ];
let size = vstack.size(Size::max());
assert_rendered_view(vstack, expected, size.width, size.height);
}
#[test]
fn test_hstack_with_spacing() {
let hstack_view = hstack((text("A"), text("B"), text("C"))).spacing(2);
let expected = vec!["A B C"];
let size = hstack_view.size(Size::max());
assert_rendered_view(hstack_view, expected, size.width, size.height);
}
#[test]
fn test_vstack_with_padded_text() {
let vstack = vstack((text("A"), text("B").padding(1), text("C")));
let expected = vec![
"A ", " ", " B ", " ", "C ",
];
let size = vstack.size(Size::max());
assert_rendered_view(vstack, expected, size.width, size.height);
}
#[test]
fn test_alternating_hstack_vstack() {
let alternating_stack = vstack((
text("B"),
hstack((text("C"), text("D"), text("E"))),
text("F"),
));
let expected = vec![
"B ", "C D E", "F ", ];
let size = alternating_stack.size(Size::max());
assert_rendered_view(alternating_stack, expected, size.width, size.height);
}