reovim_testing/assertions.rs
1//! Assertion macros for cleaner test syntax.
2//!
3//! These macros provide a more readable way to write assertions
4//! in integration tests.
5
6/// Assert buffer content equals expected.
7///
8/// # Example
9///
10/// ```ignore
11/// assert_buffer_eq!(result, "expected content");
12/// ```
13#[macro_export]
14macro_rules! assert_buffer_eq {
15 ($result:expr, $expected:expr) => {
16 $result.assert_buffer_eq($expected)
17 };
18}
19
20/// Assert cursor position (line, col) - matches vim convention.
21///
22/// # Example
23///
24/// ```ignore
25/// assert_cursor!(result, 0, 5); // Line 0, column 5
26/// ```
27#[macro_export]
28macro_rules! assert_cursor {
29 ($result:expr, $line:expr, $col:expr) => {
30 $result.assert_cursor($line, $col)
31 };
32}
33
34/// Assert register content and type.
35///
36/// # Example
37///
38/// ```ignore
39/// assert_register!(result, "\"", "yanked text", "line");
40/// ```
41#[macro_export]
42macro_rules! assert_register {
43 ($result:expr, $reg:expr, $content:expr, $yank_type:expr) => {
44 $result.assert_register($reg, $content, $yank_type)
45 };
46}
47
48/// Assert current mode.
49///
50/// # Example
51///
52/// ```ignore
53/// assert_mode!(result, "normal");
54/// assert_mode!(result, "insert");
55/// assert_mode!(result, "visual");
56/// ```
57#[macro_export]
58macro_rules! assert_mode {
59 ($result:expr, "normal") => {
60 $result.assert_normal_mode()
61 };
62 ($result:expr, "insert") => {
63 $result.assert_insert_mode()
64 };
65 ($result:expr, "visual") => {
66 $result.assert_visual_mode()
67 };
68}
69
70/// Assert operation completes within duration.
71///
72/// # Example
73///
74/// ```ignore
75/// assert_completes_within!(Duration::from_secs(1), async_operation().await);
76/// ```
77#[macro_export]
78macro_rules! assert_completes_within {
79 ($duration:expr, $operation:expr) => {{
80 let start = std::time::Instant::now();
81 let result = $operation;
82 let elapsed = start.elapsed();
83 assert!(elapsed < $duration, "Operation took {:?}, expected < {:?}", elapsed, $duration);
84 result
85 }};
86}
87
88// Macros are automatically exported at crate root via #[macro_export]