Single-commit clean baseline after security scrub of niche-tells, project codenames, internal jargon, and contributor-email leaks. Contents: - 100 Rust crates (_primitives/_rust/) - 37 agent manifests (_manifests/) + generated specs (_generated/) - 67 user-invocable skills (skills/) - 33 hooks (hooks/) - Composition blocks (_blocks/) - Documentation (docs/, README.md) - TS adapter packages (_ts_packages/) - Assembler (_assembler/) - Roles (_roles/) - Templates (_templates/) - Forgejo CI (.forgejo/) Author: Denis Parfionovich <info@greendragon.info> License: see LICENSE.
87 lines
3 KiB
Rust
87 lines
3 KiB
Rust
//! Identifier unit tests — extracted from src/identifier.rs to keep LOC ≤200.
|
|
|
|
use kei_import_project::{identify_modules, walk_repo, ModuleKind};
|
|
use std::fs;
|
|
use std::path::Path;
|
|
use tempfile::TempDir;
|
|
|
|
fn mk(dir: &Path, rel: &str, content: &str) {
|
|
let p = dir.join(rel);
|
|
fs::create_dir_all(p.parent().unwrap()).unwrap();
|
|
fs::write(p, content).unwrap();
|
|
}
|
|
|
|
#[test]
|
|
fn single_rust_crate() {
|
|
let tmp = TempDir::new().unwrap();
|
|
let r = tmp.path();
|
|
mk(r, "Cargo.toml", "[package]\nname = \"my-crate\"\nversion = \"0.1.0\"\nedition = \"2021\"\n");
|
|
mk(r, "src/lib.rs", "pub fn foo() {}");
|
|
let walk = walk_repo(r).unwrap();
|
|
let modules = identify_modules(&walk).unwrap();
|
|
assert_eq!(modules.len(), 1);
|
|
assert_eq!(modules[0].kind, ModuleKind::RustCrate);
|
|
assert_eq!(modules[0].name, "my-crate");
|
|
assert_eq!(modules[0].source_files.len(), 1);
|
|
}
|
|
|
|
#[test]
|
|
fn single_npm_package() {
|
|
let tmp = TempDir::new().unwrap();
|
|
let r = tmp.path();
|
|
mk(r, "package.json", r#"{"name":"my-app","version":"1.0.0"}"#);
|
|
mk(r, "index.ts", "export const x = 1;");
|
|
let walk = walk_repo(r).unwrap();
|
|
let modules = identify_modules(&walk).unwrap();
|
|
assert_eq!(modules.len(), 1);
|
|
assert_eq!(modules[0].kind, ModuleKind::NpmPackage);
|
|
assert_eq!(modules[0].name, "my-app");
|
|
}
|
|
|
|
#[test]
|
|
fn cargo_workspace_two_members() {
|
|
let tmp = TempDir::new().unwrap();
|
|
let r = tmp.path();
|
|
mk(r, "crate-a/Cargo.toml", "[package]\nname = \"crate-a\"\nversion = \"0.1.0\"\nedition = \"2021\"\n");
|
|
mk(r, "crate-a/src/lib.rs", "");
|
|
mk(r, "crate-b/Cargo.toml", "[package]\nname = \"crate-b\"\nversion = \"0.1.0\"\nedition = \"2021\"\n");
|
|
mk(r, "crate-b/src/lib.rs", "");
|
|
let walk = walk_repo(r).unwrap();
|
|
let modules = identify_modules(&walk).unwrap();
|
|
assert_eq!(modules.len(), 2);
|
|
let names: Vec<_> = modules.iter().map(|m| m.name.as_str()).collect();
|
|
assert!(names.contains(&"crate-a"));
|
|
assert!(names.contains(&"crate-b"));
|
|
}
|
|
|
|
#[test]
|
|
fn mixed_monorepo_three_modules() {
|
|
let tmp = TempDir::new().unwrap();
|
|
let r = tmp.path();
|
|
mk(r, "rust-pkg/Cargo.toml", "[package]\nname = \"rust-pkg\"\nversion = \"0.1.0\"\nedition = \"2021\"\n");
|
|
mk(r, "rust-pkg/src/lib.rs", "");
|
|
mk(r, "py-pkg/pyproject.toml", "[project]\nname = \"py-pkg\"\n");
|
|
mk(r, "py-pkg/main.py", "print('hi')");
|
|
mk(r, "ts-pkg/package.json", r#"{"name":"ts-pkg","version":"0.0.1"}"#);
|
|
mk(r, "ts-pkg/index.ts", "export {};");
|
|
let walk = walk_repo(r).unwrap();
|
|
let modules = identify_modules(&walk).unwrap();
|
|
assert_eq!(modules.len(), 3);
|
|
}
|
|
|
|
#[test]
|
|
fn malformed_cargo_toml_returns_err() {
|
|
let tmp = TempDir::new().unwrap();
|
|
let r = tmp.path();
|
|
mk(r, "Cargo.toml", "this is not valid toml [[[");
|
|
mk(r, "src/lib.rs", "");
|
|
let walk = walk_repo(r).unwrap();
|
|
assert!(identify_modules(&walk).is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn empty_repo_returns_empty_vec() {
|
|
let tmp = TempDir::new().unwrap();
|
|
let walk = walk_repo(tmp.path()).unwrap();
|
|
assert!(identify_modules(&walk).unwrap().is_empty());
|
|
}
|