use regex::Regex;
macro_rules! regex {
($pattern:expr) => {
regex::Regex::new($pattern).unwrap()
};
}
// See: https://github.com/rust-lang/regex/issues/48
#[test]
fn invalid_regexes_no_crash() {
assert!(Regex::new(
"(*)").is_err());
assert!(Regex::new(
"(?:?)").is_err());
assert!(Regex::new(
"(?)").is_err());
assert!(Regex::new(
"*").is_err());
}
// See: https://github.com/rust-lang/regex/issues/98
#[test]
fn regression_many_repeat_stack_overflow() {
let re = regex!(
"^.{1,2500}");
assert_eq!(
vec![
0..
1],
re.find_iter(
"a").map(|m| m.range()).collect::<Vec<_>>()
);
}
// See: https://github.com/rust-lang/regex/issues/555
#[test]
fn regression_invalid_repetition_expr() {
assert!(Regex::new(
"(?m){1,1}").is_err());
}
// See: https://github.com/rust-lang/regex/issues/527
#[test]
fn regression_invalid_flags_expression() {
assert!(Regex::new(
"(((?x)))").is_ok());
}
// See: https://github.com/rust-lang/regex/issues/129
#[test]
fn regression_captures_rep() {
let re = regex!(r
"([a-f]){2}(?P<foo>[x-z])");
let caps = re.captures(
"abx").unwrap();
assert_eq!(&caps[
"foo"],
"x");
}
// See: https://github.com/BurntSushi/ripgrep/issues/1247
#[cfg(feature =
"unicode-perl")]
#[test]
fn regression_nfa_stops1() {
let re = regex::bytes::Regex::new(r
"\bs(?:[ab])").unwrap();
assert_eq!(
0, re.find_iter(b
"s\xE4").count());
}
// See: https://github.com/rust-lang/regex/issues/981
#[cfg(feature =
"unicode")]
#[test]
fn regression_bad_word_boundary() {
let re = regex!(r
#"(?i:(?:\b|_)win(?:
32|
64|dows)?(?:\b|_))
"#);
let hay =
"ubi-Darwin-x86_64.tar.gz";
assert!(!re.is_match(hay));
let hay =
"ubi-Windows-x86_64.zip";
assert!(re.is_match(hay));
}
// See: https://github.com/rust-lang/regex/issues/982
#[cfg(feature =
"unicode-perl")]
#[test]
fn regression_unicode_perl_not_enabled() {
let pat = r
"(\d+\s?(years|year|y))?\s?(\d+\s?(months|month|m))?\s?(\d+\s?(weeks|week|w))?\s?(\d+\s?(days|day|d))?\s?(\d+\s?(hours|hour|h))?";
assert!(Regex::new(pat).is_ok());
}
// See: https://github.com/rust-lang/regex/issues/995
#[test]
fn regression_big_regex_overflow() {
let pat = r
" {2147483516}{2147483416}{5}";
assert!(Regex::new(pat).is_err());
}
// See: https://github.com/rust-lang/regex/issues/999
#[test]
fn regression_complete_literals_suffix_incorrect() {
let needles = vec![
"aA",
"bA",
"cA",
"dA",
"eA",
"fA",
"gA",
"hA",
"iA",
"jA",
"kA",
"lA",
"mA",
"nA",
"oA",
"pA",
"qA",
"rA",
"sA",
"tA",
"uA",
"vA",
"wA",
"xA",
"yA",
"zA",
];
let pattern = needles.join(
"|");
let re = regex!(&pattern);
let hay =
"FUBAR";
assert_eq!(
0, re.find_iter(hay).count());
}