blob: 3f9e1af72219752639e1042bb43df27913f0d9fd [file] [log] [blame]
// https://github.com/TeXitoi/structopt/issues/{NUMBER}
mod utils;
use utils::*;
use structopt::StructOpt;
#[test]
fn issue_151() {
use structopt::{clap::ArgGroup, StructOpt};
#[derive(StructOpt, Debug)]
#[structopt(group = ArgGroup::with_name("verb").required(true).multiple(true))]
struct Opt {
#[structopt(long, group = "verb")]
foo: bool,
#[structopt(long, group = "verb")]
bar: bool,
}
#[derive(Debug, StructOpt)]
struct Cli {
#[structopt(flatten)]
a: Opt,
}
assert!(Cli::clap().get_matches_from_safe(&["test"]).is_err());
assert!(Cli::clap()
.get_matches_from_safe(&["test", "--foo"])
.is_ok());
assert!(Cli::clap()
.get_matches_from_safe(&["test", "--bar"])
.is_ok());
assert!(Cli::clap()
.get_matches_from_safe(&["test", "--zebra"])
.is_err());
assert!(Cli::clap()
.get_matches_from_safe(&["test", "--foo", "--bar"])
.is_ok());
}
#[test]
fn issue_289() {
use structopt::{clap::AppSettings, StructOpt};
#[derive(StructOpt)]
#[structopt(setting = AppSettings::InferSubcommands)]
enum Args {
SomeCommand(SubSubCommand),
AnotherCommand,
}
#[derive(StructOpt)]
#[structopt(setting = AppSettings::InferSubcommands)]
enum SubSubCommand {
TestCommand,
}
assert!(Args::clap()
.get_matches_from_safe(&["test", "some-command", "test-command"])
.is_ok());
assert!(Args::clap()
.get_matches_from_safe(&["test", "some", "test-command"])
.is_ok());
assert!(Args::clap()
.get_matches_from_safe(&["test", "some-command", "test"])
.is_ok());
assert!(Args::clap()
.get_matches_from_safe(&["test", "some", "test"])
.is_ok());
}
#[test]
fn issue_324() {
fn my_version() -> &'static str {
"MY_VERSION"
}
#[derive(StructOpt)]
#[structopt(version = my_version())]
struct Opt {
#[structopt(subcommand)]
_cmd: Option<SubCommand>,
}
#[derive(StructOpt)]
enum SubCommand {
Start,
}
let help = get_long_help::<Opt>();
assert!(help.contains("MY_VERSION"));
}
#[test]
fn issue_359() {
#[derive(Debug, PartialEq, StructOpt)]
struct Opt {
#[structopt(subcommand)]
sub: Subcommands,
}
#[derive(Debug, PartialEq, StructOpt)]
enum Subcommands {
Add,
#[structopt(external_subcommand)]
Other(Vec<String>),
}
assert_eq!(
Opt {
sub: Subcommands::Other(vec!["only_one_arg".into()])
},
Opt::from_iter(&["test", "only_one_arg"])
);
}
#[test]
fn issue_418() {
use structopt::StructOpt;
#[derive(Debug, StructOpt)]
struct Opts {
#[structopt(subcommand)]
/// The command to run
command: Command,
}
#[derive(Debug, StructOpt)]
enum Command {
/// Reticulate the splines
#[structopt(visible_alias = "ret")]
Reticulate {
/// How many splines
num_splines: u8,
},
/// Frobnicate the rest
#[structopt(visible_alias = "frob")]
Frobnicate,
}
let help = get_long_help::<Opts>();
assert!(help.contains("Reticulate the splines [aliases: ret]"));
}
#[test]
fn issue_490() {
use std::iter::FromIterator;
use std::str::FromStr;
use structopt::StructOpt;
struct U16ish;
impl FromStr for U16ish {
type Err = ();
fn from_str(_: &str) -> Result<Self, Self::Err> {
unimplemented!()
}
}
impl<'a> FromIterator<&'a U16ish> for Vec<u16> {
fn from_iter<T: IntoIterator<Item = &'a U16ish>>(_: T) -> Self {
unimplemented!()
}
}
#[derive(StructOpt, Debug)]
struct Opt {
opt_vec: Vec<u16>,
#[structopt(long)]
opt_opt_vec: Option<Vec<u16>>,
}
// Assert that it compiles
}