99 lines
3.0 KiB
Rust
99 lines
3.0 KiB
Rust
use super::{Action, BuildTarget, OsString, arguments_for};
|
|
|
|
#[test]
|
|
fn build_target_is_explicit_or_defaults_to_host() {
|
|
for options in [
|
|
vec!["--output", "program", "--target", "linux-aarch64"],
|
|
vec!["--target", "linux-aarch64", "--output", "program"],
|
|
vec!["--output", "program"],
|
|
] {
|
|
let explicit = options.contains(&"--target");
|
|
let arguments: Vec<_> = [vec!["build", "project"], options]
|
|
.concat()
|
|
.into_iter()
|
|
.map(OsString::from)
|
|
.collect();
|
|
let (root, action) = arguments_for(&arguments).unwrap();
|
|
assert_eq!(root.to_str(), Some("project"));
|
|
let Action::Build { output, target } = action else {
|
|
panic!("expected build");
|
|
};
|
|
assert_eq!(output.to_str(), Some("program"));
|
|
assert_eq!(
|
|
target,
|
|
if explicit {
|
|
BuildTarget::LinuxAarch64
|
|
} else {
|
|
BuildTarget::host().unwrap()
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn build_rejects_missing_unknown_duplicate_and_misplaced_options() {
|
|
for options in [
|
|
vec![],
|
|
vec!["--output"],
|
|
vec!["--target"],
|
|
vec!["--target", "linux-aarch64"],
|
|
vec!["--output", "program", "--target", "arm64"],
|
|
vec![
|
|
"--output",
|
|
"program",
|
|
"--target",
|
|
"linux-aarch64",
|
|
"--target",
|
|
"linux-aarch64",
|
|
],
|
|
vec!["--output", "program", "--output", "second"],
|
|
vec!["--output", "--target", "linux-aarch64"],
|
|
vec!["--output", "program", "--unknown"],
|
|
vec!["--output", "program", "extra"],
|
|
vec!["--output", ""],
|
|
] {
|
|
let arguments: Vec<_> = [vec!["build", "project"], options]
|
|
.concat()
|
|
.into_iter()
|
|
.map(OsString::from)
|
|
.collect();
|
|
assert!(arguments_for(&arguments).is_err(), "accepted {arguments:?}");
|
|
}
|
|
for command in ["run", "test", "check"] {
|
|
let arguments = [command, "project", "--target", "linux-aarch64"].map(OsString::from);
|
|
assert!(arguments_for(&arguments).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn lib_target_keeps_specs_and_rejects_option_drift() {
|
|
let arguments = [
|
|
"lib",
|
|
"add",
|
|
"project",
|
|
"pip:demo",
|
|
"--target",
|
|
"linux-aarch64",
|
|
]
|
|
.map(OsString::from);
|
|
let (_, action) = arguments_for(&arguments).unwrap();
|
|
let Action::Lib { specs, target, .. } = action else {
|
|
panic!("expected lib");
|
|
};
|
|
assert_eq!(specs, ["pip:demo"]);
|
|
assert_eq!(target, BuildTarget::LinuxAarch64);
|
|
for options in [
|
|
vec!["--target"],
|
|
vec!["--target", "arm64"],
|
|
vec!["--unknown"],
|
|
vec!["--target", "linux-aarch64", "--target", "linux-aarch64"],
|
|
] {
|
|
let arguments: Vec<_> = [vec!["lib", "update", "project"], options]
|
|
.concat()
|
|
.into_iter()
|
|
.map(OsString::from)
|
|
.collect();
|
|
assert!(arguments_for(&arguments).is_err());
|
|
}
|
|
}
|