use justerm_core::Engine;
#[test]
fn reverse_wrap_backspaces_to_the_previous_soft_wrapped_row() {
let mut t = Engine::new(3, 2);
t.feed(b"\x1b[?45h"); t.feed(b"abcd"); t.feed(b"\x08"); t.feed(b"\x08"); t.feed(b"X"); assert_eq!(t.grid().cell(0, 2).c(), 'X');
}
#[test]
fn backspace_clamps_at_column_zero_by_default() {
let mut t = Engine::new(3, 2);
t.feed(b"abcd"); t.feed(b"\x08\x08"); t.feed(b"X");
assert_eq!(
t.grid().cell(1, 0).c(),
'X',
"default: BS clamps at column 0"
);
}
#[test]
fn reverse_wrap_does_not_cross_a_hard_newline() {
let mut t = Engine::new(5, 2);
t.feed(b"\x1b[?45h");
t.feed(b"ab\r\nc"); t.feed(b"\x08\x08"); t.feed(b"X");
assert_eq!(t.grid().cell(1, 0).c(), 'X');
}
#[test]
fn cursor_left_does_not_reverse_wrap() {
let mut t = Engine::new(3, 2);
t.feed(b"\x1b[?45h");
t.feed(b"abcd"); t.feed(b"\x1b[2;1H"); t.feed(b"\x1b[D"); t.feed(b"Y");
assert_eq!(t.grid().cell(1, 0).c(), 'Y');
}
#[test]
fn reverse_wrap_at_home_has_no_effect() {
let mut t = Engine::new(3, 2);
t.feed(b"\x1b[?45h");
t.feed(b"\x1b[1;1H"); t.feed(b"\x08"); t.feed(b"Z");
assert_eq!(t.grid().cell(0, 0).c(), 'Z');
}
#[test]
fn decrqm_and_ris_for_reverse_wrap() {
let mut t = Engine::new(10, 2);
t.feed(b"\x1b[?45$p"); assert_eq!(t.drain_replies(), b"\x1b[?45;2$y");
t.feed(b"\x1b[?45h\x1b[?45$p"); assert_eq!(t.drain_replies(), b"\x1b[?45;1$y");
t.feed(b"\x1bc\x1b[?45$p"); assert_eq!(t.drain_replies(), b"\x1b[?45;2$y");
}