use std::path::Path;
use stern4rust::package_tree::PackageTree;
use stern4rust::source_file::SourceFile;
fn tree(paths: &[&str]) -> PackageTree {
let files: Vec<SourceFile> = paths
.iter()
.map(|path| SourceFile::new(path, "\n"))
.collect();
PackageTree::of(&files)
}
#[test]
fn directories_lists_every_directory_a_file_sits_in() {
let tree = tree(&["src/lib.rs", "src/rules/mod.rs", "tests/all_tests.rs"]);
let directories = tree.directories();
assert_eq!(
directories,
[Path::new("src"), Path::new("src/rules"), Path::new("tests")]
);
}
#[test]
fn expected_modules_in_counts_a_sibling_file() {
let tree = tree(&["src/lib.rs", "src/widget.rs"]);
let expected = tree.expected_modules_in(Path::new("src"));
assert_eq!(expected, ["widget"]);
}
#[test]
fn expected_modules_in_counts_a_subfolder_that_has_a_registry() {
let tree = tree(&["src/lib.rs", "src/rules/mod.rs", "src/rules/alpha.rs"]);
let expected = tree.expected_modules_in(Path::new("src"));
assert_eq!(expected, ["rules"]);
}
#[test]
fn expected_modules_in_ignores_a_subfolder_without_a_registry() {
let tree = tree(&["src/lib.rs", "src/loose/alpha.rs"]);
let expected = tree.expected_modules_in(Path::new("src"));
assert!(expected.is_empty(), "expected none, got {expected:?}");
}
#[test]
fn expected_modules_in_ignores_the_registries_themselves() {
let tree = tree(&["src/lib.rs", "src/main.rs"]);
let expected = tree.expected_modules_in(Path::new("src"));
assert!(expected.is_empty(), "expected none, got {expected:?}");
}
#[test]
fn registries_in_of_a_directory_without_one_is_empty() {
let tree = tree(&["src/widget.rs"]);
let registries = tree.registries_in(Path::new("src"));
assert!(registries.is_empty(), "expected none, got {registries:?}");
}
#[test]
fn registries_in_puts_lib_ahead_of_main() {
let tree = tree(&["src/main.rs", "src/lib.rs"]);
let registries = tree.registries_in(Path::new("src"));
assert_eq!(
registries,
[Path::new("src/lib.rs"), Path::new("src/main.rs")]
);
}