mirror of
https://github.com/ratatui/ratatui.git
synced 2025-12-30 05:11:46 +00:00
- Simplify `assert_buffer_eq!` logic. - Deprecate `assert_buffer_eq!`. - Introduce `TestBackend::assert_buffer_lines`. Also simplify many tests involving buffer comparisons. For the deprecation, just use `assert_eq` instead of `assert_buffer_eq`: ```diff -assert_buffer_eq!(actual, expected); +assert_eq!(actual, expected); ``` --- I noticed `assert_buffer_eq!` creating no test coverage reports and looked into this macro. First I simplified it. Then I noticed a bunch of `assert_eq!(buffer, …)` and other indirect usages of this macro (like `TestBackend::assert_buffer`). The good thing here is that it's mainly used in tests so not many changes to the library code.
96 lines
4.0 KiB
Rust
96 lines
4.0 KiB
Rust
use ratatui::{
|
|
backend::TestBackend,
|
|
buffer::Buffer,
|
|
style::{Color, Style},
|
|
widgets::{Bar, BarChart, BarGroup, Block},
|
|
Terminal,
|
|
};
|
|
|
|
// check that bars fill up correctly up to max value
|
|
#[test]
|
|
fn widgets_barchart_not_full_below_max_value() {
|
|
let backend = TestBackend::new(30, 10);
|
|
let mut terminal = Terminal::new(backend).unwrap();
|
|
terminal
|
|
.draw(|f| {
|
|
let size = f.size();
|
|
let barchart = BarChart::default()
|
|
.block(Block::bordered())
|
|
.data(&[("empty", 0), ("half", 50), ("almost", 99), ("full", 100)])
|
|
.max(100)
|
|
.bar_width(7)
|
|
.bar_gap(0);
|
|
f.render_widget(barchart, size);
|
|
})
|
|
.unwrap();
|
|
terminal.backend().assert_buffer_lines([
|
|
"┌────────────────────────────┐",
|
|
"│ ▇▇▇▇▇▇▇███████│",
|
|
"│ ██████████████│",
|
|
"│ ██████████████│",
|
|
"│ ▄▄▄▄▄▄▄██████████████│",
|
|
"│ █████████████████████│",
|
|
"│ █████████████████████│",
|
|
"│ ██50█████99█████100██│",
|
|
"│ empty half almost full │",
|
|
"└────────────────────────────┘",
|
|
]);
|
|
}
|
|
|
|
#[test]
|
|
fn widgets_barchart_group() {
|
|
const TERMINAL_HEIGHT: u16 = 11;
|
|
let backend = TestBackend::new(35, TERMINAL_HEIGHT);
|
|
let mut terminal = Terminal::new(backend).unwrap();
|
|
terminal
|
|
.draw(|f| {
|
|
let size = f.size();
|
|
let barchart = BarChart::default()
|
|
.block(Block::bordered())
|
|
.data(
|
|
BarGroup::default().label("Mar".into()).bars(&[
|
|
Bar::default()
|
|
.value(10)
|
|
.label("C1".into())
|
|
.style(Style::default().fg(Color::Red))
|
|
.value_style(Style::default().fg(Color::Blue)),
|
|
Bar::default()
|
|
.value(20)
|
|
.style(Style::default().fg(Color::Green))
|
|
.text_value("20M".to_string()),
|
|
]),
|
|
)
|
|
.data(&vec![("C1", 50), ("C2", 40)])
|
|
.data(&[("C1", 60), ("C2", 90)])
|
|
.data(&[("xx", 10), ("xx", 10)])
|
|
.group_gap(2)
|
|
.bar_width(4)
|
|
.bar_gap(1);
|
|
f.render_widget(barchart, size);
|
|
})
|
|
.unwrap();
|
|
|
|
let mut expected = Buffer::with_lines([
|
|
"┌─────────────────────────────────┐",
|
|
"│ ████│",
|
|
"│ ████│",
|
|
"│ ▅▅▅▅ ████│",
|
|
"│ ▇▇▇▇ ████ ████│",
|
|
"│ ████ ████ ████ ████│",
|
|
"│ ▄▄▄▄ ████ ████ ████ ████│",
|
|
"│▆10▆ 20M█ █50█ █40█ █60█ █90█│",
|
|
"│ C1 C1 C2 C1 C2 │",
|
|
"│Mar │",
|
|
"└─────────────────────────────────┘",
|
|
]);
|
|
for y in 1..(TERMINAL_HEIGHT - 3) {
|
|
for x in 1..5 {
|
|
expected.get_mut(x, y).set_fg(Color::Red);
|
|
expected.get_mut(x + 5, y).set_fg(Color::Green);
|
|
}
|
|
}
|
|
expected.get_mut(2, 7).set_fg(Color::Blue);
|
|
expected.get_mut(3, 7).set_fg(Color::Blue);
|
|
terminal.backend().assert_buffer(&expected);
|
|
}
|