#[cfg_attr(coverage_nightly, coverage(off))]
pub fn assert_frame_contains(frame: &str, expected: &str) {
assert!(frame.contains(expected), "Frame should contain '{expected}'\n\nFrame:\n{frame}");
}
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn assert_frame_not_contains(frame: &str, unexpected: &str) {
assert!(
!frame.contains(unexpected),
"Frame should NOT contain '{unexpected}'\n\nFrame:\n{frame}"
);
}
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn assert_frame_line_contains(frame: &str, line: usize, expected: &str) {
let lines: Vec<&str> = frame.lines().collect();
let len = lines.len();
assert!(lines.get(line).is_some(), "Frame has {len} lines, but line {line} requested");
let got = lines[line];
assert!(
got.contains(expected),
"Line {line} should contain '{expected}'\nGot: '{got}'\n\nFull frame:\n{frame}"
);
}
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn assert_statusline_mode(frame: &str, mode: &str) {
let last = frame.lines().last().unwrap_or("");
assert!(
last.to_lowercase().contains(&mode.to_lowercase()),
"Statusline should show mode '{mode}'\nGot: '{last}'\n\nFull frame:\n{frame}"
);
}
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn assert_frame_line_count(frame: &str, expected: usize) {
let actual = frame.lines().count();
assert_eq!(
actual, expected,
"Frame should have {expected} lines, has {actual}\n\nFrame:\n{frame}"
);
}
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn assert_frame_min_width(frame: &str, min_width: usize) {
let max_width = frame.lines().map(str::len).max().unwrap_or(0);
assert!(
max_width >= min_width,
"Frame should have at least {min_width} width, max line has {max_width}\n\nFrame:\n{frame}"
);
}
#[must_use]
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn frame_contains(frame: &str, expected: &str) -> bool {
frame.contains(expected)
}
#[must_use]
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn frame_line_contains(frame: &str, line: usize, expected: &str) -> bool {
frame
.lines()
.nth(line)
.is_some_and(|l| l.contains(expected))
}
#[must_use]
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn get_statusline(frame: &str) -> Option<&str> {
frame.lines().last()
}
#[must_use]
#[cfg_attr(coverage_nightly, coverage(off))]
pub fn get_line(frame: &str, line: usize) -> Option<&str> {
frame.lines().nth(line)
}
#[cfg(test)]
#[path = "frame_tests.rs"]
mod tests;