use crate::assertion;
use crate::frame::TerminalFrame;
use crate::region::Region;
pub fn expect_selected_tab(frame: &TerminalFrame, label: &str) {
let header = Region::top_row(frame.cols());
assertion::assert_text_in_region(frame, label, &header);
assertion::assert_span_is_highlighted(frame, label);
}
pub fn expect_unselected_tab(frame: &TerminalFrame, label: &str) {
let header = Region::top_row(frame.cols());
assertion::assert_text_in_region(frame, label, &header);
assertion::assert_span_is_not_highlighted(frame, label);
}
pub fn expect_instruction_visible(frame: &TerminalFrame, instruction: &str) {
let full = Region::full(frame.cols(), frame.rows());
assertion::assert_text_in_region(frame, instruction, &full);
}
pub fn expect_keybinding_hint(frame: &TerminalFrame, hint: &str) {
let footer = Region::footer(frame.cols(), frame.rows());
assertion::assert_text_in_region(frame, hint, &footer);
}
pub fn expect_footer_action(frame: &TerminalFrame, action: &str) {
let footer = Region::footer(frame.cols(), frame.rows());
assertion::assert_text_in_region(frame, action, &footer);
}
pub fn expect_dialog_title(frame: &TerminalFrame, title: &str) {
let upper = Region::percent(0, 0, 100, 60, frame.cols(), frame.rows());
assertion::assert_text_in_region(frame, title, &upper);
}
pub fn expect_status_message(frame: &TerminalFrame, message: &str) {
let full = Region::full(frame.cols(), frame.rows());
assertion::assert_text_in_region(frame, message, &full);
}
pub fn expect_not_visible(frame: &TerminalFrame, text: &str) {
assertion::assert_not_visible(frame, text);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn expect_selected_tab_passes_for_bold_tab() {
let frame = TerminalFrame::new(80, 24, b"\x1b[1mProjects\x1b[0m Sessions");
expect_selected_tab(&frame, "Projects");
}
#[test]
#[should_panic(expected = "is not highlighted")]
fn expect_selected_tab_panics_when_not_highlighted() {
let frame = TerminalFrame::new(80, 24, b"Projects Sessions");
expect_selected_tab(&frame, "Projects");
}
#[test]
fn expect_unselected_tab_passes_for_plain_tab() {
let frame = TerminalFrame::new(80, 24, b"\x1b[1mProjects\x1b[0m Sessions");
expect_unselected_tab(&frame, "Sessions");
}
#[test]
fn expect_instruction_visible_finds_text() {
let frame = TerminalFrame::new(80, 24, b"\r\n\r\nPress Enter to continue");
expect_instruction_visible(&frame, "Press Enter");
}
#[test]
fn expect_not_visible_passes_when_absent() {
let frame = TerminalFrame::new(80, 24, b"Hello World");
expect_not_visible(&frame, "Goodbye");
}
#[test]
fn expect_status_message_finds_anywhere() {
let mut data = Vec::new();
for _ in 0..10 {
data.extend_from_slice(b"\r\n");
}
data.extend_from_slice(b"Status: OK");
let frame = TerminalFrame::new(80, 24, &data);
expect_status_message(&frame, "Status: OK");
}
}