1 #![cfg(feature = "unstable-v5")]
2 use clap::Parser;
3
4 #[test]
test_vec_of_vec()5 fn test_vec_of_vec() {
6 #[derive(Parser, Debug, PartialEq)]
7 struct Opt {
8 #[arg(short = 'p', num_args = 2)]
9 points: Vec<Vec<i32>>,
10 }
11
12 assert_eq!(
13 Opt {
14 points: vec![vec![1, 2], vec![0, 0]]
15 },
16 Opt::try_parse_from(&["test", "-p", "1", "2", "-p", "0", "0"]).unwrap()
17 );
18 }
19
20 #[test]
test_vec_of_vec_opt_out()21 fn test_vec_of_vec_opt_out() {
22 fn parser(s: &str) -> Result<Vec<String>, std::convert::Infallible> {
23 Ok(s.split(',').map(str::to_owned).collect())
24 }
25
26 #[derive(Parser, PartialEq, Debug)]
27 struct Opt {
28 #[arg(value_parser = parser, short = 'p')]
29 arg: Vec<::std::vec::Vec<String>>,
30 }
31
32 assert_eq!(
33 Opt {
34 arg: vec![vec!["1".into(), "2".into()], vec!["a".into(), "b".into()]],
35 },
36 Opt::try_parse_from(["test", "-p", "1,2", "-p", "a,b"]).unwrap(),
37 );
38 }
39
40 #[test]
test_vec_vec_empty()41 fn test_vec_vec_empty() {
42 #[derive(Parser, Debug, PartialEq)]
43 struct Opt {
44 #[arg(short = 'p', num_args = 2)]
45 points: Vec<Vec<i32>>,
46 }
47
48 assert_eq!(
49 Opt { points: vec![] },
50 Opt::try_parse_from(&["test"]).unwrap()
51 );
52 }
53
54 #[test]
test_option_vec_vec()55 fn test_option_vec_vec() {
56 #[derive(Parser, Debug, PartialEq)]
57 struct Opt {
58 #[arg(short = 'p', num_args = 2)]
59 points: Option<Vec<Vec<i32>>>,
60 }
61
62 assert_eq!(
63 Opt {
64 points: Some(vec![vec![1, 2], vec![3, 4]])
65 },
66 Opt::try_parse_from(&["test", "-p", "1", "2", "-p", "3", "4"]).unwrap()
67 );
68 }
69
70 #[test]
test_option_vec_vec_empty()71 fn test_option_vec_vec_empty() {
72 #[derive(Parser, Debug, PartialEq)]
73 struct Opt {
74 #[arg(short = 'p', num_args = 2)]
75 points: Option<Vec<Vec<i32>>>,
76 }
77
78 assert_eq!(
79 Opt { points: None },
80 Opt::try_parse_from(&["test"]).unwrap()
81 );
82 }
83