1#![cfg(feature = "cargo")] 2 3use clap::{ 4 crate_authors, crate_description, crate_name, crate_version, error::ErrorKind, Command, 5}; 6 7use crate::utils; 8 9static DESCRIPTION_ONLY: &str = "prog 1 10A simple to use, efficient, and full-featured Command Line Argument Parser 11 12Usage: prog 13 14Options: 15 -h, --help Print help 16 -V, --version Print version 17"; 18 19static AUTHORS_ONLY: &str = "prog 1 20 21 22Usage: prog 23 24Options: 25 -h, --help Print help 26 -V, --version Print version 27"; 28 29#[test] 30fn crate_version() { 31 let res = Command::new("prog") 32 .version(crate_version!()) 33 .help_template(utils::FULL_TEMPLATE) 34 .try_get_matches_from(vec!["prog", "--version"]); 35 36 assert!(res.is_err()); 37 let err = res.unwrap_err(); 38 assert_eq!(err.kind(), ErrorKind::DisplayVersion); 39 assert_eq!( 40 err.to_string(), 41 format!("prog {}\n", env!("CARGO_PKG_VERSION")) 42 ); 43} 44 45#[test] 46fn crate_description() { 47 let res = Command::new("prog") 48 .version("1") 49 .about(crate_description!()) 50 .help_template(utils::FULL_TEMPLATE) 51 .try_get_matches_from(vec!["prog", "--help"]); 52 53 assert!(res.is_err()); 54 let err = res.unwrap_err(); 55 assert_eq!(err.kind(), ErrorKind::DisplayHelp); 56 assert_eq!(err.to_string(), DESCRIPTION_ONLY); 57} 58 59#[test] 60fn crate_authors() { 61 let res = Command::new("prog") 62 .version("1") 63 .author(crate_authors!()) 64 .help_template(utils::FULL_TEMPLATE) 65 .try_get_matches_from(vec!["prog", "--help"]); 66 67 assert!(res.is_err()); 68 let err = res.unwrap_err(); 69 assert_eq!(err.kind(), ErrorKind::DisplayHelp); 70 assert_eq!(err.to_string(), AUTHORS_ONLY); 71} 72 73#[test] 74fn crate_authors_with_sep() { 75 let res = Command::new("prog") 76 .version("1") 77 .author(crate_authors!(", ")) 78 .help_template(utils::FULL_TEMPLATE) 79 .try_get_matches_from(vec!["prog", "--help"]); 80 81 assert!(res.is_err()); 82 let err = res.unwrap_err(); 83 assert_eq!(err.kind(), ErrorKind::DisplayHelp); 84 assert_eq!(err.to_string(), AUTHORS_ONLY); 85} 86 87#[test] 88fn crate_name() { 89 let res = Command::new(crate_name!()) 90 .help_template(utils::FULL_TEMPLATE) 91 .version("3.0") 92 .try_get_matches_from(vec!["clap", "--version"]); 93 94 assert!(res.is_err()); 95 let err = res.unwrap_err(); 96 assert_eq!(err.kind(), ErrorKind::DisplayVersion); 97 assert_eq!(err.to_string(), "clap 3.0\n"); 98} 99