dte test coverage


Directory: ./
File: test/cmdline.c
Date: 2025-05-08 15:05:54
Exec Total Coverage
Lines: 466 466 100.0%
Functions: 3 3 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 #include <stdlib.h>
2 #include "test.h"
3 #include "cmdline.h"
4 #include "commands.h"
5 #include "completion.h"
6 #include "editor.h"
7 #include "mode.h"
8
9 1 static void test_command_mode(TestContext *ctx)
10 {
11 1 EditorState *e = ctx->userdata;
12 1 CommandLine *c = &e->cmdline;
13 1 push_input_mode(e, e->command_mode);
14 1 EXPECT_PTREQ(e->mode, e->command_mode);
15
16 1 EXPECT_TRUE(handle_input(e, 'a'));
17 1 EXPECT_EQ(c->pos, 1);
18 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "a");
19
20 1 EXPECT_TRUE(handle_input(e, 0x1F999));
21 1 EXPECT_EQ(c->pos, 5);
22 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "a\xF0\x9F\xA6\x99");
23
24 1 CommandRunner runner = cmdrunner(e, &cmd_mode_commands);
25 1 EXPECT_PTREQ(runner.e, e);
26 1 EXPECT_PTREQ(runner.cmds, &cmd_mode_commands);
27 1 EXPECT_NULL(runner.lookup_alias);
28 1 EXPECT_EQ(runner.recursion_count, 0);
29 1 EXPECT_FALSE(runner.allow_recording);
30 1 EXPECT_TRUE(runner.expand_tilde_slash);
31
32 // Delete at end-of-line should do nothing
33 1 CommandRunner *r = &runner;
34 1 EXPECT_TRUE(handle_command(r, "delete"));
35 1 EXPECT_EQ(c->pos, 5);
36 1 EXPECT_EQ(c->buf.len, 5);
37
38 1 EXPECT_TRUE(handle_command(r, "erase"));
39 1 EXPECT_EQ(c->pos, 1);
40 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "a");
41
42 1 EXPECT_TRUE(handle_command(r, "erase"));
43 1 EXPECT_EQ(c->pos, 0);
44 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "");
45
46 1 cmdline_set_text(c, "word1 word2 word3 word4");
47 1 EXPECT_TRUE(handle_command(r, "eol"));
48 1 EXPECT_EQ(c->pos, 23);
49
50 1 EXPECT_TRUE(handle_command(r, "erase-word"));
51 1 EXPECT_EQ(c->pos, 18);
52 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "word1 word2 word3 ");
53
54 1 EXPECT_TRUE(handle_command(r, "erase-word"));
55 1 EXPECT_EQ(c->pos, 12);
56 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "word1 word2 ");
57
58 1 EXPECT_TRUE(handle_command(r, "word-bwd"));
59 1 EXPECT_EQ(c->pos, 6);
60
61 1 EXPECT_TRUE(handle_command(r, "word-fwd"));
62 1 EXPECT_EQ(c->pos, 12);
63
64 1 EXPECT_TRUE(handle_command(r, "bol"));
65 1 EXPECT_EQ(c->pos, 0);
66
67 1 EXPECT_TRUE(handle_command(r, "delete-word"));
68 1 EXPECT_EQ(c->pos, 0);
69 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "word2 ");
70
71 1 EXPECT_TRUE(handle_command(r, "right"));
72 1 EXPECT_EQ(c->pos, 1);
73
74 1 EXPECT_TRUE(handle_command(r, "erase-bol"));
75 1 EXPECT_EQ(c->pos, 0);
76 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "ord2 ");
77
78 1 EXPECT_TRUE(handle_command(r, "delete"));
79 1 EXPECT_EQ(c->pos, 0);
80 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "rd2 ");
81
82 1 EXPECT_TRUE(handle_command(r, "delete-eol"));
83 1 EXPECT_EQ(c->pos, 0);
84 1 EXPECT_EQ(c->buf.len, 0);
85
86 // Left at beginning-of-line should do nothing
87 1 EXPECT_TRUE(handle_command(r, "left"));
88 1 EXPECT_EQ(c->pos, 0);
89
90 1 cmdline_set_text(c, "...");
91 1 EXPECT_EQ(c->pos, 3);
92 1 EXPECT_EQ(c->buf.len, 3);
93
94 1 EXPECT_TRUE(handle_command(r, "bol"));
95 1 EXPECT_EQ(c->pos, 0);
96 1 EXPECT_EQ(c->buf.len, 3);
97
98 1 EXPECT_TRUE(handle_command(r, "right"));
99 1 EXPECT_EQ(c->pos, 1);
100
101 1 EXPECT_TRUE(handle_command(r, "word-bwd"));
102 1 EXPECT_EQ(c->pos, 0);
103
104 1 EXPECT_TRUE(handle_command(r, "eol"));
105 1 EXPECT_EQ(c->pos, 3);
106
107 1 EXPECT_TRUE(handle_command(r, "cancel"));
108 1 EXPECT_EQ(c->pos, 0);
109 1 EXPECT_NULL(c->search_pos);
110 1 EXPECT_EQ(c->buf.len, 0);
111 1 EXPECT_PTREQ(e->mode, e->normal_mode);
112
113 1 string_free(&c->buf);
114 1 EXPECT_NULL(c->buf.buffer);
115 1 EXPECT_EQ(c->buf.alloc, 0);
116 1 }
117
118 #define ENV_VAR_PREFIX "D__p_tYmz3_"
119 #define ENV_VAR_NAME ENV_VAR_PREFIX "_VAR"
120
121 1 static void test_complete_command(TestContext *ctx)
122 {
123 1 EditorState *e = ctx->userdata;
124 1 CommandLine *c = &e->cmdline;
125 1 complete_command_next(e);
126 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "alias");
127 1 maybe_reset_completion(c);
128
129 1 cmdline_set_text(c, "bind C-invalidkey");
130 1 complete_command_next(e);
131 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind C-invalidkey");
132 1 reset_completion(c);
133
134 1 cmdline_set_text(c, "bind -s C-M-S-l");
135 1 complete_command_next(e);
136 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -s C-M-S-l");
137 1 reset_completion(c);
138
139 1 cmdline_set_text(c, "bind -cs ");
140 1 complete_command_next(e);
141 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -cs ");
142 1 reset_completion(c);
143
144 1 cmdline_set_text(c, "bind -c -T search ");
145 1 complete_command_next(e);
146 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -c -T search ");
147 1 reset_completion(c);
148
149 1 cmdline_set_text(c, "bind -T ");
150 1 complete_command_next(e);
151 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -T command");
152 1 reset_completion(c);
153
154 1 cmdline_set_text(c, "bind -T se");
155 1 complete_command_next(e);
156 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -T search ");
157 1 reset_completion(c);
158
159 1 cmdline_set_text(c, "def-mode ");
160 1 complete_command_next(e);
161 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "def-mode ");
162 1 reset_completion(c);
163
164 1 cmdline_set_text(c, "def-mode xyz ");
165 1 complete_command_next(e);
166 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "def-mode xyz normal ");
167 1 complete_command_next(e);
168 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "def-mode xyz normal ");
169 1 reset_completion(c);
170
171 1 cmdline_set_text(c, "mode ");
172 1 complete_command_next(e);
173 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "mode command");
174 1 complete_command_next(e);
175 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "mode normal");
176 1 complete_command_next(e);
177 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "mode search");
178 1 complete_command_next(e);
179 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "mode command");
180 1 reset_completion(c);
181
182 1 cmdline_set_text(c, "wrap");
183 1 complete_command_next(e);
184 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wrap-paragraph ");
185 1 reset_completion(c);
186
187 1 cmdline_set_text(c, "open test/data/.e");
188 1 complete_command_next(e);
189 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "open test/data/.editorconfig ");
190 1 reset_completion(c);
191
192 1 cmdline_set_text(c, "open GNUma");
193 1 complete_command_next(e);
194 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "open GNUmakefile ");
195 1 reset_completion(c);
196
197 1 cmdline_set_text(c, "wsplit -bhr test/data/.e");
198 1 complete_command_next(e);
199 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wsplit -bhr test/data/.editorconfig ");
200 1 reset_completion(c);
201
202 1 cmdline_set_text(c, "toggle ");
203 1 complete_command_next(e);
204 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "toggle auto-indent");
205 1 reset_completion(c);
206
207 1 cmdline_set_text(c, "set expand-tab f");
208 1 complete_command_next(e);
209 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set expand-tab false ");
210 1 reset_completion(c);
211
212 1 cmdline_set_text(c, "set case-sensitive-search a");
213 1 complete_command_next(e);
214 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set case-sensitive-search auto ");
215 1 reset_completion(c);
216
217 1 ASSERT_EQ(setenv(ENV_VAR_NAME, "xyz", 1), 0);
218
219 1 cmdline_set_text(c, "insert $" ENV_VAR_PREFIX);
220 1 complete_command_next(e);
221 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "insert $" ENV_VAR_NAME);
222 1 reset_completion(c);
223
224 1 cmdline_set_text(c, "setenv " ENV_VAR_PREFIX);
225 1 complete_command_next(e);
226 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "setenv " ENV_VAR_NAME " ");
227 1 complete_command_next(e);
228 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "setenv " ENV_VAR_NAME " xyz ");
229 1 reset_completion(c);
230
231 1 ASSERT_EQ(unsetenv(ENV_VAR_NAME), 0);
232
233 1 cmdline_clear(c);
234 1 complete_command_prev(e);
235 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "alias");
236 1 complete_command_prev(e);
237 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wswap");
238 1 complete_command_prev(e);
239 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wsplit");
240 1 reset_completion(c);
241
242 1 cmdline_set_text(c, "hi default ");
243 1 complete_command_next(e);
244 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "hi default black");
245 1 complete_command_prev(e);
246 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "hi default yellow");
247 1 complete_command_next(e);
248 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "hi default black");
249 1 complete_command_next(e);
250 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "hi default blink");
251 1 reset_completion(c);
252
253 1 cmdline_set_text(c, "cursor i");
254 1 complete_command_next(e);
255 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "cursor insert ");
256 1 complete_command_next(e);
257 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "cursor insert bar");
258 1 reset_completion(c);
259
260 1 cmdline_set_text(c, "cursor default blo");
261 1 complete_command_next(e);
262 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "cursor default block ");
263 1 complete_command_next(e);
264 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "cursor default block #22AABB");
265 1 complete_command_next(e);
266 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "cursor default block default");
267 1 complete_command_next(e);
268 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "cursor default block keep");
269 1 reset_completion(c);
270
271 1 cmdline_set_text(c, "show opt");
272 1 complete_command_next(e);
273 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "show option ");
274 1 complete_command_next(e);
275 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "show option auto-indent");
276 1 reset_completion(c);
277
278 1 cmdline_set_text(c, "show builtin syntax/gitcom");
279 1 complete_command_next(e);
280 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "show builtin syntax/gitcommit ");
281 1 reset_completion(c);
282
283 1 cmdline_set_text(c, "set ws-error tr");
284 1 complete_command_next(e);
285 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set ws-error trailing ");
286 1 reset_completion(c);
287
288 1 cmdline_set_text(c, "set ws-error special,tab-");
289 1 complete_command_next(e);
290 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set ws-error special,tab-after-indent");
291 1 complete_command_next(e);
292 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set ws-error special,tab-indent");
293 1 complete_command_next(e);
294 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set ws-error special,tab-after-indent");
295 1 reset_completion(c);
296
297 1 cmdline_set_text(c, "set esc-timeout ");
298 1 complete_command_next(e);
299 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set esc-timeout 100 ");
300 1 reset_completion(c);
301
302 1 cmdline_set_text(c, "set x y tab-b");
303 1 complete_command_next(e);
304 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set x y tab-bar ");
305 1 complete_command_next(e);
306 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "set x y tab-bar true ");
307 1 reset_completion(c);
308
309 1 cmdline_set_text(c, "save -u test/data/");
310 1 complete_command_next(e);
311 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "save -u test/data/3lines.txt");
312 1 reset_completion(c);
313
314 1 cmdline_set_text(c, "include -b r");
315 1 complete_command_next(e);
316 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "include -b rc ");
317 1 reset_completion(c);
318
319 1 cmdline_set_text(c, "option gitcom");
320 1 complete_command_next(e);
321 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "option gitcommit ");
322 1 complete_command_next(e);
323 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "option gitcommit auto-indent");
324 1 reset_completion(c);
325
326 1 cmdline_set_text(c, "errorfmt c r ");
327 1 complete_command_next(e);
328 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "errorfmt c r _");
329 1 complete_command_next(e);
330 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "errorfmt c r column");
331 1 reset_completion(c);
332
333 1 cmdline_set_text(c, "ft javasc");
334 1 complete_command_next(e);
335 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "ft javascript ");
336 1 reset_completion(c);
337
338 1 cmdline_set_text(c, "macro rec");
339 1 complete_command_next(e);
340 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "macro record ");
341 1 reset_completion(c);
342
343 1 cmdline_set_text(c, "move-tab ");
344 1 complete_command_next(e);
345 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "move-tab left");
346 1 complete_command_next(e);
347 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "move-tab right");
348 1 reset_completion(c);
349
350 1 cmdline_set_text(c, "quit ");
351 1 complete_command_next(e);
352 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "quit 0");
353 1 complete_command_next(e);
354 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "quit 1");
355 1 reset_completion(c);
356
357 1 cmdline_set_text(c, "repeat 3 ");
358 1 complete_command_next(e);
359 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "repeat 3 alias");
360 1 reset_completion(c);
361
362 1 cmdline_set_text(c, "repeat 3 hi ");
363 1 complete_command_next(e);
364 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "repeat 3 hi activetab");
365 1 reset_completion(c);
366
367 1 cmdline_set_text(c, "left; right; word-");
368 1 complete_command_next(e);
369 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "left; right; word-bwd");
370 1 reset_completion(c);
371
372 1 cmdline_set_text(c, "replace -");
373 1 complete_command_next(e);
374 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -b");
375 1 complete_command_next(e);
376 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -c");
377 1 complete_command_next(e);
378 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -e");
379 1 complete_command_next(e);
380 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -g");
381 1 complete_command_next(e);
382 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -i");
383 1 complete_command_next(e);
384 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -b");
385 1 reset_completion(c);
386
387 1 cmdline_set_text(c, "replace -- -");
388 1 complete_command_next(e);
389 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -- -");
390 1 reset_completion(c);
391
392 1 cmdline_set_text(c, "left -c; replace -b -");
393 1 complete_command_next(e);
394 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "left -c; replace -b -c");
395 1 reset_completion(c);
396
397 1 cmdline_set_text(c, "replace -bcei -");
398 1 complete_command_next(e);
399 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -bcei -g ");
400 1 reset_completion(c);
401
402 1 cmdline_set_text(c, "replace -bcegi -");
403 1 complete_command_next(e);
404 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -bcegi -");
405 1 reset_completion(c);
406
407 1 cmdline_set_text(c, "replace -i");
408 1 complete_command_next(e);
409 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -i ");
410 1 reset_completion(c);
411
412 1 cmdline_set_text(c, "wswap -");
413 1 complete_command_next(e);
414 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wswap -");
415 1 reset_completion(c);
416
417 1 cmdline_set_text(c, "exec -");
418 1 complete_command_next(e);
419 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -e");
420 1 reset_completion(c);
421
422 1 cmdline_set_text(c, "exec -o");
423 1 complete_command_next(e);
424 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -o ");
425 1 complete_command_next(e);
426 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -o buffer");
427 1 complete_command_next(e);
428 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -o echo");
429 1 complete_command_next(e);
430 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -o eval");
431 1 reset_completion(c);
432
433 1 cmdline_set_text(c, "exec -- -");
434 1 complete_command_next(e);
435 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -- -");
436 1 reset_completion(c);
437
438 1 cmdline_set_text(c, "exec -p ls -");
439 1 complete_command_next(e);
440 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -p ls -");
441 1 reset_completion(c);
442
443 1 cmdline_set_text(c, "exec -p ls -l");
444 1 complete_command_next(e);
445 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -p ls -l");
446 1 reset_completion(c);
447
448 1 cmdline_set_text(c, "exec -s -i buffer -o buffer -");
449 1 complete_command_next(e);
450 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -s -i buffer -o buffer -e");
451 1 reset_completion(c);
452
453 1 cmdline_set_text(c, "exec -s -i buffer ls -");
454 1 complete_command_next(e);
455 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "exec -s -i buffer ls -");
456 1 reset_completion(c);
457
458 1 cmdline_set_text(c, "replace -cg");
459 1 complete_command_next(e);
460 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "replace -cg");
461 1 reset_completion(c);
462
463 1 cmdline_set_text(c, "left -");
464 1 complete_command_next(e);
465 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "left -c");
466 1 reset_completion(c);
467
468 1 cmdline_set_text(c, "option -");
469 1 complete_command_next(e);
470 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "option -r ");
471 1 reset_completion(c);
472
473 1 cmdline_set_text(c, "quit 1 -");
474 1 complete_command_next(e);
475 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "quit 1 -C");
476 1 reset_completion(c);
477
478 1 cmdline_set_text(c, "quit 1 2 -");
479 1 complete_command_next(e);
480 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "quit 1 2 -");
481 1 reset_completion(c);
482
483 1 const Command *wflip = find_normal_command("wflip");
484 1 EXPECT_EQ(wflip->flags[0], '\0');
485 1 EXPECT_EQ(wflip->max_args, 0);
486
487 1 cmdline_set_text(c, "wflip ");
488 1 complete_command_next(e);
489 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wflip ");
490 1 reset_completion(c);
491
492 1 cmdline_set_text(c, "wflip -");
493 1 complete_command_next(e);
494 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wflip -");
495 1 reset_completion(c);
496
497 1 cmdline_set_text(c, "wflip -- -");
498 1 complete_command_next(e);
499 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "wflip -- -");
500 1 reset_completion(c);
501 1 }
502
503 // This should only be run after init_headless_mode() because the completions
504 // depend on the buffer and default config being initialized
505 1 static void test_complete_command_extra(TestContext *ctx)
506 {
507 1 EditorState *e = ctx->userdata;
508 1 CommandLine *c = &e->cmdline;
509
510 1 cmdline_set_text(c, "alias reverse-li");
511 1 complete_command_next(e);
512 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "alias reverse-lines ");
513 1 complete_command_next(e);
514 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "alias reverse-lines 'filter tac' ");
515 1 reset_completion(c);
516
517 1 cmdline_set_text(c, "bind C-z");
518 1 complete_command_next(e);
519 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind C-z ");
520 1 complete_command_next(e);
521 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind C-z undo ");
522 1 reset_completion(c);
523
524 1 cmdline_set_text(c, "bind -s C-g");
525 1 complete_command_next(e);
526 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -s C-g ");
527 1 complete_command_next(e);
528 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -s C-g cancel ");
529 1 reset_completion(c);
530
531 1 cmdline_set_text(c, "bind -T command tab ");
532 1 complete_command_next(e);
533 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -T command tab complete-next ");
534 1 reset_completion(c);
535
536 1 cmdline_set_text(c, "bind -qc C-left ");
537 1 complete_command_next(e);
538 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "bind -qc C-left word-bwd ");
539 1 reset_completion(c);
540
541 1 cmdline_set_text(c, "compile -1s bas");
542 1 complete_command_next(e);
543 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "compile -1s basic ");
544 1 reset_completion(c);
545
546 1 cmdline_set_text(c, "errorfmt bas");
547 1 complete_command_next(e);
548 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "errorfmt basic ");
549 1 reset_completion(c);
550
551 1 cmdline_set_text(c, "errorfmt xyz '^(.*)$' m");
552 1 complete_command_next(e);
553 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "errorfmt xyz '^(.*)$' message ");
554 1 reset_completion(c);
555
556 1 cmdline_set_text(c, "show bi");
557 1 complete_command_next(e);
558 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "show bind ");
559 1 complete_command_next(e);
560 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "show bind C-M-S-delete");
561 1 complete_command_prev(e);
562 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "show bind up");
563 1 reset_completion(c);
564
565 1 cmdline_set_text(c, "show errorfmt gc");
566 1 complete_command_next(e);
567 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "show errorfmt gcc ");
568 1 reset_completion(c);
569
570 1 cmdline_set_text(c, "option c expand-tab ");
571 1 complete_command_next(e);
572 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "option c expand-tab true ");
573 1 reset_completion(c);
574
575 1 static const char create_files[] =
576 "run -s mkdir -p $HOME/sub;"
577 "run -s touch $HOME/file $HOME/sub/subfile;";
578
579 1 EXPECT_TRUE(handle_normal_command(e, create_files, false));
580 1 cmdline_set_text(c, "open ~/");
581 1 complete_command_next(e);
582 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "open ~/file");
583 1 complete_command_next(e);
584 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "open ~/sub/");
585 1 reset_completion(c);
586
587 1 cmdline_set_text(c, "open ~/sub/");
588 1 complete_command_next(e);
589 1 EXPECT_STRING_EQ_CSTRING(&c->buf, "open ~/sub/subfile ");
590 1 reset_completion(c);
591 1 }
592
593 static const TestEntry tests[] = {
594 TEST(test_command_mode),
595 TEST(test_complete_command),
596 };
597
598 static const TestEntry tests_late[] = {
599 TEST(test_complete_command_extra),
600 };
601
602 const TestGroup cmdline_tests = TEST_GROUP(tests);
603 const TestGroup cmdline_tests_late = TEST_GROUP(tests_late);
604