Commit | Line | Data |
---|---|---|
dca0f6c0 PA |
1 | # This testcase is part of GDB, the GNU debugger. |
2 | ||
3 | # Copyright 2019 Free Software Foundation, Inc. | |
4 | ||
5 | # This program is free software; you can redistribute it and/or modify | |
6 | # it under the terms of the GNU General Public License as published by | |
7 | # the Free Software Foundation; either version 3 of the License, or | |
8 | # (at your option) any later version. | |
9 | # | |
10 | # This program is distributed in the hope that it will be useful, | |
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | # GNU General Public License for more details. | |
14 | # | |
15 | # You should have received a copy of the GNU General Public License | |
16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | ||
18 | # Test the set/show commands framework. The test uses the | |
19 | # "maintenance test-settings set/show xxx" subcommands to exercise | |
20 | # TAB-completion and setting processing. | |
21 | ||
22 | load_lib completion-support.exp | |
23 | ||
24 | standard_testfile .c | |
25 | ||
26 | if {[build_executable "failed to prepare" $testfile $srcfile debug]} { | |
27 | return -1 | |
28 | } | |
29 | ||
30 | clean_restart | |
31 | ||
32 | if { ![readline_is_used] } { | |
33 | untested "no tab completion support without readline" | |
34 | return -1 | |
35 | } | |
36 | ||
37 | # Test the show command SHOW_CMD. EXPECTED_RE is the expected output. | |
38 | # This procedure exists in order to make it easier to make the test | |
39 | # name/message unique, since we test the "show" commands many times. | |
40 | # EXPECTED_RE is made part of the test name. | |
41 | proc show_setting {show_cmd expected_re} { | |
42 | gdb_test "$show_cmd" $expected_re "$show_cmd: $expected_re" | |
43 | } | |
44 | ||
45 | # var_Xinteger tests. VARIANT determines which command/variant to | |
46 | # exercise. | |
47 | proc test-integer {variant} { | |
c6ac8931 PA |
48 | set set_cmd "maint set test-settings $variant" |
49 | set show_cmd "maint show test-settings $variant" | |
dca0f6c0 PA |
50 | |
51 | # A bogus value. | |
52 | gdb_test "$set_cmd bogus" \ | |
53 | "No symbol table is loaded\\. Use the \"file\" command\\." | |
54 | ||
55 | # Seemingly-valid but not quite valid value. | |
56 | gdb_test "$set_cmd 1a" \ | |
57 | "Invalid number \"1a\"\\." | |
58 | ||
59 | # Valid value followed by garbage. | |
60 | gdb_test "$set_cmd 1 1" \ | |
61 | "A syntax error in expression, near `1'\\." | |
62 | ||
63 | # Valid value followed by garbage. | |
64 | gdb_test "$set_cmd 1 x" \ | |
65 | "A syntax error in expression, near `x'\\." | |
66 | ||
67 | if {$variant == "zuinteger-unlimited"} { | |
68 | # -1 means unlimited. Other negative values are rejected. -1 | |
69 | # -is tested further below, along the "unlimited" tests. | |
70 | gdb_test "$set_cmd -2" "only -1 is allowed to set as unlimited" | |
71 | } elseif {$variant == "uinteger" || $variant == "zuinteger"} { | |
72 | # Negative values are not accepted. | |
73 | gdb_test "$set_cmd -1" "integer -1 out of range" | |
74 | gdb_test "$set_cmd -2" "integer -2 out of range" | |
75 | } else { | |
76 | # Negative values are not accepted. | |
77 | gdb_test_no_output "$set_cmd -1" | |
78 | show_setting "$show_cmd" "-1" | |
79 | gdb_test_no_output "$set_cmd -2" | |
80 | show_setting "$show_cmd" "-2" | |
81 | } | |
82 | ||
83 | # Regular integer is accepted. | |
84 | gdb_test_no_output "$set_cmd 999" | |
85 | show_setting "$show_cmd" "999" | |
86 | ||
87 | if {$variant == "zinteger" || $variant == "zuinteger"} { | |
88 | # 0 means 0. | |
89 | gdb_test_no_output "$set_cmd 0" | |
90 | show_setting "$show_cmd" "0" | |
91 | } else { | |
92 | # Either 0 or -1 mean unlimited. Test both the number and | |
93 | # "unlimited". For the latter, test both full name and | |
94 | # abbreviations. | |
95 | ||
96 | if {$variant == "zuinteger-unlimited"} { | |
97 | gdb_test_no_output "$set_cmd -1" | |
98 | } else { | |
99 | gdb_test_no_output "$set_cmd 0" | |
100 | } | |
101 | show_setting "$show_cmd" "unlimited" | |
102 | ||
103 | foreach_with_prefix value { | |
104 | "u" | |
105 | "un" | |
106 | "unl" | |
107 | "unli" | |
108 | "unlim" | |
109 | "unlimi" | |
110 | "unlimit" | |
111 | "unlimite" | |
112 | "unlimited" | |
113 | } { | |
114 | # Alternate between integer and unlimited, to make sure the | |
115 | # setting really took effect. | |
116 | gdb_test_no_output "$set_cmd 1" | |
117 | show_setting "$show_cmd" "1" | |
118 | ||
119 | gdb_test_no_output "$set_cmd $value" | |
120 | show_setting "$show_cmd" "unlimited" | |
121 | } | |
122 | } | |
123 | ||
124 | if {$variant == "zuinteger"} { | |
c6ac8931 | 125 | test_gdb_complete_multiple "maint set test-settings " "zuinteger" "" { |
dca0f6c0 PA |
126 | "zuinteger" |
127 | "zuinteger-unlimited" | |
128 | } | |
129 | } else { | |
130 | test_gdb_complete_unique \ | |
131 | "$set_cmd" \ | |
132 | "$set_cmd" | |
133 | } | |
134 | ||
135 | if {$variant == "zinteger" || $variant == "zuinteger"} { | |
136 | test_gdb_complete_none \ | |
137 | "$set_cmd " \ | |
138 | } else { | |
139 | test_gdb_complete_unique \ | |
140 | "$set_cmd " \ | |
141 | "$set_cmd unlimited" | |
142 | } | |
143 | ||
4c048731 | 144 | # Check junk after "unlimited". |
dca0f6c0 PA |
145 | gdb_test "$set_cmd unlimitedu" "No symbol table is loaded.*" |
146 | ||
4c048731 PA |
147 | if {$variant == "zinteger" || $variant == "zuinteger"} { |
148 | gdb_test "$set_cmd unlimited u" "No symbol table is loaded.*" | |
149 | gdb_test "$set_cmd unlimited 1" "No symbol table is loaded.*" | |
150 | gdb_test "$set_cmd unlimited -1" "No symbol table is loaded.*" | |
151 | } else { | |
152 | gdb_test "$set_cmd unlimited u" "Junk after \"unlimited\": u" | |
153 | gdb_test "$set_cmd unlimited 1" "Junk after \"unlimited\": 1" | |
154 | gdb_test "$set_cmd unlimited -1" "Junk after \"unlimited\": -1" | |
155 | } | |
156 | ||
dca0f6c0 PA |
157 | test_gdb_complete_none "$set_cmd unlimited " |
158 | test_gdb_complete_none "$set_cmd unlimitedu" | |
159 | test_gdb_complete_none "$set_cmd unlimited u" | |
160 | test_gdb_complete_none "$set_cmd unlimited 1" | |
161 | test_gdb_complete_none "$set_cmd x" | |
162 | test_gdb_complete_none "$set_cmd x " | |
163 | test_gdb_complete_none "$set_cmd -1" | |
164 | test_gdb_complete_none "$set_cmd -1 " | |
165 | test_gdb_complete_none "$set_cmd 1 " | |
166 | ||
167 | # Check show command completion. | |
168 | if {$variant == "zuinteger"} { | |
c6ac8931 | 169 | test_gdb_complete_multiple "maintenance show test-settings " "zuinteger" "" { |
dca0f6c0 PA |
170 | "zuinteger" |
171 | "zuinteger-unlimited" | |
172 | } | |
173 | } else { | |
174 | test_gdb_complete_unique \ | |
175 | "$show_cmd" \ | |
176 | "$show_cmd" | |
177 | } | |
178 | test_gdb_complete_none "$show_cmd " | |
179 | } | |
180 | ||
181 | # boolean tests. | |
182 | proc_with_prefix test-boolean {} { | |
183 | # Use these variables to make sure we don't call the wrong command | |
184 | # by mistake. | |
c6ac8931 PA |
185 | set set_cmd "maint set test-settings boolean" |
186 | set show_cmd "maint show test-settings boolean" | |
dca0f6c0 PA |
187 | |
188 | # A bogus value. | |
189 | gdb_test "$set_cmd bogus" \ | |
190 | "\"on\" or \"off\" expected\\." | |
191 | ||
192 | # Seemingly-valid but not quite valid value. | |
193 | gdb_test "$set_cmd on1" \ | |
194 | "\"on\" or \"off\" expected\\." | |
195 | ||
196 | # Valid value followed by garbage. | |
197 | gdb_test "$set_cmd on 1" \ | |
198 | "\"on\" or \"off\" expected\\." | |
199 | ||
200 | # Unlike auto-bool settings, "-1" is not accepted. | |
201 | gdb_test "$set_cmd -1" \ | |
202 | "\"on\" or \"off\" expected\\." | |
203 | ||
204 | # Nor "auto". | |
205 | gdb_test "$set_cmd auto" \ | |
206 | "\"on\" or \"off\" expected\\." | |
207 | ||
dee7b4c8 PA |
208 | # "o" is ambiguous. |
209 | gdb_test "$set_cmd o" \ | |
210 | "\"on\" or \"off\" expected\\." | |
211 | ||
dca0f6c0 PA |
212 | # Various valid values. Test both full value names and |
213 | # abbreviations. | |
214 | ||
215 | # Note that unlike with auto-bool, empty value implies "on". | |
216 | foreach_with_prefix value { | |
217 | "" | |
dca0f6c0 PA |
218 | "on" |
219 | "1" | |
220 | "y" | |
221 | "ye" | |
222 | "yes" | |
223 | "e" | |
224 | "en" | |
225 | "ena" | |
226 | "enab" | |
227 | "enabl" | |
228 | "enable" | |
229 | } { | |
230 | gdb_test_no_output "$set_cmd off" | |
231 | show_setting "$show_cmd" "off" | |
232 | ||
233 | gdb_test_no_output "$set_cmd $value" | |
234 | show_setting "$show_cmd" "on" | |
235 | } | |
236 | ||
237 | foreach_with_prefix value { | |
238 | "of" | |
239 | "off" | |
240 | "0" | |
241 | "n" | |
242 | "no" | |
243 | "d" | |
244 | "di" | |
245 | "dis" | |
246 | "disa" | |
247 | "disab" | |
248 | "disabl" | |
249 | "disable" | |
250 | } { | |
251 | gdb_test_no_output "$set_cmd on" | |
252 | show_setting "$show_cmd" "on" | |
253 | ||
254 | gdb_test_no_output "$set_cmd $value" | |
255 | show_setting "$show_cmd" "off" | |
256 | } | |
257 | ||
258 | test_gdb_complete_multiple "$set_cmd " "" "o" { | |
259 | "off" | |
260 | "on" | |
261 | } | |
262 | ||
263 | test_gdb_complete_unique \ | |
264 | "$set_cmd of" \ | |
265 | "$set_cmd off" | |
266 | ||
267 | test_gdb_complete_none "$set_cmd x" | |
268 | ||
269 | # Check that the show command doesn't complete anything. | |
270 | test_gdb_complete_unique \ | |
271 | "$show_cmd" \ | |
272 | "$show_cmd" | |
273 | test_gdb_complete_none "$show_cmd " | |
274 | } | |
275 | ||
276 | # auto-boolean tests. | |
277 | proc_with_prefix test-auto-boolean {} { | |
278 | # Use these variables to make sure we don't call the wrong command | |
279 | # by mistake. | |
c6ac8931 PA |
280 | set set_cmd "maint set test-settings auto-boolean" |
281 | set show_cmd "maint show test-settings auto-boolean" | |
dca0f6c0 PA |
282 | |
283 | # A bogus value. | |
284 | gdb_test "$set_cmd bogus" \ | |
285 | "\"on\", \"off\" or \"auto\" expected\\." | |
286 | ||
287 | # Seemingly-valid but not quite valid value. | |
288 | gdb_test "$set_cmd on1" \ | |
289 | "\"on\", \"off\" or \"auto\" expected\\." | |
290 | ||
291 | # Valid value followed by garbage. | |
292 | gdb_test "$set_cmd on 1" \ | |
293 | "\"on\", \"off\" or \"auto\" expected\\." | |
294 | ||
dee7b4c8 PA |
295 | # "o" is ambiguous. |
296 | gdb_test "$set_cmd o" \ | |
297 | "\"on\", \"off\" or \"auto\" expected\\." | |
298 | ||
dca0f6c0 PA |
299 | # Various valid values. Test both full value names and |
300 | # abbreviations. | |
301 | ||
302 | foreach_with_prefix value { | |
dca0f6c0 PA |
303 | "on" |
304 | "1" | |
305 | "y" | |
306 | "ye" | |
307 | "yes" | |
308 | "e" | |
309 | "en" | |
310 | "ena" | |
311 | "enab" | |
312 | "enabl" | |
313 | "enable" | |
314 | } { | |
315 | gdb_test_no_output "$set_cmd off" | |
316 | show_setting "$show_cmd" "off" | |
317 | ||
318 | gdb_test_no_output "$set_cmd $value" | |
319 | show_setting "$show_cmd" "on" | |
320 | } | |
321 | ||
322 | foreach_with_prefix value { | |
323 | "of" | |
324 | "off" | |
325 | "0" | |
326 | "n" | |
327 | "no" | |
328 | "d" | |
329 | "di" | |
330 | "dis" | |
331 | "disa" | |
332 | "disab" | |
333 | "disabl" | |
334 | "disable" | |
335 | } { | |
336 | gdb_test_no_output "$set_cmd on" | |
337 | show_setting "$show_cmd" "on" | |
338 | ||
339 | gdb_test_no_output "$set_cmd $value" | |
340 | show_setting "$show_cmd" "off" | |
341 | } | |
342 | ||
343 | foreach_with_prefix value { | |
344 | "a" | |
345 | "au" | |
346 | "aut" | |
347 | "auto" | |
348 | "-1" | |
349 | } { | |
350 | gdb_test_no_output "$set_cmd on" | |
351 | show_setting "$show_cmd" "on" | |
352 | ||
353 | gdb_test_no_output "$set_cmd $value" | |
354 | show_setting "$show_cmd" "auto" | |
355 | } | |
356 | ||
357 | # "-" is not accepted as abbreviation of "-1". | |
358 | gdb_test "$set_cmd -" \ | |
359 | "\"on\", \"off\" or \"auto\" expected\\." | |
360 | ||
361 | test_gdb_complete_multiple "$set_cmd " "" "" { | |
362 | "auto" | |
363 | "off" | |
364 | "on" | |
365 | } | |
366 | ||
367 | test_gdb_complete_unique \ | |
368 | "$set_cmd of" \ | |
369 | "$set_cmd off" | |
370 | ||
371 | test_gdb_complete_none "$set_cmd x" | |
372 | ||
373 | # Check that the show command doesn't complete anything. | |
374 | test_gdb_complete_unique \ | |
375 | "$show_cmd" \ | |
376 | "$show_cmd" | |
377 | test_gdb_complete_none "$show_cmd " | |
378 | } | |
379 | ||
380 | # Enum option tests. | |
381 | proc_with_prefix test-enum {} { | |
382 | # Use these variables to make sure we don't call the wrong command | |
383 | # by mistake. | |
c6ac8931 PA |
384 | set set_cmd "maint set test-settings enum" |
385 | set show_cmd "maint show test-settings enum" | |
dca0f6c0 PA |
386 | |
387 | # Missing value. | |
388 | gdb_test "$set_cmd" \ | |
389 | "Requires an argument\\. Valid arguments are xxx, yyy, zzz\\." | |
390 | ||
391 | # A bogus value. | |
392 | gdb_test "$set_cmd bogus" \ | |
393 | "Undefined item: \"bogus\"." | |
394 | ||
395 | # Seemingly-valid but not quite valid value. | |
396 | gdb_test "$set_cmd xxx1" \ | |
397 | "Undefined item: \"xxx1\"." | |
398 | ||
399 | # Valid value followed by garbage. | |
400 | gdb_test "$set_cmd xxx 1" \ | |
401 | "Junk after item \"xxx\": 1" | |
402 | # Valid value followed by garbage, with extra spaces. | |
403 | gdb_test "$set_cmd xxx 1" \ | |
404 | "Junk after item \"xxx\": 1" | |
405 | # Abbreviated value followed by garbage. | |
406 | gdb_test "$set_cmd xx 1" \ | |
407 | "Junk after item \"xx\": 1" | |
408 | ||
409 | # Various valid values. Test both full value names and | |
410 | # abbreviations. | |
411 | gdb_test_no_output "$set_cmd x" | |
412 | show_setting "$show_cmd" "xxx" | |
413 | gdb_test_no_output "$set_cmd yy" | |
414 | show_setting "$show_cmd" "yyy" | |
415 | gdb_test_no_output "$set_cmd zzz" | |
416 | show_setting "$show_cmd" "zzz" | |
417 | ||
418 | test_gdb_complete_multiple "$set_cmd " "" "" { | |
419 | "xxx" | |
420 | "yyy" | |
421 | "zzz" | |
422 | } | |
423 | ||
424 | test_gdb_complete_unique \ | |
425 | "$set_cmd x" \ | |
426 | "$set_cmd xxx" | |
427 | ||
428 | test_gdb_complete_none "$set_cmd a" | |
429 | ||
430 | # Check that the show command doesn't complete anything. | |
431 | test_gdb_complete_unique \ | |
432 | "$show_cmd" \ | |
433 | "$show_cmd" | |
434 | test_gdb_complete_none "$show_cmd " | |
435 | } | |
436 | ||
437 | # string settings tests. | |
438 | proc test-string {variant} { | |
439 | global gdb_prompt | |
440 | global srcfile binfile | |
441 | ||
442 | # Load symbols for the completion test below. | |
443 | clean_restart $binfile | |
444 | ||
445 | # Use these variables to make sure we don't call the wrong command | |
446 | # by mistake. | |
c6ac8931 PA |
447 | set set_cmd "maint set test-settings $variant" |
448 | set show_cmd "maint show test-settings $variant" | |
dca0f6c0 | 449 | |
970f9d09 PA |
450 | # Checks that gdb doesn't crash if we haven't set the string yet. |
451 | if {$variant != "filename"} { | |
452 | gdb_test "$show_cmd" "^$show_cmd\r\n" "$show_cmd: show default" | |
453 | } else { | |
454 | gdb_test "$show_cmd" "/foo/bar" "$show_cmd: show default" | |
455 | } | |
dca0f6c0 PA |
456 | |
457 | # A string value. | |
458 | gdb_test_no_output "$set_cmd hello world" | |
459 | show_setting "$show_cmd" "hello world" | |
460 | ||
461 | # A quoted string value. | |
462 | if {$variant == "string"} { | |
463 | gdb_test_no_output "$set_cmd \"hello world\"" | |
464 | show_setting "$show_cmd" "\\\\\"hello world\\\\\"" | |
465 | } else { | |
466 | gdb_test_no_output "$set_cmd \"hello world\"" | |
467 | show_setting "$show_cmd" "\"hello world\"" | |
468 | } | |
469 | ||
470 | # Test clearing the string. | |
471 | with_test_prefix "clear string" { | |
472 | if {$variant == "filename"} { | |
473 | gdb_test "$set_cmd" \ | |
474 | "Argument required \\(filename to set it to\\.\\)\\." | |
475 | ||
476 | # Check the value didn't change. | |
477 | show_setting "$show_cmd" "\"hello world\"" | |
478 | } else { | |
479 | gdb_test_no_output "$set_cmd" | |
480 | gdb_test "$show_cmd" \ | |
481 | "^$show_cmd\r\n" "$show_cmd: empty second time" | |
482 | } | |
483 | } | |
484 | ||
485 | # Test completion. | |
486 | if {$variant == "string" || $variant == "string-noescape" } { | |
487 | # Make sure GDB doesn't try to complete on symbols, which | |
488 | # doesn't make any sense. | |
489 | test_gdb_complete_none "$set_cmd " | |
490 | } else { | |
491 | # Complete on filename. | |
492 | ||
493 | # See comments in gdb.base/completion.exp. | |
494 | ||
495 | # We `cd' to ${srcdir}, and then do the completion relative to | |
496 | # the current directory. | |
497 | ||
498 | # ${srcdir} may be a relative path. We want to make sure we | |
499 | # end up in the right directory - so make sure we know where | |
500 | # it is. | |
501 | global srcdir | |
502 | set mydir [pwd] | |
503 | cd ${srcdir} | |
504 | set fullsrcdir [pwd] | |
505 | cd ${mydir} | |
506 | ||
507 | gdb_test "cd ${fullsrcdir}" \ | |
508 | "Working directory [string_to_regexp ${fullsrcdir}].*" \ | |
509 | "cd to \${srcdir}" | |
510 | ||
511 | set unique_file ../testsuite/gdb.base/comp-dir/subdir/dummy | |
512 | ||
513 | test_gdb_complete_unique \ | |
514 | "$set_cmd ${unique_file}" \ | |
515 | "$set_cmd ${unique_file}.txt" | |
516 | ||
517 | test_gdb_complete_none "$set_cmd ${unique_file}.abc" | |
518 | } | |
519 | ||
520 | # Check show command completion. | |
521 | if {$variant == "string"} { | |
c6ac8931 | 522 | test_gdb_complete_multiple "maint show test-settings " "string" "" { |
dca0f6c0 PA |
523 | "string" |
524 | "string-noescape" | |
525 | } | |
526 | } else { | |
527 | test_gdb_complete_unique \ | |
528 | "$show_cmd" \ | |
529 | "$show_cmd" | |
530 | } | |
531 | test_gdb_complete_none "$show_cmd " | |
532 | } | |
533 | ||
534 | foreach variant { | |
535 | uinteger | |
536 | integer | |
537 | zinteger | |
538 | zuinteger | |
539 | zuinteger-unlimited | |
540 | } { | |
541 | with_test_prefix "test-integer $variant" { | |
542 | test-integer $variant | |
543 | } | |
544 | } | |
545 | ||
546 | test-boolean | |
547 | test-auto-boolean | |
548 | test-enum | |
549 | ||
550 | foreach variant { | |
551 | string | |
552 | string-noescape | |
553 | optional-filename | |
554 | filename | |
555 | } { | |
556 | with_test_prefix "test-string $variant" { | |
557 | test-string $variant | |
558 | } | |
559 | } |