use super::*;
#[test]
fn osc_0_sets_title_and_icon_name() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]0;my-title\x07");
assert_eq!(parser.screen().title(), "my-title");
assert_eq!(parser.screen().icon_name(), "my-title");
}
#[test]
fn osc_1_sets_icon_name_only() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]1;my-icon\x07");
assert_eq!(parser.screen().title(), "");
assert_eq!(parser.screen().icon_name(), "my-icon");
}
#[test]
fn osc_2_sets_title_only() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]2;my-window\x07");
assert_eq!(parser.screen().title(), "my-window");
assert_eq!(parser.screen().icon_name(), "");
}
#[test]
fn osc_st_terminator() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]0;st-title\x1b\\");
assert_eq!(parser.screen().title(), "st-title");
}
#[test]
fn osc_title_overwrite() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]0;first\x07");
assert_eq!(parser.screen().title(), "first");
process(&mut parser, b"\x1b]2;second\x07");
assert_eq!(parser.screen().title(), "second");
assert_eq!(
parser.screen().icon_name(),
"first",
"OSC 2 sets only the title, so the OSC 0 icon name must survive",
);
}
#[test]
fn osc_title_reset_by_ris() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]0;hello\x07");
assert_eq!(parser.screen().title(), "hello");
process(&mut parser, b"\x1bc");
assert_eq!(parser.screen().title(), "");
assert_eq!(parser.screen().icon_name(), "");
}
#[test]
fn title_changed_event_osc_0() {
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]0;hello\x07");
let events = parser.screen_mut().drain_events();
assert!(events.contains(&ScreenEvent::TitleChanged));
assert!(parser.screen_mut().drain_events().is_empty());
}
#[test]
fn title_changed_event_osc_1() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]1;icon\x07");
let events = parser.screen_mut().drain_events();
assert!(events.contains(&ScreenEvent::TitleChanged));
assert!(parser.screen_mut().drain_events().is_empty());
}
#[test]
fn title_changed_event_osc_2() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]2;window\x07");
let events = parser.screen_mut().drain_events();
assert!(events.contains(&ScreenEvent::TitleChanged));
assert!(parser.screen_mut().drain_events().is_empty());
}
#[test]
fn title_changed_event_ris_with_prior_title() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1b]0;hello\x07");
let _ = parser.screen_mut().drain_events();
process(&mut parser, b"\x1bc");
let events = parser.screen_mut().drain_events();
assert!(events.contains(&ScreenEvent::TitleChanged));
}
#[test]
fn title_changed_event_ris_no_prior_title() {
let mut parser = crate::Parser::new(TerminalSize { rows: 24, cols: 80 }, 0);
process(&mut parser, b"\x1bc");
let events = parser.screen_mut().drain_events();
assert!(!events.contains(&ScreenEvent::TitleChanged));
}