perl-module-import 0.12.2

Parse and classify single-line Perl use/require import heads
Documentation
use perl_module_import::{ModuleImportKind, parse_module_import_head};

#[test]
fn given_use_statement_when_parsed_then_use_kind_and_module_token_are_returned() {
    let parsed = parse_module_import_head("use My::Module;");

    assert!(parsed.is_some());
    if let Some(head) = parsed {
        assert_eq!(head.kind, ModuleImportKind::Use);
        assert_eq!(head.token, "My::Module");
        assert_eq!(head.token_start, 4);
        assert_eq!(head.token_end, 14);
    }
}

#[test]
fn given_require_statement_when_parsed_then_require_kind_and_module_token_are_returned() {
    let parsed = parse_module_import_head("require My::Module;");

    assert!(parsed.is_some());
    if let Some(head) = parsed {
        assert_eq!(head.kind, ModuleImportKind::Require);
        assert_eq!(head.token, "My::Module");
        assert_eq!(head.token_start, 8);
        assert_eq!(head.token_end, 18);
    }
}

#[test]
fn given_use_parent_statement_when_parsed_then_use_parent_kind_is_returned() {
    let parsed = parse_module_import_head("use parent 'My::Module';");

    assert!(parsed.is_some());
    if let Some(head) = parsed {
        assert_eq!(head.kind, ModuleImportKind::UseParent);
        assert_eq!(head.token, "parent");
    }
}

#[test]
fn given_use_base_statement_when_parsed_then_use_base_kind_is_returned() {
    let parsed = parse_module_import_head("use base qw(My::Module Other::Base);");

    assert!(parsed.is_some());
    if let Some(head) = parsed {
        assert_eq!(head.kind, ModuleImportKind::UseBase);
        assert_eq!(head.token, "base");
    }
}

#[test]
fn given_non_import_line_when_parsed_then_none_is_returned() {
    assert!(parse_module_import_head("my $x = use_module();").is_none());
    assert!(parse_module_import_head("package My::Module;").is_none());
}