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));
}