119625d8cSopenharmony_ci#![cfg(feature = "cargo")]
219625d8cSopenharmony_ci
319625d8cSopenharmony_ciuse clap::{
419625d8cSopenharmony_ci    crate_authors, crate_description, crate_name, crate_version, error::ErrorKind, Command,
519625d8cSopenharmony_ci};
619625d8cSopenharmony_ci
719625d8cSopenharmony_ciuse crate::utils;
819625d8cSopenharmony_ci
919625d8cSopenharmony_cistatic DESCRIPTION_ONLY: &str = "prog 1
1019625d8cSopenharmony_ciA simple to use, efficient, and full-featured Command Line Argument Parser
1119625d8cSopenharmony_ci
1219625d8cSopenharmony_ciUsage: prog
1319625d8cSopenharmony_ci
1419625d8cSopenharmony_ciOptions:
1519625d8cSopenharmony_ci  -h, --help     Print help
1619625d8cSopenharmony_ci  -V, --version  Print version
1719625d8cSopenharmony_ci";
1819625d8cSopenharmony_ci
1919625d8cSopenharmony_cistatic AUTHORS_ONLY: &str = "prog 1
2019625d8cSopenharmony_ci
2119625d8cSopenharmony_ci
2219625d8cSopenharmony_ciUsage: prog
2319625d8cSopenharmony_ci
2419625d8cSopenharmony_ciOptions:
2519625d8cSopenharmony_ci  -h, --help     Print help
2619625d8cSopenharmony_ci  -V, --version  Print version
2719625d8cSopenharmony_ci";
2819625d8cSopenharmony_ci
2919625d8cSopenharmony_ci#[test]
3019625d8cSopenharmony_cifn crate_version() {
3119625d8cSopenharmony_ci    let res = Command::new("prog")
3219625d8cSopenharmony_ci        .version(crate_version!())
3319625d8cSopenharmony_ci        .help_template(utils::FULL_TEMPLATE)
3419625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--version"]);
3519625d8cSopenharmony_ci
3619625d8cSopenharmony_ci    assert!(res.is_err());
3719625d8cSopenharmony_ci    let err = res.unwrap_err();
3819625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::DisplayVersion);
3919625d8cSopenharmony_ci    assert_eq!(
4019625d8cSopenharmony_ci        err.to_string(),
4119625d8cSopenharmony_ci        format!("prog {}\n", env!("CARGO_PKG_VERSION"))
4219625d8cSopenharmony_ci    );
4319625d8cSopenharmony_ci}
4419625d8cSopenharmony_ci
4519625d8cSopenharmony_ci#[test]
4619625d8cSopenharmony_cifn crate_description() {
4719625d8cSopenharmony_ci    let res = Command::new("prog")
4819625d8cSopenharmony_ci        .version("1")
4919625d8cSopenharmony_ci        .about(crate_description!())
5019625d8cSopenharmony_ci        .help_template(utils::FULL_TEMPLATE)
5119625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--help"]);
5219625d8cSopenharmony_ci
5319625d8cSopenharmony_ci    assert!(res.is_err());
5419625d8cSopenharmony_ci    let err = res.unwrap_err();
5519625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::DisplayHelp);
5619625d8cSopenharmony_ci    assert_eq!(err.to_string(), DESCRIPTION_ONLY);
5719625d8cSopenharmony_ci}
5819625d8cSopenharmony_ci
5919625d8cSopenharmony_ci#[test]
6019625d8cSopenharmony_cifn crate_authors() {
6119625d8cSopenharmony_ci    let res = Command::new("prog")
6219625d8cSopenharmony_ci        .version("1")
6319625d8cSopenharmony_ci        .author(crate_authors!())
6419625d8cSopenharmony_ci        .help_template(utils::FULL_TEMPLATE)
6519625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--help"]);
6619625d8cSopenharmony_ci
6719625d8cSopenharmony_ci    assert!(res.is_err());
6819625d8cSopenharmony_ci    let err = res.unwrap_err();
6919625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::DisplayHelp);
7019625d8cSopenharmony_ci    assert_eq!(err.to_string(), AUTHORS_ONLY);
7119625d8cSopenharmony_ci}
7219625d8cSopenharmony_ci
7319625d8cSopenharmony_ci#[test]
7419625d8cSopenharmony_cifn crate_authors_with_sep() {
7519625d8cSopenharmony_ci    let res = Command::new("prog")
7619625d8cSopenharmony_ci        .version("1")
7719625d8cSopenharmony_ci        .author(crate_authors!(", "))
7819625d8cSopenharmony_ci        .help_template(utils::FULL_TEMPLATE)
7919625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--help"]);
8019625d8cSopenharmony_ci
8119625d8cSopenharmony_ci    assert!(res.is_err());
8219625d8cSopenharmony_ci    let err = res.unwrap_err();
8319625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::DisplayHelp);
8419625d8cSopenharmony_ci    assert_eq!(err.to_string(), AUTHORS_ONLY);
8519625d8cSopenharmony_ci}
8619625d8cSopenharmony_ci
8719625d8cSopenharmony_ci#[test]
8819625d8cSopenharmony_cifn crate_name() {
8919625d8cSopenharmony_ci    let res = Command::new(crate_name!())
9019625d8cSopenharmony_ci        .help_template(utils::FULL_TEMPLATE)
9119625d8cSopenharmony_ci        .version("3.0")
9219625d8cSopenharmony_ci        .try_get_matches_from(vec!["clap", "--version"]);
9319625d8cSopenharmony_ci
9419625d8cSopenharmony_ci    assert!(res.is_err());
9519625d8cSopenharmony_ci    let err = res.unwrap_err();
9619625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::DisplayVersion);
9719625d8cSopenharmony_ci    assert_eq!(err.to_string(), "clap 3.0\n");
9819625d8cSopenharmony_ci}
99