use crate::ansi_processor::AnsiProcessor;
#[test]
fn test_g0_character_set_designation() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
assert_eq!(processor.get_terminal_state().charset_g0, None);
processor.process_string("\x1b(A");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("UK".to_string())
);
processor.process_string("\x1b(B");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("ASCII".to_string())
);
processor.process_string("\x1b(0");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("DEC".to_string())
);
}
#[test]
fn test_g1_character_set_designation() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
assert_eq!(processor.get_terminal_state().charset_g1, None);
processor.process_string("\x1b)A");
assert_eq!(
processor.get_terminal_state().charset_g1,
Some("UK".to_string())
);
processor.process_string("\x1b)B");
assert_eq!(
processor.get_terminal_state().charset_g1,
Some("ASCII".to_string())
);
processor.process_string("\x1b)0");
assert_eq!(
processor.get_terminal_state().charset_g1,
Some("DEC".to_string())
);
}
#[test]
fn test_active_character_set_default() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
assert_eq!(processor.get_terminal_state().active_charset, 0);
}
#[test]
fn test_shift_in_shift_out() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(B"); processor.process_string("\x1b)0");
assert_eq!(processor.get_terminal_state().active_charset, 0);
processor.process_string("\x0e");
assert_eq!(processor.get_terminal_state().active_charset, 1);
processor.process_string("\x0f");
assert_eq!(processor.get_terminal_state().active_charset, 0);
}
#[test]
fn test_dec_special_character_set() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(0");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("DEC".to_string())
);
processor.process_string("lqk");
let content = processor.get_processed_text();
assert!(!content.is_empty());
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("DEC".to_string())
);
}
#[test]
fn test_uk_character_set() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(A");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("UK".to_string())
);
processor.process_string("Test#Text");
let content = processor.get_processed_text();
assert!(content.contains("Test"));
assert!(content.contains("Text"));
}
#[test]
fn test_character_set_persistence_across_operations() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(0"); processor.process_string("\x1b)A");
processor.process_string("Hello\n");
processor.process_string("\x1b[H"); processor.process_string("\x1b[2J");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("DEC".to_string())
);
assert_eq!(
processor.get_terminal_state().charset_g1,
Some("UK".to_string())
);
}
#[test]
fn test_character_set_with_alternate_screen() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(0"); processor.process_string("\x1b)A"); processor.process_string("\x0e");
processor.process_string("\x1b[?1049h");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("DEC".to_string())
);
assert_eq!(
processor.get_terminal_state().charset_g1,
Some("UK".to_string())
);
assert_eq!(processor.get_terminal_state().active_charset, 1);
processor.process_string("\x1b[?1049l");
assert_eq!(
processor.get_terminal_state().charset_g0,
Some("DEC".to_string())
);
assert_eq!(
processor.get_terminal_state().charset_g1,
Some("UK".to_string())
);
assert_eq!(processor.get_terminal_state().active_charset, 1);
}
#[test]
fn test_reset_character_sets() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(0"); processor.process_string("\x1b)A"); processor.process_string("\x0e");
processor.process_string("\x1bc");
}
#[test]
fn test_multiple_character_set_switches() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(B"); processor.process_string("\x1b)0");
processor.process_string("\x0e"); assert_eq!(processor.get_terminal_state().active_charset, 1);
processor.process_string("\x0f"); assert_eq!(processor.get_terminal_state().active_charset, 0);
processor.process_string("\x0e"); assert_eq!(processor.get_terminal_state().active_charset, 1);
processor.process_string("\x0f"); assert_eq!(processor.get_terminal_state().active_charset, 0);
}
#[test]
fn test_character_set_edge_cases() {
let mut processor = AnsiProcessor::with_screen_size(80, 24);
processor.set_screen_mode(true);
processor.process_string("\x1b(X");
processor.process_string("\x1b(");
processor.process_string("Test");
let content = processor.get_processed_text();
assert!(content.contains("Test"));
}