use par_term::scripting::manager::ScriptManager;
use par_term::scripting::protocol::strip_vt_sequences;
#[test]
fn test_strip_vt_plain_text_unchanged() {
assert_eq!(strip_vt_sequences("hello world"), "hello world");
}
#[test]
fn test_strip_vt_csi_removed() {
assert_eq!(strip_vt_sequences("\x1b[32mgreen\x1b[0m"), "green");
}
#[test]
fn test_strip_vt_osc_removed() {
assert_eq!(strip_vt_sequences("\x1b]0;title\x07text"), "text");
}
#[test]
fn test_strip_vt_osc_st_terminated() {
assert_eq!(strip_vt_sequences("\x1b]0;title\x1b\\after"), "after");
}
#[test]
fn test_strip_vt_dcs_removed() {
assert_eq!(strip_vt_sequences("\x1bPdcs-data\x1b\\text"), "text");
}
#[test]
fn test_strip_vt_apc_removed() {
assert_eq!(strip_vt_sequences("\x1b_apc-data\x1b\\after"), "after");
}
#[test]
fn test_strip_vt_bare_esc_sequence_skipped() {
assert_eq!(strip_vt_sequences("\x1bMtext"), "text");
}
#[test]
fn test_strip_vt_newlines_preserved() {
assert_eq!(strip_vt_sequences("line1\nline2"), "line1\nline2");
}
#[test]
fn test_strip_vt_mixed() {
let input = "\x1b[1;32mBold Green\x1b[0m Normal";
assert_eq!(strip_vt_sequences(input), "Bold Green Normal");
}
#[test]
fn test_strip_vt_empty_string() {
assert_eq!(strip_vt_sequences(""), "");
}
#[test]
fn test_strip_vt_only_escape_sequence() {
assert_eq!(strip_vt_sequences("\x1b[2J"), "");
}
#[test]
fn test_write_text_rate_allows_first_call() {
let mut mgr = ScriptManager::new();
assert!(mgr.check_write_text_rate(1, 10));
}
#[test]
fn test_write_text_rate_blocks_immediate_second_call() {
let mut mgr = ScriptManager::new();
assert!(mgr.check_write_text_rate(1, 10)); assert!(!mgr.check_write_text_rate(1, 10));
}
#[test]
fn test_run_command_rate_allows_first_call() {
let mut mgr = ScriptManager::new();
assert!(mgr.check_run_command_rate(1, 1));
}
#[test]
fn test_run_command_rate_blocks_immediate_second_call() {
let mut mgr = ScriptManager::new();
assert!(mgr.check_run_command_rate(1, 1)); assert!(!mgr.check_run_command_rate(1, 1)); }
#[test]
fn test_rate_limits_are_independent_per_script() {
let mut mgr = ScriptManager::new();
assert!(mgr.check_write_text_rate(1, 10));
assert!(mgr.check_write_text_rate(2, 10));
assert!(!mgr.check_write_text_rate(1, 10));
assert!(!mgr.check_write_text_rate(2, 10));
}
#[test]
fn test_rate_default_zero_uses_default_rate() {
let mut mgr = ScriptManager::new();
assert!(mgr.check_write_text_rate(1, 0));
assert!(!mgr.check_write_text_rate(1, 0));
}
#[test]
fn test_stop_script_clears_rate_state() {
let mut mgr = ScriptManager::new();
assert!(mgr.check_write_text_rate(42, 10));
assert!(!mgr.check_write_text_rate(42, 10));
mgr.stop_script(42);
assert!(mgr.check_write_text_rate(42, 10));
}