use clap::Parser;
use clap_fmt::FmtArgs;
use serde::Serialize;
#[derive(Parser, Debug, Serialize)]
struct CliWithCounts {
#[arg(short = 'v', long, action = clap::ArgAction::Count)]
verbose: u8,
#[arg(short = 'q', action = clap::ArgAction::Count)]
quiet: u8,
#[arg(long = "force", action = clap::ArgAction::Count)]
force_level: u8,
}
#[test]
fn test_count_single() {
let cli = CliWithCounts {
verbose: 1,
quiet: 0,
force_level: 0,
};
assert_eq!(cli.to_args(), vec!["-v"]);
}
#[test]
fn test_count_double() {
let cli = CliWithCounts {
verbose: 2,
quiet: 0,
force_level: 0,
};
assert_eq!(cli.to_args(), vec!["-vv"]);
}
#[test]
fn test_count_triple() {
let cli = CliWithCounts {
verbose: 3,
quiet: 0,
force_level: 0,
};
assert_eq!(cli.to_args(), vec!["-vvv"]);
}
#[test]
fn test_count_many() {
let cli = CliWithCounts {
verbose: 5,
quiet: 0,
force_level: 0,
};
let result = cli.to_args();
assert_eq!(result, vec!["-v", "-v", "-v", "-v", "-v"]);
}
#[test]
fn test_count_long_only() {
let cli = CliWithCounts {
verbose: 0,
quiet: 0,
force_level: 2,
};
let result = cli.to_args();
assert_eq!(result, vec!["--force", "--force"]);
}
#[test]
fn test_count_short_only() {
let cli = CliWithCounts {
verbose: 0,
quiet: 4,
force_level: 0,
};
let result = cli.to_args();
assert_eq!(result, vec!["-q", "-q", "-q", "-q"]);
}
#[test]
fn test_count_mixed() {
let cli = CliWithCounts {
verbose: 2,
quiet: 1,
force_level: 3,
};
let result = cli.to_args();
assert_eq!(result, vec!["-vv", "-q", "--force", "--force", "--force"]);
}