test(derive): cover missing generated resource
Add compile-fail coverage for generated APIs: a surface include that exposes only one class must reject references to absent generated class names during cargo check. req: codegen/001 req: style/002 req: test/003
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user