use super::*;
use crate::core::config::{NewAlefConfig, ResolvedCrateConfig};
fn config_with(extra: &str) -> ResolvedCrateConfig {
let cfg: NewAlefConfig = toml::from_str(&format!(
r#"
[workspace]
languages = ["rust"]
[[crates]]
name = "sample"
sources = ["src/lib.rs"]
{extra}
"#
))
.expect("valid config");
cfg.resolve().expect("resolvable").remove(0)
}
fn plain_config() -> ResolvedCrateConfig {
config_with("")
}
const E2E_WITH_OVERRIDES: &str = r#"
[crates.e2e]
fixtures = "fixtures"
output = "e2e"
[crates.e2e.call]
function = "run"
[crates.e2e.format]
dart = "cd {dir} && dart format ."
[crates.e2e.registry]
output = "test_apps"
"#;
#[test]
fn a_path_poly_never_reaches_is_owned_by_nobody() {
let base = std::path::Path::new("/repo");
let path = base.join("packages/zig/src/main.zig");
let coverage = PolyCoverage::covering([]);
assert_eq!(
formatting_owner(&path, &plain_config(), base, &coverage),
FormattingOwner::None,
"poly does not reach this path, so nothing alef runs reshapes it"
);
}
#[test]
fn a_path_poly_does_reach_is_owned_by_poly() {
let base = std::path::Path::new("/repo");
let path = base.join("packages/zig/src/main.zig");
let coverage = PolyCoverage::covering([path.clone()]);
assert_eq!(
formatting_owner(&path, &plain_config(), base, &coverage),
FormattingOwner::Poly
);
}
#[test]
fn an_unavailable_probe_stays_conservative_rather_than_claiming_nothing_is_formatted() {
let base = std::path::Path::new("/repo");
let path = base.join("packages/zig/src/main.zig");
assert_eq!(
formatting_owner(&path, &plain_config(), base, &PolyCoverage::unavailable()),
FormattingOwner::Poly,
"an unknown answer must route to the tier that still examines something"
);
}
#[test]
fn elixir_source_is_owned_by_mix_format_not_poly() {
let base = std::path::Path::new("/repo");
let config = plain_config();
let coverage = PolyCoverage::covering([]);
for relative in ["packages/elixir/lib/sample.ex", "packages/elixir/mix.exs"] {
assert_eq!(
formatting_owner(&base.join(relative), &config, base, &coverage),
FormattingOwner::Residual("mix format"),
"{relative} is formatted solely by mix format"
);
}
}
#[test]
fn a_cargo_manifest_is_owned_by_cargo_sort() {
let base = std::path::Path::new("/repo");
assert_eq!(
formatting_owner(
&base.join("crates/sample-ffi/Cargo.toml"),
&plain_config(),
base,
&PolyCoverage::covering([])
),
FormattingOwner::Residual("cargo sort -n -w"),
);
}
#[test]
fn an_e2e_format_override_outranks_poly_coverage() {
let base = std::path::Path::new("/repo");
let path = base.join("e2e/dart/test/smoke_test.dart");
let config = config_with(E2E_WITH_OVERRIDES);
assert_eq!(
formatting_owner(&path, &config, base, &PolyCoverage::covering([path.clone()])),
FormattingOwner::E2eOverride("cd {dir} && dart format .".to_string()),
);
}
#[test]
fn the_registry_output_tree_is_classified_like_the_plain_one() {
let base = std::path::Path::new("/repo");
let config = config_with(E2E_WITH_OVERRIDES);
assert_eq!(
formatting_owner(
&base.join("test_apps/dart/test/smoke_test.dart"),
&config,
base,
&PolyCoverage::covering([])
),
FormattingOwner::E2eOverride("cd {dir} && dart format .".to_string()),
);
}
#[test]
fn a_language_without_an_override_is_not_claimed_by_one() {
let base = std::path::Path::new("/repo");
let path = base.join("e2e/java/src/test/java/SmokeTest.java");
let config = config_with(E2E_WITH_OVERRIDES);
assert_eq!(
formatting_owner(&path, &config, base, &PolyCoverage::covering([path.clone()])),
FormattingOwner::Poly,
"only the languages named in [crates.e2e.format] are override-owned"
);
}
#[test]
fn reported_paths_are_normalized_before_they_enter_the_coverage_set() {
let base = std::path::Path::new("/repo");
let payload = r#"{
"results": [
{"path": "./packages/zig/README.md", "changed": false},
{"path": "packages/zig/build.zig", "changed": true},
{"path": "/repo/packages/zig/src/main.zig", "changed": false}
]
}"#;
let covered = parse_poly_coverage(payload, base).expect("payload parses");
for relative in [
"packages/zig/README.md",
"packages/zig/build.zig",
"packages/zig/src/main.zig",
] {
assert!(
covered.contains(&base.join(relative)),
"{relative} must resolve to the same absolute path alef uses internally; got {covered:?}"
);
}
}
#[test]
fn a_skipped_entry_is_not_coverage() {
let base = std::path::Path::new("/repo");
let payload = r#"{
"results": [
{"path": "./a.csproj", "changed": false, "skipped": "no matching engine for this file type"},
{"path": "./b.py", "changed": false}
]
}"#;
let covered = parse_poly_coverage(payload, base).expect("payload parses");
assert!(
!covered.contains(&base.join("a.csproj")),
"a declined file is not covered"
);
assert!(covered.contains(&base.join("b.py")));
}
#[test]
fn a_malformed_payload_is_unknown_not_empty() {
assert!(
parse_poly_coverage("not json at all", std::path::Path::new("/repo")).is_none(),
"an unreadable payload must not masquerade as a complete answer"
);
}
#[test]
fn every_exclude_glob_is_emitted_as_an_exclude_argument_pair() {
let mut args = Vec::new();
push_poly_format_excludes(&mut args);
assert_eq!(args.len(), POLY_EXCLUDE_GLOBS.len() * 2);
for glob in POLY_EXCLUDE_GLOBS {
let position = args.iter().position(|arg| arg == glob).expect("glob present");
assert_eq!(args[position - 1], "--exclude");
}
}