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_7_sets_cwd() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b]7;file:///home/user\x07");
    assert_eq!(parser.screen().cwd(), Some("file:///home/user"));
}

#[test]
fn osc_7_st_terminator() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b]7;file:///tmp\x1b\\");
    assert_eq!(parser.screen().cwd(), Some("file:///tmp"));
}

#[test]
fn working_directory_changed_event_osc_7() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    assert!(parser.screen_mut().drain_events().is_empty());
    process(&mut parser, b"\x1b]7;file:///home/user\x07");
    let events = parser.screen_mut().drain_events();
    assert!(events.contains(&ScreenEvent::WorkingDirectoryChanged));
    assert!(parser.screen_mut().drain_events().is_empty());
}

#[test]
fn osc_7_empty_payload_clears_cwd() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b]7;file:///home/user\x07");
    assert_eq!(parser.screen().cwd(), Some("file:///home/user"));
    let _ = parser.screen_mut().drain_events();
    process(&mut parser, b"\x1b]7;\x07");
    assert_eq!(parser.screen().cwd(), None);
    let events = parser.screen_mut().drain_events();
    assert!(events.contains(&ScreenEvent::WorkingDirectoryChanged));
}

#[test]
fn osc_7_cleared_by_ris() {
    let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
    process(&mut parser, b"\x1b]7;file:///home/user\x07");
    assert_eq!(parser.screen().cwd(), Some("file:///home/user"));
    let _ = parser.screen_mut().drain_events();
    process(&mut parser, b"\x1bc");
    assert_eq!(parser.screen().cwd(), None);
    let events = parser.screen_mut().drain_events();
    assert!(events.contains(&ScreenEvent::WorkingDirectoryChanged));
}