1 #![cfg(feature = "cargo")]
2
3 use clap::{
4 crate_authors, crate_description, crate_name, crate_version, error::ErrorKind, Command,
5 };
6
7 use crate::utils;
8
9 static DESCRIPTION_ONLY: &str = "prog 1
10 A simple to use, efficient, and full-featured Command Line Argument Parser
11
12 Usage: prog
13
14 Options:
15 -h, --help Print help
16 -V, --version Print version
17 ";
18
19 static AUTHORS_ONLY: &str = "prog 1
20
21
22 Usage: prog
23
24 Options:
25 -h, --help Print help
26 -V, --version Print version
27 ";
28
29 #[test]
crate_version()30 fn 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]
crate_description()46 fn 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]
crate_authors()60 fn 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]
crate_authors_with_sep()74 fn 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]
crate_name()88 fn 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