use helix_tui::{ backend::TestBackend, buffer::Buffer, layout::Rect, style::{Color, Style}, text::Span, widgets::{Block, Borders}, Terminal, }; #[test] fn widgets_block_renders() { let backend = TestBackend::new(10, 10); let mut terminal = Terminal::new(backend).unwrap(); terminal .draw(|f| { let block = Block::default() .title(Span::styled("Title", Style::default().fg(Color::LightBlue))) .borders(Borders::ALL); f.render_widget( block, Rect { x: 0, y: 0, width: 8, height: 8, }, ); }) .unwrap(); let mut expected = Buffer::with_lines(vec![ "┌Title─┐ ", "│ │ ", "│ │ ", "│ │ ", "│ │ ", "│ │ ", "│ │ ", "└──────┘ ", " ", " ", ]); for x in 1..=5 { expected.get_mut(x, 0).set_fg(Color::LightBlue); } terminal.backend().assert_buffer(&expected); } #[test] fn widgets_block_renders_on_small_areas() { let test_case = |block, area: Rect, expected| { let backend = TestBackend::new(area.width, area.height); let mut terminal = Terminal::new(backend).unwrap(); terminal .draw(|f| { f.render_widget(block, area); }) .unwrap(); terminal.backend().assert_buffer(&expected); }; let one_cell_test_cases = [ (Borders::NONE, "T"), (Borders::LEFT, "│"), (Borders::TOP, "T"), (Borders::RIGHT, "│"), (Borders::BOTTOM, "T"), (Borders::ALL, "┌"), ]; for (borders, symbol) in one_cell_test_cases.iter().cloned() { test_case( Block::default().title("Test").borders(borders), Rect { x: 0, y: 0, width: 0, height: 0, }, Buffer::empty(Rect { x: 0, y: 0, width: 0, height: 0, }), ); test_case( Block::default().title("Test").borders(borders), Rect { x: 0, y: 0, width: 1, height: 0, }, Buffer::empty(Rect { x: 0, y: 0, width: 1, height: 0, }), ); test_case( Block::default().title("Test").borders(borders), Rect { x: 0, y: 0, width: 0, height: 1, }, Buffer::empty(Rect { x: 0, y: 0, width: 0, height: 1, }), ); test_case( Block::default().title("Test").borders(borders), Rect { x: 0, y: 0, width: 1, height: 1, }, Buffer::with_lines(vec![symbol]), ); } test_case( Block::default().title("Test").borders(Borders::LEFT), Rect { x: 0, y: 0, width: 4, height: 1, }, Buffer::with_lines(vec!["│Tes"]), ); test_case( Block::default().title("Test").borders(Borders::RIGHT), Rect { x: 0, y: 0, width: 4, height: 1, }, Buffer::with_lines(vec!["Tes│"]), ); test_case( Block::default().title("Test").borders(Borders::RIGHT), Rect { x: 0, y: 0, width: 4, height: 1, }, Buffer::with_lines(vec!["Tes│"]), ); test_case( Block::default() .title("Test") .borders(Borders::LEFT | Borders::RIGHT), Rect { x: 0, y: 0, width: 4, height: 1, }, Buffer::with_lines(vec!["│Te│"]), ); test_case( Block::default().title("Test").borders(Borders::TOP), Rect { x: 0, y: 0, width: 4, height: 1, }, Buffer::with_lines(vec!["Test"]), ); test_case( Block::default().title("Test").borders(Borders::TOP), Rect { x: 0, y: 0, width: 5, height: 1, }, Buffer::with_lines(vec!["Test─"]), ); test_case( Block::default() .title("Test") .borders(Borders::LEFT | Borders::TOP), Rect { x: 0, y: 0, width: 5, height: 1, }, Buffer::with_lines(vec!["┌Test"]), ); test_case( Block::default() .title("Test") .borders(Borders::LEFT | Borders::TOP), Rect { x: 0, y: 0, width: 6, height: 1, }, Buffer::with_lines(vec!["┌Test─"]), ); }