use keyhog_scanner::testing::compiler_prefix::{
extract_literal_prefixes, strip_leading_boundary_guard, strip_leading_inline_flags,
};
#[test]
fn plain_alternation_prefix_extracts_both_arms() {
assert_eq!(
extract_literal_prefixes("(AKIA|ASIA)[0-9A-Z]{16}"),
vec!["AKIA".to_string(), "ASIA".to_string()]
);
}
#[test]
fn simple_literal_prefix_extracts() {
assert_eq!(
extract_literal_prefixes("AIza[0-9A-Za-z_-]{35}"),
vec!["AIza".to_string()]
);
}
#[test]
fn boundary_guard_idiom_extracts_the_inner_literal() {
assert_eq!(
extract_literal_prefixes("(?:^|[^A-Za-z0-9_])(sk-[a-zA-Z0-9]{20,})"),
vec!["sk-".to_string()]
);
assert_eq!(
extract_literal_prefixes("(?:^|[^A-Za-z0-9_])(dn_[a-zA-Z0-9_-]{20,})"),
vec!["dn_".to_string()]
);
}
#[test]
fn negative_case_flag_then_alternation_extracts() {
assert_eq!(
extract_literal_prefixes("(?-i)(AKIA|ASIA)[0-9A-Z]{16}"),
vec!["AKIA".to_string(), "ASIA".to_string()]
);
}
#[test]
fn negative_case_flag_then_boundary_guard_extracts() {
assert_eq!(
extract_literal_prefixes("(?-i)(?:^|[^A-Za-z0-9_])(sk-[a-zA-Z0-9]{20,})"),
vec!["sk-".to_string()]
);
}
#[test]
fn strip_inline_flags_handles_positive_and_negative_forms() {
assert_eq!(strip_leading_inline_flags("(?i)abc"), "abc");
assert_eq!(strip_leading_inline_flags("(?-i)abc"), "abc");
assert_eq!(strip_leading_inline_flags("(?im)abc"), "abc");
assert_eq!(strip_leading_inline_flags("(?im-sx)abc"), "abc");
assert_eq!(strip_leading_inline_flags("(?:abc)"), "(?:abc)");
assert_eq!(strip_leading_inline_flags("(?-i:abc)"), "(?-i:abc)");
assert_eq!(strip_leading_inline_flags("abc"), "abc");
}
#[test]
fn strip_boundary_guard_only_for_real_guards() {
assert_eq!(
strip_leading_boundary_guard("(?:^|[^A-Za-z0-9_])(sk-x)"),
Some("(sk-x)")
);
assert_eq!(strip_leading_boundary_guard("(?:foo|bar)x"), None);
assert_eq!(strip_leading_boundary_guard("AKIA[0-9]{16}"), None);
}