use buoyant::{
font::CharacterBufferFont,
layout::{Alignment, HorizontalAlignment, Layout, VerticalAlignment},
primitives::{Dimensions, Point, ProposedDimension, ProposedDimensions, Size},
render::Render,
render_target::FixedTextBuffer,
view::{Text, ViewExt},
};
mod common;
use common::make_render_tree;
#[test]
fn test_fixed_width() {
let font = CharacterBufferFont {};
let content = Text::new("123456", &font).frame().with_width(2);
let env = common::TestEnv::default();
assert_eq!(
content.layout(&Size::new(1, 1).into(), &env).resolved_size,
Dimensions::new(2, 1)
);
assert_eq!(
content
.layout(&Size::new(20, 123).into(), &env)
.resolved_size,
Dimensions::new(2, 3)
);
assert_eq!(
content
.layout(&Size::new(100, 1).into(), &env)
.resolved_size,
Dimensions::new(2, 1)
);
assert_eq!(
content.layout(&Size::new(1, 6).into(), &env).resolved_size,
Dimensions::new(2, 3)
);
}
#[test]
fn test_fixed_height() {
let font = CharacterBufferFont {};
let content = Text::new("123456", &font).frame().with_height(2);
let env = common::TestEnv::default();
assert_eq!(
content.layout(&Size::new(1, 1).into(), &env).resolved_size,
Dimensions::new(1, 2)
);
assert_eq!(
content
.layout(&Size::new(20, 123).into(), &env)
.resolved_size,
Dimensions::new(6, 2)
);
assert_eq!(
content
.layout(&Size::new(100, 1).into(), &env)
.resolved_size,
Dimensions::new(6, 2)
);
assert_eq!(
content.layout(&Size::new(2, 6).into(), &env).resolved_size,
Dimensions::new(2, 2)
);
}
#[test]
fn test_fixed_frame_compact_width_height() {
let font = CharacterBufferFont {};
let content = Text::new("123456", &font).frame_sized(2, 2);
let env = common::TestEnv::default();
assert_eq!(
content
.layout(
&ProposedDimensions {
width: ProposedDimension::Compact,
height: ProposedDimension::Compact
},
&env
)
.resolved_size,
Dimensions::new(2, 2)
);
assert_eq!(
content
.layout(
&ProposedDimensions {
width: ProposedDimension::Exact(2),
height: ProposedDimension::Exact(2)
},
&env
)
.resolved_size,
Dimensions::new(2, 2)
);
assert_eq!(
content
.layout(
&ProposedDimensions {
width: ProposedDimension::Exact(3),
height: ProposedDimension::Exact(3)
},
&env
)
.resolved_size,
Dimensions::new(2, 2)
);
}
#[test]
fn test_fixed_frame_infinite_width_height() {
let font = CharacterBufferFont {};
let content = Text::new("123456", &font).frame_sized(25, 25);
let env = common::TestEnv::default();
assert_eq!(
content
.layout(
&ProposedDimensions {
width: ProposedDimension::Infinite,
height: ProposedDimension::Infinite
},
&env
)
.resolved_size,
Dimensions::new(25, 25)
);
}
#[test]
fn test_render_frame_top_leading_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_alignment(Alignment::TopLeading)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), "aa ");
assert_eq!(buffer.text[1].iter().collect::<String>(), "bb ");
assert_eq!(buffer.text[2].iter().collect::<String>(), "cc ");
assert_eq!(buffer.text[3].iter().collect::<String>(), " ");
assert_eq!(buffer.text[4].iter().collect::<String>(), " ");
}
#[test]
fn test_render_frame_top_center_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_vertical_alignment(VerticalAlignment::Top)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " aa ");
assert_eq!(buffer.text[1].iter().collect::<String>(), " bb ");
assert_eq!(buffer.text[2].iter().collect::<String>(), " cc ");
assert_eq!(buffer.text[3].iter().collect::<String>(), " ");
assert_eq!(buffer.text[4].iter().collect::<String>(), " ");
}
#[test]
fn test_render_frame_top_trailing_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_alignment(Alignment::TopTrailing)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " aa");
assert_eq!(buffer.text[1].iter().collect::<String>(), " bb");
assert_eq!(buffer.text[2].iter().collect::<String>(), " cc");
assert_eq!(buffer.text[3].iter().collect::<String>(), " ");
assert_eq!(buffer.text[4].iter().collect::<String>(), " ");
}
#[test]
fn test_render_frame_center_leading_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_horizontal_alignment(HorizontalAlignment::Leading)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " ");
assert_eq!(buffer.text[1].iter().collect::<String>(), "aa ");
assert_eq!(buffer.text[2].iter().collect::<String>(), "bb ");
assert_eq!(buffer.text[3].iter().collect::<String>(), "cc ");
assert_eq!(buffer.text[4].iter().collect::<String>(), " ");
}
#[test]
fn test_render_frame_center_center_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " ");
assert_eq!(buffer.text[1].iter().collect::<String>(), " aa ");
assert_eq!(buffer.text[2].iter().collect::<String>(), " bb ");
assert_eq!(buffer.text[3].iter().collect::<String>(), " cc ");
assert_eq!(buffer.text[4].iter().collect::<String>(), " ");
}
#[test]
fn test_render_frame_center_trailing_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_horizontal_alignment(HorizontalAlignment::Trailing)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " ");
assert_eq!(buffer.text[1].iter().collect::<String>(), " aa");
assert_eq!(buffer.text[2].iter().collect::<String>(), " bb");
assert_eq!(buffer.text[3].iter().collect::<String>(), " cc");
assert_eq!(buffer.text[4].iter().collect::<String>(), " ");
}
#[test]
fn test_render_frame_bottom_leading_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_alignment(Alignment::TopLeading)
.with_horizontal_alignment(HorizontalAlignment::Leading)
.with_vertical_alignment(VerticalAlignment::Bottom)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " ");
assert_eq!(buffer.text[1].iter().collect::<String>(), " ");
assert_eq!(buffer.text[2].iter().collect::<String>(), "aa ");
assert_eq!(buffer.text[3].iter().collect::<String>(), "bb ");
assert_eq!(buffer.text[4].iter().collect::<String>(), "cc ");
}
#[test]
fn test_render_frame_bottom_center_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_vertical_alignment(VerticalAlignment::Bottom)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " ");
assert_eq!(buffer.text[1].iter().collect::<String>(), " ");
assert_eq!(buffer.text[2].iter().collect::<String>(), " aa ");
assert_eq!(buffer.text[3].iter().collect::<String>(), " bb ");
assert_eq!(buffer.text[4].iter().collect::<String>(), " cc ");
}
#[test]
fn test_render_frame_bottom_trailing_alignment() {
let font = CharacterBufferFont {};
let content = Text::new("aa\nbb\ncc", &font)
.frame_sized(6, 5)
.with_alignment(Alignment::BottomTrailing)
.foreground_color(' ');
let mut buffer = FixedTextBuffer::<6, 5>::default();
let tree = make_render_tree(&content, buffer.size());
tree.render(&mut buffer, &' ', Point::zero());
assert_eq!(buffer.text[0].iter().collect::<String>(), " ");
assert_eq!(buffer.text[1].iter().collect::<String>(), " ");
assert_eq!(buffer.text[2].iter().collect::<String>(), " aa");
assert_eq!(buffer.text[3].iter().collect::<String>(), " bb");
assert_eq!(buffer.text[4].iter().collect::<String>(), " cc");
}