#![cfg(any(
not(any(
feature = "parser_tests",
feature = "analyzer_tests",
feature = "codegen_tests",
feature = "interpreter_tests",
feature = "conformance_tests",
feature = "integration_tests",
)),
feature = "integration_tests",
))]
use std::fs;
use tempfile::TempDir;
#[test]
fn test_lib_rs_includes_top_level_rs_files() {
let temp_dir = TempDir::new().unwrap();
let lib_dir = temp_dir.path();
fs::create_dir(lib_dir.join("core")).unwrap();
fs::write(lib_dir.join("core/mod.rs"), "// core module").unwrap();
fs::create_dir(lib_dir.join("panels")).unwrap();
fs::write(lib_dir.join("panels/mod.rs"), "// panels module").unwrap();
fs::write(lib_dir.join("scene.rs"), "// scene module").unwrap();
fs::write(lib_dir.join("utils.rs"), "// utils module").unwrap();
generate_lib_rs_for_test(lib_dir).unwrap();
let lib_rs = fs::read_to_string(lib_dir.join("lib.rs")).unwrap();
assert!(
lib_rs.contains("pub mod core;"),
"Should include core module"
);
assert!(
lib_rs.contains("pub mod panels;"),
"Should include panels module"
);
assert!(
lib_rs.contains("pub mod scene;"),
"Should include scene.rs as module"
);
assert!(
lib_rs.contains("pub mod utils;"),
"Should include utils.rs as module"
);
assert!(lib_rs.contains("pub use core::*;"));
assert!(lib_rs.contains("pub use panels::*;"));
assert!(lib_rs.contains("pub use scene::*;"));
assert!(lib_rs.contains("pub use utils::*;"));
}
fn generate_lib_rs_for_test(lib_output_dir: &std::path::Path) -> anyhow::Result<()> {
use std::fs;
let mut modules = Vec::new();
for entry in fs::read_dir(lib_output_dir)? {
let entry = entry?;
let path = entry.path();
if path.is_dir() {
if let Some(dir_name) = path.file_name().and_then(|n| n.to_str()) {
if path.join("mod.rs").exists() {
modules.push(dir_name.to_string());
}
}
} else if path.is_file() {
if let Some(file_name) = path.file_name().and_then(|n| n.to_str()) {
if file_name.ends_with(".rs") && file_name != "lib.rs" {
let module_name = file_name.trim_end_matches(".rs");
modules.push(module_name.to_string());
}
}
}
}
if modules.is_empty() {
return Ok(()); }
modules.sort();
let mut lib_rs = String::from("// Auto-generated library entry point\n\n");
for module in &modules {
lib_rs.push_str(&format!("pub mod {};\n", module));
}
lib_rs.push_str("\n// Re-export for convenience\n");
for module in &modules {
lib_rs.push_str(&format!("pub use {}::*;\n", module));
}
fs::write(lib_output_dir.join("lib.rs"), lib_rs)?;
Ok(())
}