KeiSeiKit-1.0/_primitives/_rust/kei-import-project/tests/identifier_tests.rs
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
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.
2026-05-01 12:09:03 +08:00

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());
}