perl-module 0.16.0

Perl module resolution, import analysis, and refactoring — unified facade
Documentation
use perl_module::boundary::{
    contains_standalone_module_token, find_standalone_module_token_ranges,
};

#[test]
fn given_direct_import_line_when_module_token_is_standalone_then_match_is_found() {
    let line = "use My::Module;";
    let ranges = find_standalone_module_token_ranges(line, "My::Module").collect::<Vec<_>>();

    assert_eq!(ranges.len(), 1);
    assert_eq!(&line[ranges[0].start..ranges[0].end], "My::Module");
    assert!(contains_standalone_module_token(line, "My::Module"));
}

#[test]
fn given_partial_module_suffix_when_scanning_then_match_is_not_found() {
    let line = "use My::ModuleX;";

    assert!(find_standalone_module_token_ranges(line, "My::Module").collect::<Vec<_>>().is_empty());
    assert!(!contains_standalone_module_token(line, "My::Module"));
}

#[test]
fn given_legacy_separator_with_trailing_segment_when_scanning_then_boundary_rejects_partial_match()
{
    let line = "use My'Module'Child;";

    assert!(find_standalone_module_token_ranges(line, "My'Module").collect::<Vec<_>>().is_empty());
    assert!(!contains_standalone_module_token(line, "My'Module"));
}

#[test]
fn given_empty_inputs_when_scanning_then_no_match_is_returned() {
    assert!(!contains_standalone_module_token("", "My::Module"));
    assert!(!contains_standalone_module_token("use My::Module;", ""));
}