use std::path::Path;
use crap4rust::file_walker::{
is_excluded_relative_file, is_selected_relative_file, normalize_path, relative_file,
};
#[test]
fn relative_file_within_base_dir_strips_prefix() {
let base = Path::new("/project/src");
let file = Path::new("/project/src/lib.rs");
let result = relative_file(base, file);
assert_eq!(result, "lib.rs");
}
#[test]
fn relative_file_outside_base_dir_returns_full_path() {
let base = Path::new("/project/src");
let file = Path::new("/other/lib.rs");
let result = relative_file(base, file);
assert_eq!(result, "/other/lib.rs");
}
#[test]
fn is_selected_relative_file_without_test_targets_excludes_tests() {
let result = is_selected_relative_file("tests/test.rs", false);
assert!(!result);
}
#[test]
fn is_selected_relative_file_with_test_targets_includes_tests() {
let result = is_selected_relative_file("tests/test.rs", true);
assert!(result);
}
#[test]
fn is_selected_relative_file_excludes_examples() {
let result = is_selected_relative_file("examples/example.rs", false);
assert!(!result);
}
#[test]
fn is_selected_relative_file_excludes_benches() {
let result = is_selected_relative_file("benches/bench.rs", false);
assert!(!result);
}
#[test]
fn is_selected_relative_file_excludes_build_rs() {
let result = is_selected_relative_file("build.rs", false);
assert!(!result);
}
#[test]
fn is_selected_relative_file_includes_src_files() {
let result = is_selected_relative_file("src/lib.rs", false);
assert!(result);
}
#[test]
fn is_excluded_relative_file_matches_prefix() {
let excludes = vec![String::from("tests/fixtures")];
let result = is_excluded_relative_file("tests/fixtures/data.rs", &excludes);
assert!(result);
}
#[test]
fn is_excluded_relative_file_exact_match() {
let excludes = vec![String::from("build.rs")];
let result = is_excluded_relative_file("build.rs", &excludes);
assert!(result);
}
#[test]
fn is_excluded_relative_file_non_matching_not_excluded() {
let excludes = vec![String::from("tests/fixtures")];
let result = is_excluded_relative_file("src/lib.rs", &excludes);
assert!(!result);
}
#[test]
fn normalize_path_replaces_backslashes() {
let result = normalize_path(Path::new("C:\\project\\src\\lib.rs"));
assert!(!result.contains('\\'));
}