perl-module-resolution-path 0.12.0

Resolve Perl module names to workspace-safe filesystem paths
Documentation
use perl_module_path::module_name_to_path;
use perl_module_resolution_path::resolve_module_path;
use proptest::prelude::*;
use std::path::PathBuf;

fn module_name_strategy() -> impl Strategy<Value = String> {
    proptest::collection::vec("[A-Za-z][A-Za-z0-9_]{0,7}", 1..4)
        .prop_map(|segments| segments.join("::"))
}

proptest! {
    #[test]
    fn resolved_path_starts_with_root(module_name in module_name_strategy()) {
        let root = PathBuf::from("/workspace");
        let include_paths = vec![".".to_string(), "lib".to_string(), "..".to_string()];

        let resolved = resolve_module_path(&root, &module_name, &include_paths)
            .ok_or_else(|| TestCaseError::Fail("module path resolution should succeed".into()))?;

        prop_assert!(resolved.starts_with(&root));
        prop_assert!(resolved.ends_with(module_name_to_path(&module_name)));
    }
}