blob: 0da349b324a177f57fc533f7ad635aa090378777 [file] [log] [blame]
use structopt::StructOpt;
#[test]
fn generic_struct_flatten() {
#[derive(StructOpt, PartialEq, Debug)]
struct Inner {
pub answer: isize,
}
#[derive(StructOpt, PartialEq, Debug)]
struct Outer<T: StructOpt> {
#[structopt(flatten)]
pub inner: T,
}
assert_eq!(
Outer {
inner: Inner { answer: 42 }
},
Outer::from_iter(&["--answer", "42"])
)
}
#[test]
fn generic_struct_flatten_w_where_clause() {
#[derive(StructOpt, PartialEq, Debug)]
struct Inner {
pub answer: isize,
}
#[derive(StructOpt, PartialEq, Debug)]
struct Outer<T>
where
T: StructOpt,
{
#[structopt(flatten)]
pub inner: T,
}
assert_eq!(
Outer {
inner: Inner { answer: 42 }
},
Outer::from_iter(&["--answer", "42"])
)
}
#[test]
fn generic_enum() {
#[derive(StructOpt, PartialEq, Debug)]
struct Inner {
pub answer: isize,
}
#[derive(StructOpt, PartialEq, Debug)]
enum GenericEnum<T: StructOpt> {
Start(T),
Stop,
}
assert_eq!(
GenericEnum::Start(Inner { answer: 42 }),
GenericEnum::from_iter(&["test", "start", "42"])
)
}
#[test]
fn generic_enum_w_where_clause() {
#[derive(StructOpt, PartialEq, Debug)]
struct Inner {
pub answer: isize,
}
#[derive(StructOpt, PartialEq, Debug)]
enum GenericEnum<T>
where
T: StructOpt,
{
Start(T),
Stop,
}
assert_eq!(
GenericEnum::Start(Inner { answer: 42 }),
GenericEnum::from_iter(&["test", "start", "42"])
)
}
#[test]
fn generic_w_fromstr_trait_bound() {
use std::{fmt, str::FromStr};
#[derive(StructOpt, PartialEq, Debug)]
struct Opt<T>
where
T: FromStr,
<T as FromStr>::Err: fmt::Debug + fmt::Display,
{
answer: T,
}
assert_eq!(
Opt::<isize> { answer: 42 },
Opt::<isize>::from_iter(&["--answer", "42"])
)
}
#[test]
fn generic_wo_trait_bound() {
use std::time::Duration;
#[derive(StructOpt, PartialEq, Debug)]
struct Opt<T> {
answer: isize,
#[structopt(skip)]
took: Option<T>,
}
assert_eq!(
Opt::<Duration> {
answer: 42,
took: None
},
Opt::<Duration>::from_iter(&["--answer", "42"])
)
}
#[test]
fn generic_where_clause_w_trailing_comma() {
use std::{fmt, str::FromStr};
#[derive(StructOpt, PartialEq, Debug)]
struct Opt<T>
where
T: FromStr,
<T as FromStr>::Err: fmt::Debug + fmt::Display,
{
pub answer: T,
}
assert_eq!(
Opt::<isize> { answer: 42 },
Opt::<isize>::from_iter(&["--answer", "42"])
)
}