• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #![cfg(feature = "unstable-dynamic")]
2 
3 #[test]
suggest_subcommand_subset()4 fn suggest_subcommand_subset() {
5     let name = "test";
6     let mut cmd = clap::Command::new(name)
7         .subcommand(clap::Command::new("hello-world"))
8         .subcommand(clap::Command::new("hello-moon"))
9         .subcommand(clap::Command::new("goodbye-world"));
10 
11     let args = [name, "he"];
12     let arg_index = 1;
13     let args = IntoIterator::into_iter(args)
14         .map(std::ffi::OsString::from)
15         .collect::<Vec<_>>();
16     let comp_type = clap_complete::dynamic::bash::CompType::default();
17     let trailing_space = true;
18     let current_dir = None;
19 
20     let completions = clap_complete::dynamic::bash::complete(
21         &mut cmd,
22         args,
23         arg_index,
24         comp_type,
25         trailing_space,
26         current_dir,
27     )
28     .unwrap();
29     let completions = completions
30         .into_iter()
31         .map(|s| s.to_string_lossy().into_owned())
32         .collect::<Vec<_>>();
33 
34     assert_eq!(completions, ["hello-moon", "hello-world", "help"]);
35 }
36 
37 #[test]
suggest_long_flag_subset()38 fn suggest_long_flag_subset() {
39     let name = "test";
40     let mut cmd = clap::Command::new(name)
41         .arg(
42             clap::Arg::new("hello-world")
43                 .long("hello-world")
44                 .action(clap::ArgAction::Count),
45         )
46         .arg(
47             clap::Arg::new("hello-moon")
48                 .long("hello-moon")
49                 .action(clap::ArgAction::Count),
50         )
51         .arg(
52             clap::Arg::new("goodbye-world")
53                 .long("goodbye-world")
54                 .action(clap::ArgAction::Count),
55         );
56 
57     let args = [name, "--he"];
58     let arg_index = 1;
59     let args = IntoIterator::into_iter(args)
60         .map(std::ffi::OsString::from)
61         .collect::<Vec<_>>();
62     let comp_type = clap_complete::dynamic::bash::CompType::default();
63     let trailing_space = true;
64     let current_dir = None;
65 
66     let completions = clap_complete::dynamic::bash::complete(
67         &mut cmd,
68         args,
69         arg_index,
70         comp_type,
71         trailing_space,
72         current_dir,
73     )
74     .unwrap();
75     let completions = completions
76         .into_iter()
77         .map(|s| s.to_string_lossy().into_owned())
78         .collect::<Vec<_>>();
79 
80     assert_eq!(completions, ["--hello-world", "--hello-moon", "--help"]);
81 }
82 
83 #[test]
suggest_possible_value_subset()84 fn suggest_possible_value_subset() {
85     let name = "test";
86     let mut cmd = clap::Command::new(name).arg(clap::Arg::new("hello-world").value_parser([
87         "hello-world",
88         "hello-moon",
89         "goodbye-world",
90     ]));
91 
92     let args = [name, "hello"];
93     let arg_index = 1;
94     let args = IntoIterator::into_iter(args)
95         .map(std::ffi::OsString::from)
96         .collect::<Vec<_>>();
97     let comp_type = clap_complete::dynamic::bash::CompType::default();
98     let trailing_space = true;
99     let current_dir = None;
100 
101     let completions = clap_complete::dynamic::bash::complete(
102         &mut cmd,
103         args,
104         arg_index,
105         comp_type,
106         trailing_space,
107         current_dir,
108     )
109     .unwrap();
110     let completions = completions
111         .into_iter()
112         .map(|s| s.to_string_lossy().into_owned())
113         .collect::<Vec<_>>();
114 
115     assert_eq!(completions, ["hello-world", "hello-moon"]);
116 }
117 
118 #[test]
suggest_additional_short_flags()119 fn suggest_additional_short_flags() {
120     let name = "test";
121     let mut cmd = clap::Command::new(name)
122         .arg(
123             clap::Arg::new("a")
124                 .short('a')
125                 .action(clap::ArgAction::Count),
126         )
127         .arg(
128             clap::Arg::new("b")
129                 .short('b')
130                 .action(clap::ArgAction::Count),
131         )
132         .arg(
133             clap::Arg::new("c")
134                 .short('c')
135                 .action(clap::ArgAction::Count),
136         );
137 
138     let args = [name, "-a"];
139     let arg_index = 1;
140     let args = IntoIterator::into_iter(args)
141         .map(std::ffi::OsString::from)
142         .collect::<Vec<_>>();
143     let comp_type = clap_complete::dynamic::bash::CompType::default();
144     let trailing_space = true;
145     let current_dir = None;
146 
147     let completions = clap_complete::dynamic::bash::complete(
148         &mut cmd,
149         args,
150         arg_index,
151         comp_type,
152         trailing_space,
153         current_dir,
154     )
155     .unwrap();
156     let completions = completions
157         .into_iter()
158         .map(|s| s.to_string_lossy().into_owned())
159         .collect::<Vec<_>>();
160 
161     assert_eq!(completions, ["-aa", "-ab", "-ac", "-ah"]);
162 }
163