use super::*;
#[test]
fn the_missing_message_names_the_command_that_fixes_it() {
let message = missing();
assert!(
message.contains("cargo install cargo-rahti-native"),
"{message}"
);
assert!(message.contains("optional"), "{message}");
}
#[test]
fn the_missing_message_offers_no_way_to_install_it_for_you() {
let message = missing().to_ascii_lowercase();
for forbidden in ["installing", "downloading", "shall i", "would you like"] {
assert!(!message.contains(forbidden), "{forbidden}");
}
}
#[test]
fn the_helper_is_looked_for_beside_this_executable_first() {
let path = locate();
let name = path
.file_name()
.and_then(|n| n.to_str())
.unwrap_or_default();
assert_eq!(name, format!("{HELPER}{}", std::env::consts::EXE_SUFFIX));
let sibling = std::env::current_exe()
.unwrap()
.parent()
.unwrap()
.join(format!("{HELPER}{}", std::env::consts::EXE_SUFFIX));
if sibling.is_file() {
assert_eq!(path, sibling);
}
}
#[test]
fn a_forwarded_command_reaches_the_helper() {
let helper = std::env::current_exe()
.unwrap()
.parent()
.unwrap()
.join(format!("{HELPER}{}", std::env::consts::EXE_SUFFIX));
if !helper.is_file() {
eprintln!(
"skipped: {} has not been built — run `cargo build --workspace` first",
helper.display()
);
return;
}
let output = std::process::Command::new(&helper)
.args(["native", "--help"])
.output()
.expect("the helper runs");
assert!(output.status.success());
let text = String::from_utf8_lossy(&output.stdout);
assert!(text.contains("cargo rahti native init"), "{text}");
assert!(text.contains("--target"), "{text}");
}
#[test]
fn a_forwarded_failure_is_forwarded_as_a_failure() {
let helper = std::env::current_exe()
.unwrap()
.parent()
.unwrap()
.join(format!("{HELPER}{}", std::env::consts::EXE_SUFFIX));
if !helper.is_file() {
eprintln!("skipped: the helper has not been built");
return;
}
let output = std::process::Command::new(&helper)
.args(["native", "build", "--target", "ios"])
.output()
.expect("the helper runs");
assert!(!output.status.success(), "an unsupported target succeeded");
let text = String::from_utf8_lossy(&output.stderr);
assert!(text.contains("ios"), "{text}");
}