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 osc_22_emits_pointer_shape() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b]22;pointer\x07");
    let events = parser.screen_mut().drain_events();
    assert!(
        events.contains(&ScreenEvent::MousePointerShape {
            name: "pointer".to_string(),
        }),
        "expected MousePointerShape event, got {events:?}",
    );
}

#[test]
fn osc_22_with_empty_body_emits_default() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b]22;\x07");
    let events = parser.screen_mut().drain_events();
    assert!(
        events.contains(&ScreenEvent::MousePointerShape {
            name: String::new(),
        }),
        "expected MousePointerShape event with empty name, got {events:?}",
    );
}

#[test]
fn osc_22_arbitrary_name_passes_through() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b]22;some-future-cursor-name\x07");
    let events = parser.screen_mut().drain_events();
    assert!(
        events.contains(&ScreenEvent::MousePointerShape {
            name: "some-future-cursor-name".to_string(),
        }),
        "expected MousePointerShape event with verbatim name, got {events:?}",
    );
}