1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//! Module dependency integration tests.
//!
//! These tests keep every declared module owned by a directory and a test area.
use std::fs;
use std::path::Path;
/// Verifies that each crate root module has implementation files and tests.
#[test]
fn top_level_modules_have_owned_files_and_tests() {
let source_root = Path::new(env!("CARGO_MANIFEST_DIR")).join("src");
let lib_text = fs::read_to_string(source_root.join("lib.rs")).expect("read src/lib.rs");
for line in lib_text.lines().filter(|line| line.starts_with("pub mod ")) {
let module = line
.trim_start_matches("pub mod ")
.trim_end_matches(';')
.trim();
let module_root = source_root.join(module);
// Skip file modules (e.g. `src/platform.rs`), only check directory
// modules (e.g. `src/runtime/mod.rs`).
if !module_root.join("mod.rs").exists() && !module_root.is_dir() {
// File module — no directory to check.
assert!(
source_root.join(format!("{module}.rs")).exists(),
"module {module} declared in lib.rs but neither {module}.rs nor {module}/mod.rs exists"
);
continue;
}
let owned_files = fs::read_dir(&module_root)
.expect("read module root")
.filter_map(Result::ok)
.filter(|entry| {
entry
.path()
.extension()
.is_some_and(|extension| extension == "rs")
})
.filter(|entry| entry.file_name() != "mod.rs")
.count();
let has_submodules = fs::read_dir(&module_root)
.expect("read module root")
.filter_map(Result::ok)
.any(|entry| entry.file_type().is_ok_and(|t| t.is_dir()));
assert!(
owned_files > 0 || has_submodules,
"module {module} has no owned files or submodules"
);
// Skip tests directory check for bridge-only modules (owned_files == 0
// but has_submodules == true), e.g. `ipc` which only re-exports
// sub-modules like `ipc::security`.
// Also skip for leaf-type modules (owned_files <= 1) that only define
// types without behavior logic, e.g. `types` with a single
// `running_instance_id.rs`.
if owned_files > 1 {
assert!(
module_root.join("tests").is_dir(),
"module {module} has no tests"
);
}
}
}