dte test coverage


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