You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tui-rs/tests/paragraph.rs

141 lines
4.8 KiB
Rust

use tui::backend::TestBackend;
use tui::buffer::Buffer;
use tui::layout::Alignment;
use tui::widgets::{Block, Borders, Paragraph, Text, Widget};
use tui::Terminal;
const SAMPLE_STRING: &str =
"The library is based on the principle of immediate rendering with \
intermediate buffers. This means that at each new frame you should build all widgets that are \
supposed to be part of the UI. While providing a great flexibility for rich and \
interactive UI, this may introduce overhead for highly dynamic content.";
#[test]
fn paragraph_render_wrap() {
let render = |alignment| {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
terminal
.draw(|mut f| {
let size = f.size();
let text = [Text::raw(SAMPLE_STRING)];
Paragraph::new(text.iter())
.block(Block::default().borders(Borders::ALL))
.alignment(alignment)
.wrap(true)
.render(&mut f, size);
})
.unwrap();
terminal.backend().buffer().clone()
};
assert_eq!(
render(Alignment::Left),
Buffer::with_lines(vec![
"",
"The library is ",
"based on the ",
"principle of ",
"immediate ",
"rendering with ",
"intermediate ",
"buffers. This ",
"means that at each",
"",
])
);
assert_eq!(
render(Alignment::Right),
Buffer::with_lines(vec![
"",
" The library is",
" based on the",
" principle of",
" immediate",
" rendering with",
" intermediate",
" buffers. This",
"means that at each",
"",
])
);
assert_eq!(
render(Alignment::Center),
Buffer::with_lines(vec![
"",
" The library is ",
" based on the ",
" principle of ",
" immediate ",
" rendering with ",
" intermediate ",
" buffers. This ",
"means that at each",
"",
])
);
}
#[test]
fn paragraph_render_double_width() {
let backend = TestBackend::new(10, 10);
let mut terminal = Terminal::new(backend).unwrap();
let s = "";
terminal
.draw(|mut f| {
let size = f.size();
let text = [Text::raw(s)];
Paragraph::new(text.iter())
.block(Block::default().borders(Borders::ALL))
.wrap(true)
.render(&mut f, size);
})
.unwrap();
let expected = Buffer::with_lines(vec![
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
]);
assert_eq!(&expected, terminal.backend().buffer());
}
#[test]
fn paragraph_render_mixed_width() {
let backend = TestBackend::new(10, 7);
let mut terminal = Terminal::new(backend).unwrap();
let s = "a";
terminal
.draw(|mut f| {
let size = f.size();
let text = [Text::raw(s)];
Paragraph::new(text.iter())
.block(Block::default().borders(Borders::ALL))
.wrap(true)
.render(&mut f, size);
})
.unwrap();
let expected = Buffer::with_lines(vec![
// The internal width is 8 so only 4 slots for double-width characters.
"",
"a ", // Here we have 1 latin character so only 3 double-width ones can fit.
"",
"",
"",
" ",
"",
]);
assert_eq!(&expected, terminal.backend().buffer());
}