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