From 1ff85535c834f6b7c002826cead811b4e73a8d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Orhun=20Parmaks=C4=B1z?= Date: Mon, 17 Jul 2023 12:27:58 +0200 Subject: [PATCH] fix(title): remove default alignment and position (#323) * fix(title): remove default alignment and position * test(block): add test cases for alignment * test(block): extend the unit tests for block title alignment --- src/title.rs | 4 ++-- src/widgets/block.rs | 35 +++++++++++++++++++++++++++++++++++ tests/widgets_block.rs | 21 ++++++++++++++------- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/title.rs b/src/title.rs index 6960e88f..cba31bf2 100644 --- a/src/title.rs +++ b/src/title.rs @@ -50,8 +50,8 @@ impl<'a> Default for Title<'a> { fn default() -> Self { Self { content: Line::from(""), - alignment: Some(Alignment::Left), - position: Some(Position::Top), + alignment: None, + position: None, } } } diff --git a/src/widgets/block.rs b/src/widgets/block.rs index 7ea9b790..a6dbad42 100644 --- a/src/widgets/block.rs +++ b/src/widgets/block.rs @@ -515,6 +515,7 @@ impl<'a> Styled for Block<'a> { mod tests { use super::*; use crate::{ + assert_buffer_eq, layout::Rect, style::{Color, Modifier, Stylize}, }; @@ -887,4 +888,38 @@ mod tests { .remove_modifier(Modifier::DIM) ) } + + #[test] + fn title_alignment() { + let tests = vec![ + (Alignment::Left, "test "), + (Alignment::Center, " test "), + (Alignment::Right, " test"), + ]; + for (alignment, expected) in tests { + let mut buffer = Buffer::empty(Rect::new(0, 0, 8, 1)); + Block::default() + .title("test") + .title_alignment(alignment) + .render(buffer.area, &mut buffer); + assert_buffer_eq!(buffer, Buffer::with_lines(vec![expected])); + } + } + + #[test] + fn title_alignment_overrides_block_title_alignment() { + let tests = vec![ + (Alignment::Right, Alignment::Left, "test "), + (Alignment::Left, Alignment::Center, " test "), + (Alignment::Center, Alignment::Right, " test"), + ]; + for (block_title_alignment, alignment, expected) in tests { + let mut buffer = Buffer::empty(Rect::new(0, 0, 8, 1)); + Block::default() + .title(Title::from("test").alignment(alignment)) + .title_alignment(block_title_alignment) + .render(buffer.area, &mut buffer); + assert_buffer_eq!(buffer, Buffer::with_lines(vec![expected])); + } + } } diff --git a/tests/widgets_block.rs b/tests/widgets_block.rs index 825eb6cd..fb79995a 100644 --- a/tests/widgets_block.rs +++ b/tests/widgets_block.rs @@ -295,10 +295,15 @@ fn widgets_block_title_alignment() { let backend = TestBackend::new(15, 2); let mut terminal = Terminal::new(backend).unwrap(); - let block = Block::default() + let block1 = Block::default() .title(Title::from(Span::styled("Title", Style::default())).alignment(alignment)) .borders(borders); + let block2 = Block::default() + .title("Title") + .title_alignment(alignment) + .borders(borders); + let area = Rect { x: 1, y: 0, @@ -306,13 +311,15 @@ fn widgets_block_title_alignment() { height: 2, }; - terminal - .draw(|f| { - f.render_widget(block, area); - }) - .unwrap(); + for block in [block1, block2] { + terminal + .draw(|f| { + f.render_widget(block, area); + }) + .unwrap(); - terminal.backend().assert_buffer(&expected); + terminal.backend().assert_buffer(&expected); + } }; // title top-left with all borders