#![cfg(any(
not(any(
feature = "parser_tests",
feature = "analyzer_tests",
feature = "codegen_tests",
feature = "interpreter_tests",
feature = "conformance_tests",
feature = "integration_tests",
)),
feature = "integration_tests",
))]
use std::env;
use std::fs;
use std::path::PathBuf;
use tempfile::tempdir;
#[test]
#[cfg_attr(tarpaulin, ignore)]
fn test_library_uses_correct_lib_name() {
let _tmp = tempdir().expect("tempdir");
let test_dir = _tmp.path().to_path_buf();
let cargo_toml = r#"[package]
name = "my-game-core"
version = "0.1.0"
edition = "2021"
[lib]
name = "my_game_core"
path = "src/lib.rs"
[workspace]
"#;
fs::write(test_dir.join("Cargo.toml"), cargo_toml).unwrap();
let src_dir = test_dir.join("src");
fs::create_dir_all(&src_dir).unwrap();
let wj_content = r#"
pub struct Player {
name: string,
health: i32
}
impl Player {
pub fn new(name: string) -> Player {
Player { name, health: 100 }
}
}
"#;
fs::write(src_dir.join("player.wj"), wj_content).unwrap();
fs::write(src_dir.join("mod.wj"), "pub use player::Player;").unwrap();
let tests_wj_dir = test_dir.join("tests_wj");
fs::create_dir_all(&tests_wj_dir).unwrap();
let test_content = r#"
use my_game_core::Player
@test
fn test_player_creation() {
let player = Player::new("Hero")
assert_eq(player.health, 100)
}
"#;
fs::write(tests_wj_dir.join("player_test.wj"), test_content).unwrap();
let wj_binary = PathBuf::from(env!("CARGO_BIN_EXE_wj"));
let output = std::process::Command::new(&wj_binary)
.current_dir(&test_dir)
.arg("test")
.output()
.expect("Failed to run wj test");
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
!stderr.contains("E0433") && !stderr.contains("unresolved module or unlinked crate"),
"Test library should use correct lib name (my_game_core), not windjammer-app or my_game_core_testlib.\nSTDOUT:\n{}\nSTDERR:\n{}",
stdout,
stderr
);
assert!(
output.status.success(),
"Tests should pass with correct lib name.\nSTDOUT:\n{}\nSTDERR:\n{}",
stdout,
stderr
);
}