use clap::Parser;
use twin4rust::args::Args;
#[test]
fn parse_args_all_options() {
let args = Args::parse_from([
"cargo-twin4rust",
"--manifest-path",
"my/Cargo.toml",
"--package",
"pkg_a",
"--package",
"pkg_b",
]);
assert_eq!(
args.manifest_path.unwrap().to_string_lossy(),
"my/Cargo.toml"
);
assert_eq!(args.packages, vec!["pkg_a", "pkg_b"]);
}
#[test]
fn parse_args_defaults() {
let args = Args::parse_from(["cargo-twin4rust"]);
assert!(args.manifest_path.is_none());
assert!(args.packages.is_empty());
}
#[test]
fn parse_args_manifest_path() {
let args = Args::parse_from(["cargo-twin4rust", "--manifest-path", "Cargo.toml"]);
assert_eq!(args.manifest_path.unwrap().to_string_lossy(), "Cargo.toml");
}
#[test]
fn parse_args_multiple_packages() {
let args = Args::parse_from([
"cargo-twin4rust",
"--package",
"foo",
"--package",
"bar",
"--package",
"baz",
]);
assert_eq!(args.packages, vec!["foo", "bar", "baz"]);
}
#[test]
fn parse_args_single_package() {
let args = Args::parse_from(["cargo-twin4rust", "--package", "foo"]);
assert_eq!(args.packages, vec!["foo"]);
}
#[test]
fn without_cargo_subcommand_drops_the_name_cargo_inserts() {
let raw = ["cargo-twin4rust", "twin4rust", "--package", "foo"].map(String::from);
let forwarded = Args::without_cargo_subcommand(raw);
assert_eq!(forwarded, vec!["cargo-twin4rust", "--package", "foo"]);
}
#[test]
fn without_cargo_subcommand_handles_being_given_nothing() {
let raw: [String; 0] = [];
let forwarded = Args::without_cargo_subcommand(raw);
assert!(forwarded.is_empty());
}
#[test]
fn without_cargo_subcommand_keeps_a_package_that_happens_to_be_named_twin4rust() {
let raw = ["cargo-twin4rust", "--package", "twin4rust"].map(String::from);
let args = Args::parse_from(Args::without_cargo_subcommand(raw));
assert_eq!(args.packages, vec!["twin4rust"]);
}
#[test]
fn without_cargo_subcommand_leaves_a_direct_invocation_untouched() {
let raw = ["cargo-twin4rust", "--package", "foo"].map(String::from);
let forwarded = Args::without_cargo_subcommand(raw);
assert_eq!(forwarded, vec!["cargo-twin4rust", "--package", "foo"]);
}