use clap::Parser;
use stern4rust::settings::args::Args;
fn argv(parts: &[&str]) -> Vec<String> {
parts.iter().map(|part| (*part).to_string()).collect()
}
#[test]
fn parse_from_collects_every_package_flag() {
let args = Args::parse_from(argv(&[
"cargo-stern4rust",
"--package",
"alpha",
"--package",
"beta",
]));
assert_eq!(args.packages, vec!["alpha".to_string(), "beta".to_string()]);
}
#[test]
fn parse_from_defaults_to_no_packages_and_no_manifest_path() {
let args = Args::parse_from(argv(&["cargo-stern4rust"]));
assert!(args.packages.is_empty());
assert!(args.manifest_path.is_none());
}
#[test]
fn parse_from_reads_the_manifest_path() {
let args = Args::parse_from(argv(&[
"cargo-stern4rust",
"--manifest-path",
"/tmp/Cargo.toml",
]));
assert_eq!(
args.manifest_path.as_deref(),
Some(std::path::Path::new("/tmp/Cargo.toml"))
);
}
#[test]
fn without_cargo_subcommand_drops_the_name_cargo_inserts() {
let args = argv(&["cargo-stern4rust", "stern4rust", "--package", "alpha"]);
let forwarded = Args::without_cargo_subcommand(args);
assert_eq!(forwarded, argv(&["cargo-stern4rust", "--package", "alpha"]));
}
#[test]
fn without_cargo_subcommand_handles_a_bare_binary_name() {
let args = argv(&["cargo-stern4rust"]);
let forwarded = Args::without_cargo_subcommand(args.clone());
assert_eq!(forwarded, args);
}
#[test]
fn without_cargo_subcommand_handles_being_given_nothing() {
let forwarded = Args::without_cargo_subcommand(Vec::new());
assert!(forwarded.is_empty());
}
#[test]
fn without_cargo_subcommand_keeps_a_package_that_happens_to_be_named_stern4rust() {
let args = argv(&["cargo-stern4rust", "--package", "stern4rust"]);
let forwarded = Args::without_cargo_subcommand(args.clone());
assert_eq!(forwarded, args);
}
#[test]
fn without_cargo_subcommand_leaves_a_direct_invocation_untouched() {
let args = argv(&["cargo-stern4rust", "--package", "alpha"]);
let forwarded = Args::without_cargo_subcommand(args.clone());
assert_eq!(forwarded, args);
}
#[test]
fn without_cargo_subcommand_strips_only_the_first_occurrence() {
let args = argv(&["cargo-stern4rust", "stern4rust", "--package", "stern4rust"]);
let forwarded = Args::without_cargo_subcommand(args);
assert_eq!(
forwarded,
argv(&["cargo-stern4rust", "--package", "stern4rust"])
);
}