1#[deprecated = "use assert_eq!(&actual, &expected)"]
7#[macro_export]
8macro_rules! assert_buffer_eq {
9 ($actual_expr:expr, $expected_expr:expr) => {
10 match (&$actual_expr, &$expected_expr) {
11 (actual, expected) => {
12 assert!(
13 actual.area == expected.area,
14 "buffer areas not equal\nexpected: {expected:?}\nactual: {actual:?}",
15 );
16 let nice_diff = expected
17 .diff(actual)
18 .into_iter()
19 .enumerate()
20 .map(|(i, (x, y, cell))| {
21 let expected_cell = &expected[(x, y)];
22 format!("{i}: at ({x}, {y})\n expected: {expected_cell:?}\n actual: {cell:?}")
23 })
24 .collect::<Vec<String>>()
25 .join("\n");
26 assert!(
27 nice_diff.is_empty(),
28 "buffer contents not equal\nexpected: {expected:?}\nactual: {actual:?}\ndiff:\n{nice_diff}",
29 );
30 assert_eq!(
33 actual, expected,
34 "buffers are not equal in an unexpected way. Please open an issue about this."
35 );
36 }
37 }
38 };
39}
40
41#[allow(deprecated)]
42#[cfg(test)]
43mod tests {
44 use crate::{
45 buffer::Buffer,
46 layout::Rect,
47 style::{Color, Style},
48 };
49
50 #[test]
51 fn assert_buffer_eq_does_not_panic_on_equal_buffers() {
52 let buffer = Buffer::empty(Rect::new(0, 0, 5, 1));
53 let other_buffer = Buffer::empty(Rect::new(0, 0, 5, 1));
54 assert_buffer_eq!(buffer, other_buffer);
55 }
56
57 #[should_panic = "buffer areas not equal"]
58 #[test]
59 fn assert_buffer_eq_panics_on_unequal_area() {
60 let buffer = Buffer::empty(Rect::new(0, 0, 5, 1));
61 let other_buffer = Buffer::empty(Rect::new(0, 0, 6, 1));
62 assert_buffer_eq!(buffer, other_buffer);
63 }
64
65 #[should_panic = "buffer contents not equal"]
66 #[test]
67 fn assert_buffer_eq_panics_on_unequal_style() {
68 let buffer = Buffer::empty(Rect::new(0, 0, 5, 1));
69 let mut other_buffer = Buffer::empty(Rect::new(0, 0, 5, 1));
70 other_buffer.set_string(0, 0, " ", Style::default().fg(Color::Red));
71 assert_buffer_eq!(buffer, other_buffer);
72 }
73}