tastty-core 0.1.0

Sans-IO core of the tastty terminal session library: VT parser, screen buffer, and byte encoders.
use super::*;

#[test]
fn insert_mode_shifts_text() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    // Write "BC", then go back, enable insert mode, type "A"
    process(&mut parser, b"BC\x1b[1G\x1b[4hA");
    let screen = parser.screen();
    assert_eq!(screen.cell(0, 0).unwrap().contents(), "A");
    assert_eq!(screen.cell(0, 1).unwrap().contents(), "B");
    assert_eq!(screen.cell(0, 2).unwrap().contents(), "C");
}

#[test]
fn insert_mode_off_overwrites() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    // Write "BC", enable then disable insert mode, go back, type "A"
    process(&mut parser, b"BC\x1b[4h\x1b[4l\x1b[1GA");
    let screen = parser.screen();
    assert_eq!(screen.cell(0, 0).unwrap().contents(), "A");
    assert_eq!(screen.cell(0, 1).unwrap().contents(), "C");
}

#[test]
fn insert_mode_reset_by_ris() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b[4h\x1bc");
    // After RIS, insert mode should be off
    process(&mut parser, b"BC\x1b[1GA");
    let screen = parser.screen();
    assert_eq!(screen.cell(0, 0).unwrap().contents(), "A");
    assert_eq!(screen.cell(0, 1).unwrap().contents(), "C");
}