use super::RULE;
#[test]
fn fix_with_all_flag() {
let bad = r#"$text | str replace -a "x" "_" | str replace -a "y" "_""#;
RULE.assert_fixed_contains(bad, r#"str replace -ar "x|y" "_""#);
}
#[test]
fn fix_three_replaces_with_all_flag() {
let bad = r#"$text | str replace -a "a" "X" | str replace -a "b" "X" | str replace -a "c" "X""#;
RULE.assert_fixed_contains(bad, r#"str replace -ar "a|b|c" "X""#);
}
#[test]
fn fix_escapes_regex_metacharacters() {
let bad = r#"$text | str replace -a "." "X" | str replace -a "*" "X""#;
RULE.assert_fixed_contains(bad, r#"str replace -ar "\.|"#);
}
#[test]
fn fix_in_function() {
let bad = r#"
def clean [] {
$in | str replace -a "old" "new" | str replace -a "foo" "new"
}
"#;
RULE.assert_fixed_contains(bad, r#"str replace -ar "old|foo" "new""#);
}
#[test]
fn no_fix_without_all_flag() {
let code = r#"$text | str replace "a" "X" | str replace "b" "X""#;
RULE.assert_detects(code);
}
#[test]
fn no_fix_different_replacements() {
let code = r#"$text | str replace -a "a" "X" | str replace -a "b" "Y""#;
RULE.assert_detects(code);
}
#[test]
fn no_fix_mixed_flags() {
let code = r#"$text | str replace -a "a" "X" | str replace "b" "X""#;
RULE.assert_detects(code);
}
#[test]
fn no_fix_with_regex_flag() {
let code = r#"$text | str replace -ar "a+" "X" | str replace -ar "b+" "X""#;
RULE.assert_detects(code);
}
#[test]
fn no_fix_overlapping_patterns() {
let code = r#"$text | str replace -a "ab" "X" | str replace -a "a" "X""#;
RULE.assert_detects(code);
}
#[test]
fn no_fix_overlapping_patterns_reverse() {
let code = r#"$text | str replace -a "a" "X" | str replace -a "ab" "X""#;
RULE.assert_detects(code);
}