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