1 // Copyright 2018 Guillaume Pinot (@TeXitoi) <texitoi@texitoi.eu>
2 //
3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6 // option. This file may not be copied, modified, or distributed
7 // except according to those terms.
8
9 use clap::Parser;
10
11 #[test]
skip_1()12 fn skip_1() {
13 #[derive(Parser, Debug, PartialEq)]
14 struct Opt {
15 #[arg(short)]
16 x: u32,
17 #[arg(skip)]
18 s: u32,
19 }
20
21 assert!(Opt::try_parse_from(["test", "-x", "10", "20"]).is_err());
22
23 let mut opt = Opt::try_parse_from(["test", "-x", "10"]).unwrap();
24 assert_eq!(
25 opt,
26 Opt {
27 x: 10,
28 s: 0, // default
29 }
30 );
31 opt.s = 42;
32
33 opt.try_update_from(["test", "-x", "22"]).unwrap();
34
35 assert_eq!(opt, Opt { x: 22, s: 42 });
36 }
37
38 #[test]
skip_2()39 fn skip_2() {
40 #[derive(Parser, Debug, PartialEq)]
41 struct Opt {
42 #[arg(short)]
43 x: u32,
44 #[arg(skip)]
45 ss: String,
46 #[arg(skip)]
47 sn: u8,
48
49 y: u32,
50 #[arg(skip)]
51 sz: u16,
52
53 t: u32,
54 }
55
56 assert_eq!(
57 Opt::try_parse_from(["test", "-x", "10", "20", "30"]).unwrap(),
58 Opt {
59 x: 10,
60 ss: String::from(""),
61 sn: 0,
62 y: 20,
63 sz: 0,
64 t: 30,
65 }
66 );
67 }
68
69 #[test]
skip_enum()70 fn skip_enum() {
71 #[derive(Debug, PartialEq)]
72 #[allow(unused)]
73 enum Kind {
74 A,
75 B,
76 }
77
78 impl Default for Kind {
79 fn default() -> Self {
80 Kind::B
81 }
82 }
83
84 #[derive(Parser, Debug, PartialEq)]
85 pub struct Opt {
86 #[arg(long, short)]
87 number: u32,
88 #[arg(skip)]
89 k: Kind,
90 #[arg(skip)]
91 v: Vec<u32>,
92 }
93
94 assert_eq!(
95 Opt::try_parse_from(["test", "-n", "10"]).unwrap(),
96 Opt {
97 number: 10,
98 k: Kind::B,
99 v: vec![],
100 }
101 );
102 }
103
104 #[test]
skip_help_doc_comments()105 fn skip_help_doc_comments() {
106 #[derive(Parser, Debug, PartialEq, Eq)]
107 pub struct Opt {
108 #[arg(skip, help = "internal_stuff")]
109 a: u32,
110
111 #[arg(skip, long_help = "internal_stuff\ndo not touch")]
112 b: u32,
113
114 /// Not meant to be used by clap.
115 ///
116 /// I want a default here.
117 #[arg(skip)]
118 c: u32,
119
120 #[arg(short)]
121 n: u32,
122 }
123
124 assert_eq!(
125 Opt::try_parse_from(["test", "-n", "10"]).unwrap(),
126 Opt {
127 n: 10,
128 a: 0,
129 b: 0,
130 c: 0,
131 }
132 );
133 }
134
135 #[test]
skip_val()136 fn skip_val() {
137 #[derive(Parser, Debug, PartialEq, Eq)]
138 pub struct Opt {
139 #[arg(long, short)]
140 number: u32,
141
142 #[arg(skip = "key")]
143 k: String,
144
145 #[arg(skip = vec![1, 2, 3])]
146 v: Vec<u32>,
147 }
148
149 assert_eq!(
150 Opt::try_parse_from(["test", "-n", "10"]).unwrap(),
151 Opt {
152 number: 10,
153 k: "key".to_string(),
154 v: vec![1, 2, 3]
155 }
156 );
157 }
158