#![cfg(any(
not(any(
feature = "parser_tests",
feature = "analyzer_tests",
feature = "codegen_tests",
feature = "interpreter_tests",
feature = "conformance_tests",
feature = "integration_tests",
)),
feature = "analyzer_tests",
))]
use std::fs;
use tempfile::TempDir;
#[test]
#[cfg_attr(tarpaulin, ignore)]
fn test_desktop_module_feature_gates() {
let temp_dir = TempDir::new().unwrap();
let src_dir = temp_dir.path().join("src");
fs::create_dir(&src_dir).unwrap();
fs::write(src_dir.join("button.wj"), "pub struct Button {}").unwrap();
fs::write(
src_dir.join("desktop_renderer.wj"),
"pub struct DesktopRenderer {}",
)
.unwrap();
fs::write(src_dir.join("app_docking.wj"), "pub struct AppDocking {}").unwrap();
fs::write(src_dir.join("app_reactive.wj"), "pub struct AppReactive {}").unwrap();
let output_dir = temp_dir.path().join("out");
fs::create_dir(&output_dir).unwrap();
let status = std::process::Command::new(env!("CARGO_BIN_EXE_wj"))
.arg("build")
.arg(&src_dir)
.arg("-o")
.arg(&output_dir)
.arg("--target")
.arg("rust")
.arg("--module-file")
.arg("--no-cargo")
.status()
.expect("Failed to execute wj");
assert!(status.success(), "wj build should succeed");
let mod_rs = fs::read_to_string(output_dir.join("mod.rs")).expect("mod.rs should be generated");
println!("Generated mod.rs:\n{}", mod_rs);
assert!(
mod_rs.contains("#[cfg(feature = \"desktop\")]\npub mod desktop_renderer;"),
"desktop_renderer should have feature gate"
);
assert!(
mod_rs.contains("#[cfg(feature = \"desktop\")]\npub mod app_docking;"),
"app_docking should have feature gate"
);
assert!(
mod_rs.contains("pub mod button;")
&& !mod_rs.contains("#[cfg(feature = \"desktop\")]\npub mod button;"),
"button should NOT have feature gate"
);
assert!(
mod_rs.contains("pub mod app_reactive;")
&& !mod_rs.contains("#[cfg(feature = \"desktop\")]\npub mod app_reactive;"),
"app_reactive should NOT have feature gate (exception)"
);
assert!(
mod_rs.contains("#[cfg(feature = \"desktop\")]\npub use desktop_renderer::*;"),
"desktop_renderer re-export should have feature gate"
);
assert!(
mod_rs.contains("#[cfg(feature = \"desktop\")]\npub use app_docking::*;"),
"app_docking re-export should have feature gate"
);
}
#[test]
#[cfg_attr(tarpaulin, ignore)]
fn test_no_feature_gates_for_regular_modules() {
let temp_dir = TempDir::new().unwrap();
let src_dir = temp_dir.path().join("src");
fs::create_dir(&src_dir).unwrap();
fs::write(src_dir.join("button.wj"), "pub struct Button {}").unwrap();
fs::write(src_dir.join("input.wj"), "pub struct Input {}").unwrap();
fs::write(src_dir.join("text.wj"), "pub struct Text {}").unwrap();
let output_dir = temp_dir.path().join("out");
fs::create_dir(&output_dir).unwrap();
let status = std::process::Command::new(env!("CARGO_BIN_EXE_wj"))
.arg("build")
.arg(&src_dir)
.arg("-o")
.arg(&output_dir)
.arg("--target")
.arg("rust")
.arg("--module-file")
.arg("--no-cargo")
.status()
.expect("Failed to execute wj");
assert!(status.success());
let mod_rs = fs::read_to_string(output_dir.join("mod.rs")).expect("mod.rs should be generated");
assert!(
!mod_rs.contains("#[cfg(feature = \"desktop\")]"),
"No feature gates should be present for non-desktop modules"
);
}