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 line_drawing_charset() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    // ESC(0 selects line drawing in G0, then lqqk should become ┌──┐
    process(&mut parser, b"\x1b(0lqqk");
    let screen = parser.screen();
    assert_eq!(screen.cell(0, 0).unwrap().contents(), "");
    assert_eq!(screen.cell(0, 1).unwrap().contents(), "");
    assert_eq!(screen.cell(0, 2).unwrap().contents(), "");
    assert_eq!(screen.cell(0, 3).unwrap().contents(), "");
}

#[test]
fn si_so_switching() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    // Set G1 to line drawing, write ASCII, switch to G1, write, switch back
    process(&mut parser, b"\x1b)0A\x0eq\x0fB");
    let screen = parser.screen();
    assert_eq!(screen.cell(0, 0).unwrap().contents(), "A");
    assert_eq!(screen.cell(0, 1).unwrap().contents(), ""); // 'q' mapped
    assert_eq!(screen.cell(0, 2).unwrap().contents(), "B"); // back to ASCII
}

#[test]
fn charset_reset_by_ris() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b(0\x1bcq");
    let screen = parser.screen();
    // After RIS, charset should be back to ASCII so 'q' is literal
    assert_eq!(screen.cell(0, 0).unwrap().contents(), "q");
}

#[test]
fn charset_saved_with_cursor() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    // Set G0 to line drawing, move to col 5 and save, reset to ASCII, write at col 0
    // Then restore (goes back to col 5 with line drawing) and write
    process(&mut parser, b"\x1b(0\x1b[6G\x1b7\x1b(B\x1b[1Gq\x1b8q");
    let screen = parser.screen();
    // col 0: 'q' written with ASCII charset
    assert_eq!(screen.cell(0, 0).unwrap().contents(), "q");
    // col 5: 'q' written with restored line drawing charset
    assert_eq!(screen.cell(0, 5).unwrap().contents(), "\u{2500}");
}