hara-native 0.1.21

HAL-free native host runtime and package launcher for Hara
Documentation
use hara_wasm::package_catalog::{
    definitions_from_packages_edn, find_package_definition, package_dependency_order,
    package_namespaces, validate_package_definitions,
};
use std::path::Path;

#[test]
fn hara_package_profile_matches_the_semantic_package_coordinates() {
    let definitions = definitions_from_packages_edn(include_str!("../../config/packages.edn"))
        .expect("the Hara package profile should be valid EDN");
    let postgres = find_package_definition(&definitions, "lang.model.v1.postgres")
        .expect("the Postgres model package should be defined");
    let available = [
        "lang.model.v1.spec-postgres",
        "lang.model.v1.spec-postgres.deftype.common",
        "postgres.core",
        "postgres.core.graph",
        "postgres.gen",
        "postgres.gen.rpc",
        "postgres.typed",
        "db.postgres",
    ]
    .into_iter()
    .map(str::to_owned)
    .collect::<Vec<_>>();
    assert_eq!(
        package_namespaces(postgres, &available),
        vec![
            "lang.model.v1.spec-postgres",
            "lang.model.v1.spec-postgres.deftype.common",
            "postgres.core",
            "postgres.core.graph",
            "postgres.gen",
            "postgres.gen.rpc",
            "postgres.typed",
        ]
    );
    assert_eq!(
        package_dependency_order(&definitions, &["lang.model.v1.postgres".to_owned()])
            .expect("package dependencies should be acyclic"),
        vec![
            "lang.base".to_owned(),
            "lang.common".to_owned(),
            "lang.core".to_owned(),
            "lang.model.v1.spec-xtalk".to_owned(),
            "lang.typed".to_owned(),
            "lang.model.v1.postgres".to_owned(),
        ]
    );
}

#[test]
fn hara_package_profile_owns_non_overlapping_real_source_namespaces() {
    let definitions = definitions_from_packages_edn(include_str!("../../config/packages.edn"))
        .expect("the Hara package profile should be valid EDN");
    let project = hara_wasm::project::read(
        Path::new(env!("CARGO_MANIFEST_DIR"))
            .join("../project.edn")
            .as_path(),
    )
    .expect("the core project should be readable");
    let available = hara_wasm::project::source_resources(&project)
        .expect("the core source tree should be discoverable")
        .into_iter()
        .map(|(namespace, _)| namespace)
        .collect::<Vec<_>>();
    validate_package_definitions(&definitions, &available)
        .expect("semantic package ownership must not overlap");
    for name in [
        "code.test",
        "code.manage",
        "lang.base",
        "lang.seedgen",
        "lang.model.v1.postgres",
    ] {
        let package = find_package_definition(&definitions, name).unwrap();
        assert!(
            !package_namespaces(package, &available).is_empty(),
            "{name} must select at least one source namespace"
        );
    }
}