From b7f150615d8aeb7715238c88589eee80a77af7d5 Mon Sep 17 00:00:00 2001 From: dtzxporter Date: Thu, 1 Feb 2024 21:06:54 -0500 Subject: [PATCH] Add a test for word wrapping fallback. --- tests/wrap_word_fallback.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/wrap_word_fallback.rs diff --git a/tests/wrap_word_fallback.rs b/tests/wrap_word_fallback.rs new file mode 100644 index 0000000..d32f2b5 --- /dev/null +++ b/tests/wrap_word_fallback.rs @@ -0,0 +1,34 @@ +use cosmic_text::{Attrs, Buffer, FontSystem, Metrics, Shaping, Wrap}; + +// Tests the ability to fallback to glyph wrapping when a word can't fit on a line by itself. +// No line should ever overflow the buffer size. +#[test] +fn wrap_word_fallback() { + let mut font_system = FontSystem::new(); + let metrics = Metrics::new(14.0, 20.0); + + let mut buffer = Buffer::new(&mut font_system, metrics); + + let mut buffer = buffer.borrow_with(&mut font_system); + + buffer.set_wrap(Wrap::Word); + buffer.set_text("Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", Attrs::new().family(cosmic_text::Family::Name("Inter")), Shaping::Advanced); + buffer.set_size(50.0, 1000.0); + + buffer.shape_until_scroll(false); + + let measured_size = measure(&buffer); + + assert!( + measured_size <= buffer.size().0, + "Measured width is larger than buffer width\n{} <= {}", + measured_size, + buffer.size().0 + ); +} + +fn measure(buffer: &Buffer) -> f32 { + buffer + .layout_runs() + .fold(0.0f32, |width, run| width.max(run.line_w)) +}