1 //! Checks that types like `::std::option::Option` are not special
2
3 use structopt::StructOpt;
4
5 #[rustversion::since(1.37)]
6 #[test]
special_types_bool()7 fn special_types_bool() {
8 mod inner {
9 #[allow(non_camel_case_types)]
10 #[derive(PartialEq, Debug)]
11 pub struct bool(pub String);
12
13 impl std::str::FromStr for self::bool {
14 type Err = String;
15
16 fn from_str(s: &str) -> Result<Self, Self::Err> {
17 Ok(self::bool(s.into()))
18 }
19 }
20 };
21
22 #[derive(StructOpt, PartialEq, Debug)]
23 struct Opt {
24 arg: inner::bool,
25 }
26
27 assert_eq!(
28 Opt {
29 arg: inner::bool("success".into())
30 },
31 Opt::from_iter(&["test", "success"])
32 );
33 }
34
35 #[test]
special_types_option()36 fn special_types_option() {
37 fn parser(s: &str) -> Option<String> {
38 Some(s.to_string())
39 }
40
41 #[derive(StructOpt, PartialEq, Debug)]
42 struct Opt {
43 #[structopt(parse(from_str = parser))]
44 arg: ::std::option::Option<String>,
45 }
46
47 assert_eq!(
48 Opt {
49 arg: Some("success".into())
50 },
51 Opt::from_iter(&["test", "success"])
52 );
53 }
54
55 #[test]
special_types_vec()56 fn special_types_vec() {
57 fn parser(s: &str) -> Vec<String> {
58 vec![s.to_string()]
59 }
60
61 #[derive(StructOpt, PartialEq, Debug)]
62 struct Opt {
63 #[structopt(parse(from_str = parser))]
64 arg: ::std::vec::Vec<String>,
65 }
66
67 assert_eq!(
68 Opt {
69 arg: vec!["success".into()]
70 },
71 Opt::from_iter(&["test", "success"])
72 );
73 }
74