recast-core 0.1.6

Engine behind the recast CLI: regex / Rhai script / tree-sitter rewrites, atomic two-phase commit, schema-locked JSON output.
Documentation
#![allow(clippy::unwrap_used)]

use super::*;

#[test]
fn literal_mode_escapes_metacharacters() {
    let p = CompiledPattern::compile(
        "a.b",
        "X",
        &PatternOptions { literal: true, ..Default::default() },
    )
    .unwrap();
    assert!(p.regex().is_match("a.b"));
    assert!(!p.regex().is_match("aXb"));
}

#[test]
fn convergent_rewrite_is_detected() {
    let p = CompiledPattern::compile("Old", "New", &PatternOptions::default()).unwrap();
    assert!(p.is_convergent());
}

#[test]
fn non_convergent_rewrite_is_detected() {
    let p = CompiledPattern::compile("a", "aa", &PatternOptions::default()).unwrap();
    assert!(!p.is_convergent());
}

#[test]
fn capture_group_in_replacement_does_not_break_convergence_probe() {
    let p = CompiledPattern::compile(r"foo(\d+)", "bar$1", &PatternOptions::default()).unwrap();
    assert!(p.is_convergent());
}

#[test]
fn dot_matches_newline_by_default() {
    let p = CompiledPattern::compile("a.b", "X", &PatternOptions::default()).unwrap();
    assert!(p.regex().is_match("a\nb"));
}

#[test]
fn single_line_flag_disables_dotall() {
    let p = CompiledPattern::compile(
        "a.b",
        "X",
        &PatternOptions { single_line: true, ..Default::default() },
    )
    .unwrap();
    assert!(!p.regex().is_match("a\nb"));
}