• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 Guillaume Pinot (@TeXitoi) <texitoi@texitoi.eu>,
2 // Kevin Knapp (@kbknapp) <kbknapp@gmail.com>, and
3 // Ana Hobden (@hoverbear) <operator@hoverbear.org>
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10 //
11 // This work was derived from Structopt (https://github.com/TeXitoi/structopt)
12 // commit#ea76fa1b1b273e65e3b0b1046643715b49bec51f which is licensed under the
13 // MIT/Apache 2.0 license.
14 
15 use clap::Parser;
16 
17 #[test]
basic()18 fn basic() {
19     #[derive(Parser, PartialEq, Debug)]
20     struct Opt {
21         #[arg(short = 'a', long = "arg")]
22         arg: i32,
23     }
24     assert_eq!(
25         Opt { arg: 24 },
26         Opt::try_parse_from(["test", "-a24"]).unwrap()
27     );
28 }
29 
30 #[test]
update_basic()31 fn update_basic() {
32     #[derive(Parser, PartialEq, Debug)]
33     struct Opt {
34         #[arg(short, long)]
35         first: i32,
36         #[arg(short, long)]
37         second: i32,
38     }
39 
40     let mut opt = Opt::try_parse_from(["test", "-f0", "-s1"]).unwrap();
41 
42     opt.try_update_from(["test", "-f42"]).unwrap();
43 
44     assert_eq!(
45         Opt {
46             first: 42,
47             second: 1
48         },
49         opt
50     );
51 }
52 
53 #[test]
update_explicit_required()54 fn update_explicit_required() {
55     #[derive(Parser, PartialEq, Debug)]
56     struct Opt {
57         #[arg(short, long, required = true)]
58         first: i32,
59         #[arg(short, long, required = true)]
60         second: i32,
61     }
62 
63     let mut opt = Opt::try_parse_from(["test", "-f0", "-s1"]).unwrap();
64 
65     opt.try_update_from(["test", "-f42"]).unwrap();
66 
67     assert_eq!(
68         Opt {
69             first: 42,
70             second: 1
71         },
72         opt
73     );
74 }
75 
76 #[test]
unit_struct()77 fn unit_struct() {
78     #[derive(Parser, PartialEq, Debug)]
79     struct Opt;
80 
81     assert_eq!(Opt {}, Opt::try_parse_from(["test"]).unwrap());
82 }
83