Updated tests to use lamdas and be more concise. Updated title alignmnet code to be more straightforward and have correct behavior when placing title in the center without left border

pull/462/head
Oleksandr Litus 3 years ago
parent 31b97447b7
commit ce04c24221

@ -221,12 +221,15 @@ impl<'a> Widget for Block<'a> {
.saturating_sub(right_border_dx);
let title_dx = match self.title_alignment {
Alignment::Left => 0,
Alignment::Center => (title_area_width - title.width() as u16) / 2,
Alignment::Right => (title_area_width - title.width() as u16),
Alignment::Left => left_border_dx,
Alignment::Center => area.width.saturating_sub(title.width() as u16) / 2,
Alignment::Right => area
.width
.saturating_sub(title.width() as u16)
.saturating_sub(right_border_dx),
};
let title_x = area.left() + left_border_dx + title_dx;
let title_x = area.left() + title_dx;
let title_y = area.top();
buf.set_spans(title_x, title_y, &title, title_area_width);

@ -213,469 +213,134 @@ fn widgets_block_renders_on_small_areas() {
}
#[test]
fn widgets_block_renders_title_top_left_all_borders() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Left)
.borders(Borders::ALL);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" ┌Title───────────┐ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" └────────────────┘ ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_left_no_left_border() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Left)
.borders(Borders::TOP | Borders::RIGHT | Borders::BOTTOM);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" Title────────────┐ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" ─────────────────┘ ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_left_no_right_border() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Left)
.borders(Borders::LEFT | Borders::TOP | Borders::BOTTOM);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" ┌Title──────────── ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" └───────────────── ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_left_no_borders() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Left)
.borders(Borders::NONE);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" Title ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_center_all_borders() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Center)
.borders(Borders::ALL);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" ┌─────Title──────┐ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" └────────────────┘ ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_center_no_left_border() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Center)
.borders(Borders::TOP | Borders::RIGHT | Borders::BOTTOM);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" ──────Title──────┐ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" ─────────────────┘ ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_center_no_right_border() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Center)
.borders(Borders::LEFT | Borders::TOP | Borders::BOTTOM);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" ┌──────Title────── ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" └───────────────── ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_center_no_borders() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Center)
.borders(Borders::NONE);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" Title ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
]);
terminal.backend().assert_buffer(&expected);
}
#[test]
fn widgets_block_renders_title_top_right_all_borders() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Right)
.borders(Borders::ALL);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let expected = Buffer::with_lines(vec![
" ",
" ┌───────────Title┐ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" │ │ ",
" └────────────────┘ ",
" ",
]);
fn widgets_block_title_alignment() {
let test_case = |alignment, borders, expected| {
let backend = TestBackend::new(15, 2);
let mut terminal = Terminal::new(backend).unwrap();
terminal.backend().assert_buffer(&expected);
}
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(alignment)
.borders(borders);
#[test]
fn widgets_block_renders_title_top_right_no_left_border() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
let area = Rect {
x: 1,
y: 0,
width: 13,
height: 2,
};
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Right)
.borders(Borders::TOP | Borders::RIGHT | Borders::BOTTOM);
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
terminal.backend().assert_buffer(&expected);
};
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
// title top-left with all borders
test_case(
Alignment::Left,
Borders::ALL,
Buffer::with_lines(vec![" ┌Title──────┐ ", " └───────────┘ "]),
);
let expected = Buffer::with_lines(vec![
" ",
" ────────────Title┐ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" ─────────────────┘ ",
" ",
]);
// title top-left without top border
test_case(
Alignment::Left,
Borders::LEFT | Borders::BOTTOM | Borders::RIGHT,
Buffer::with_lines(vec![" │Title │ ", " └───────────┘ "]),
);
terminal.backend().assert_buffer(&expected);
}
// title top-left with no left border
test_case(
Alignment::Left,
Borders::TOP | Borders::RIGHT | Borders::BOTTOM,
Buffer::with_lines(vec![" Title───────┐ ", " ────────────┘ "]),
);
#[test]
fn widgets_block_renders_title_top_right_no_right_border() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
// title top-left without right border
test_case(
Alignment::Left,
Borders::LEFT | Borders::TOP | Borders::BOTTOM,
Buffer::with_lines(vec![" ┌Title─────── ", " └──────────── "]),
);
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Right)
.borders(Borders::LEFT | Borders::TOP | Borders::BOTTOM);
// title top-left without borders
test_case(
Alignment::Left,
Borders::NONE,
Buffer::with_lines(vec![" Title ", " "]),
);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
// title center with all borders
test_case(
Alignment::Center,
Borders::ALL,
Buffer::with_lines(vec![" ┌───Title───┐ ", " └───────────┘ "]),
);
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
// title center without top border
test_case(
Alignment::Center,
Borders::LEFT | Borders::BOTTOM | Borders::RIGHT,
Buffer::with_lines(vec![" │ Title │ ", " └───────────┘ "]),
);
let expected = Buffer::with_lines(vec![
" ",
" ┌────────────Title ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" │ ",
" └───────────────── ",
" ",
]);
// title center with no left border
test_case(
Alignment::Center,
Borders::TOP | Borders::RIGHT | Borders::BOTTOM,
Buffer::with_lines(vec![" ────Title───┐ ", " ────────────┘ "]),
);
terminal.backend().assert_buffer(&expected);
}
// title center without right border
test_case(
Alignment::Center,
Borders::LEFT | Borders::TOP | Borders::BOTTOM,
Buffer::with_lines(vec![" ┌───Title──── ", " └──────────── "]),
);
#[test]
fn widgets_block_renders_title_top_right_no_borders() {
let backend = TestBackend::new(20, 10);
let mut terminal = Terminal::new(backend).unwrap();
// title center without borders
test_case(
Alignment::Center,
Borders::NONE,
Buffer::with_lines(vec![" Title ", " "]),
);
let block = Block::default()
.title(Span::styled("Title", Style::default()))
.title_alignment(Alignment::Right)
.borders(Borders::NONE);
// title top-right with all borders
test_case(
Alignment::Right,
Borders::ALL,
Buffer::with_lines(vec![" ┌──────Title┐ ", " └───────────┘ "]),
);
let area = Rect {
x: 1,
y: 1,
width: 18,
height: 8,
};
// title top-right without top border
test_case(
Alignment::Right,
Borders::LEFT | Borders::BOTTOM | Borders::RIGHT,
Buffer::with_lines(vec![" │ Title│ ", " └───────────┘ "]),
);
terminal
.draw(|f| {
f.render_widget(block, area);
})
.unwrap();
// title top-right with no left border
test_case(
Alignment::Right,
Borders::TOP | Borders::RIGHT | Borders::BOTTOM,
Buffer::with_lines(vec![" ───────Title┐ ", " ────────────┘ "]),
);
let expected = Buffer::with_lines(vec![
" ",
" Title ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
]);
// title top-right without right border
test_case(
Alignment::Right,
Borders::LEFT | Borders::TOP | Borders::BOTTOM,
Buffer::with_lines(vec![" ┌───────Title ", " └──────────── "]),
);
terminal.backend().assert_buffer(&expected);
// title top-right without borders
test_case(
Alignment::Right,
Borders::NONE,
Buffer::with_lines(vec![" Title ", " "]),
);
}

Loading…
Cancel
Save