use std::path::PathBuf;
use clap::Parser;
use clap_verbosity_flag::Verbosity;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub(crate) struct Args {
#[arg(short, long, default_value = "PaperAge")]
pub title: String,
#[arg(short, long, default_value = "out.pdf")]
pub output: PathBuf,
#[arg(short, long, default_value_t = false)]
pub force: bool,
#[arg(short, long, default_value_t = false)]
pub grid: bool,
#[arg(long, default_value_t = false, exclusive = true)]
pub fonts_license: bool,
#[clap(flatten)]
pub verbose: Verbosity,
pub input: Option<PathBuf>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn verify_args() {
use clap::CommandFactory;
super::Args::command().debug_assert()
}
#[test]
fn test_args() {
let args = Args::parse_from([
"paper-age",
"-f",
"-g",
"--title",
"Hello",
"--output",
"test.pdf",
"input.txt",
]);
assert!(args.force);
assert!(args.grid);
assert_eq!(args.title, "Hello");
assert_eq!(args.output.to_str().unwrap(), "test.pdf");
assert_eq!(args.input.unwrap().to_str().unwrap(), "input.txt");
}
#[test]
fn test_defaults() {
let args = Args::parse_from(["paper-age"]);
assert_eq!(args.title, "PaperAge");
assert_eq!(args.output.to_str().unwrap(), "out.pdf");
assert_eq!(args.input, None);
assert!(!args.force);
}
#[test]
fn test_fonts_license() {
let args = Args::parse_from(["paper-age", "--fonts-license"]);
assert!(args.fonts_license);
}
#[test]
fn test_fonts_license_conflict() -> Result<(), Box<dyn std::error::Error>> {
let result = Args::try_parse_from(["paper-age", "--fonts-license", "--grid"]);
assert!(result.is_err());
Ok(())
}
}