• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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