diff --git a/slhx-derive/tests/compile_fail.rs b/slhx-derive/tests/compile_fail.rs index 41bab05..8bf03f9 100644 --- a/slhx-derive/tests/compile_fail.rs +++ b/slhx-derive/tests/compile_fail.rs @@ -67,6 +67,66 @@ fn known() {} ); } +#[test] +fn generated_resource_references_fail_when_name_is_absent() { + // req: style/002 req: codegen/001 req: test/003 + let fixture = Fixture::new("slhx-derive-generated-resource-fail"); + fixture.write( + "Cargo.toml", + &format!( + r#"[package] +name = "slhx-derive-generated-resource-fail" +version = "0.0.0" +edition = "2021" + +[lib] +path = "src/lib.rs" + +[dependencies] +slhx = {{ path = {:?} }} +"#, + repo_path("slhx") + ), + ); + fixture.write( + "build.rs", + r#"fn main() { + let out = std::path::PathBuf::from(std::env::var_os("OUT_DIR").unwrap()); + std::fs::write( + out.join("slhx.generated.rs"), + "pub mod classes { pub const card: ::slhx::CssClass = ::slhx::CssClass::new(\"card\"); }\n", + ) + .unwrap(); +} +"#, + ); + fixture.write( + "src/lib.rs", + r#"#[slhx::surface] +pub mod ui {} + +pub const KNOWN: slhx::CssClass = ui::classes::card; +pub const MISSING: slhx::CssClass = ui::classes::missing; +"#, + ); + + let output = Command::new("cargo") + .arg("check") + .arg("--quiet") + .arg("--manifest-path") + .arg(fixture.path.join("Cargo.toml")) + .env("CARGO_TARGET_DIR", fixture.path.join("target")) + .output() + .expect("cargo check fixture runs"); + + assert!(!output.status.success(), "fixture unexpectedly compiled"); + let stderr = String::from_utf8_lossy(&output.stderr); + assert!( + stderr.contains("cannot find value `missing` in module `ui::classes`"), + "missing generated-resource diagnostic in stderr:\n{stderr}" + ); +} + fn repo_path(crate_name: &str) -> PathBuf { Path::new(env!("CARGO_MANIFEST_DIR")) .parent()