settings.exp revision 1.1.1.3 1 1.1 christos # This testcase is part of GDB, the GNU debugger.
2 1.1 christos
3 1.1.1.3 christos # Copyright 2019-2024 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos # This program is free software; you can redistribute it and/or modify
6 1.1 christos # it under the terms of the GNU General Public License as published by
7 1.1 christos # the Free Software Foundation; either version 3 of the License, or
8 1.1 christos # (at your option) any later version.
9 1.1 christos #
10 1.1 christos # This program is distributed in the hope that it will be useful,
11 1.1 christos # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 1.1 christos # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 1.1 christos # GNU General Public License for more details.
14 1.1 christos #
15 1.1 christos # You should have received a copy of the GNU General Public License
16 1.1 christos # along with this program. If not, see <http://www.gnu.org/licenses/>.
17 1.1 christos
18 1.1 christos # Test the set/show commands framework. The test uses the
19 1.1 christos # "maintenance test-settings set/show xxx" subcommands to exercise
20 1.1 christos # TAB-completion and setting processing.
21 1.1 christos
22 1.1 christos load_lib completion-support.exp
23 1.1 christos
24 1.1 christos standard_testfile .c
25 1.1 christos
26 1.1 christos if {[build_executable "failed to prepare" $testfile $srcfile debug]} {
27 1.1 christos return -1
28 1.1 christos }
29 1.1 christos
30 1.1 christos clean_restart
31 1.1 christos
32 1.1 christos if { ![readline_is_used] } {
33 1.1 christos untested "no tab completion support without readline"
34 1.1 christos return -1
35 1.1 christos }
36 1.1 christos
37 1.1 christos # Test the show command SHOW_CMD. EXPECTED_RE is the expected output.
38 1.1 christos # Also verifies that $_gdb_maint_setting_str produces an equivalent output,
39 1.1 christos # matching it with EXPECTED_RE. EXPECTED_RE double quotes are escaped
40 1.1 christos # unless EXPECTED_RE_ESCAPED is true, indicating the quotes in EXPECTED_RE
41 1.1 christos # are already escaped.
42 1.1 christos # The value for the setting corresponding to SHOW_CMD is then reset
43 1.1 christos # to RESET_VALUE, then set again to the value given by $_gdb_maint_setting_str
44 1.1 christos # and $_gdb_maint_setting. The default value of RESET_VALUE (0) should work for
45 1.1 christos # most settings. Note that we do not check that RESET_VALUE differs from
46 1.1 christos # the expected value, as we assume different values will be verified.
47 1.1 christos # The setting value must still be the one in force before calling show_setting.
48 1.1 christos # In other words, this verifies that
49 1.1 christos # maint set test-settings <some_setting> $_gdb_maint_setting_str(<some_setting>)
50 1.1 christos # maint set test-settings <some_setting> $_gdb_maint_setting(<some_setting>)
51 1.1 christos # do not change the setting value.
52 1.1 christos # This procedure makes it easier to make the test
53 1.1 christos # name/message unique, since we test the "show" commands many times.
54 1.1 christos # EXPECTED_RE is made part of the test name.
55 1.1 christos proc show_setting {show_cmd expected_re {expected_re_escaped 0} {reset_value 0}} {
56 1.1 christos global gdb_prompt
57 1.1 christos
58 1.1 christos with_test_prefix "$show_cmd $expected_re" {
59 1.1 christos gdb_test "$show_cmd" $expected_re "show"
60 1.1 christos
61 1.1 christos # Remove the first two words (such as "maint show") to have the
62 1.1 christos # setting name to use for $_gdb_maint_setting_str.
63 1.1 christos regsub "\[^ \]+ +\[^ \]+ +\(.*\)" $show_cmd "\\1" maint_setting
64 1.1 christos if {$expected_re_escaped} {
65 1.1 christos set escaped_expected_re $expected_re
66 1.1 christos } else {
67 1.1 christos regsub -all "\"" $expected_re "\\\\\\\"" escaped_expected_re
68 1.1 christos }
69 1.1 christos set test "print \$_gdb_maint_setting_str"
70 1.1 christos set setting_str_value "xxxYYYxxx"
71 1.1 christos gdb_test_multiple "print \$_gdb_maint_setting_str(\"$maint_setting\")" $test {
72 1.1 christos -re " = \"\($escaped_expected_re\)\".*$gdb_prompt $" {
73 1.1 christos set setting_str_value $expect_out(1,string)
74 1.1 christos regsub -all "\\\\" $expect_out(1,string) "" setting_str_value
75 1.1 christos pass $test
76 1.1 christos }
77 1.1 christos }
78 1.1 christos
79 1.1 christos # Change the setting value to RESET_VALUE, set it back to setting_str_value
80 1.1 christos # and check we still have the original value.
81 1.1 christos gdb_test_no_output "maintenance set $maint_setting $reset_value" "str reset $reset_value"
82 1.1 christos gdb_test_no_output "maintenance set $maint_setting $setting_str_value" "str set again"
83 1.1 christos gdb_test "$show_cmd" $expected_re "str show after reset+set again"
84 1.1 christos
85 1.1 christos # Same test, but with value captured from $_gdb_maint_setting.
86 1.1 christos set test "print \$_gdb_maint_setting"
87 1.1 christos set setting_value "xxxYYYxxx"
88 1.1 christos gdb_test_multiple "print \$_gdb_maint_setting(\"$maint_setting\")" $test {
89 1.1 christos -re " = \"\(.*\)\".*$gdb_prompt $" {
90 1.1 christos set setting_value $expect_out(1,string)
91 1.1 christos regsub -all "\\\\" $expect_out(1,string) "" setting_value
92 1.1 christos pass $test
93 1.1 christos }
94 1.1 christos -re " = \(.*\)\r\n$gdb_prompt $" {
95 1.1 christos set setting_value $expect_out(1,string)
96 1.1 christos pass $test
97 1.1 christos }
98 1.1 christos }
99 1.1 christos
100 1.1 christos gdb_test_no_output "maintenance set $maint_setting $reset_value" "reset $reset_value"
101 1.1 christos gdb_test_no_output "maintenance set $maint_setting $setting_value" "set again"
102 1.1 christos gdb_test "$show_cmd" $expected_re "show after reset+set again"
103 1.1 christos }
104 1.1 christos }
105 1.1 christos
106 1.1 christos # Verifies that $_gdb_setting (SETTING) gives a value whose ptype matches EXPECTED.
107 1.1 christos proc check_type {setting expected} {
108 1.1 christos with_test_prefix "check_type $setting $expected" {
109 1.1 christos gdb_test "print \$_gdb_maint_setting(\"$setting\")"
110 1.1 christos gdb_test "ptype $" "$expected"
111 1.1 christos
112 1.1 christos # Currently, GDB ptype <internal function> always tells it is type int.
113 1.1 christos # ptype should better report an error such as:
114 1.1 christos # "No type information for GDB functions"
115 1.1 christos # Test 'type int', so as to make it fail if ptype is changed.
116 1.1 christos gdb_test "ptype \$_gdb_maint_setting(\"$setting\")" \
117 1.1 christos "type = int"
118 1.1 christos }
119 1.1 christos }
120 1.1 christos
121 1.1 christos # var_Xinteger tests. VARIANT determines which command/variant to
122 1.1 christos # exercise.
123 1.1 christos proc test-integer {variant} {
124 1.1 christos set set_cmd "maint set test-settings $variant"
125 1.1 christos set show_cmd "maint show test-settings $variant"
126 1.1 christos
127 1.1 christos # A bogus value.
128 1.1 christos gdb_test "$set_cmd bogus" \
129 1.1 christos "No symbol table is loaded\\. Use the \"file\" command\\."
130 1.1 christos
131 1.1 christos # Seemingly-valid but not quite valid value.
132 1.1 christos gdb_test "$set_cmd 1a" \
133 1.1 christos "Invalid number \"1a\"\\."
134 1.1 christos
135 1.1 christos # Valid value followed by garbage.
136 1.1 christos gdb_test "$set_cmd 1 1" \
137 1.1 christos "A syntax error in expression, near `1'\\."
138 1.1 christos
139 1.1 christos # Valid value followed by garbage.
140 1.1 christos gdb_test "$set_cmd 1 x" \
141 1.1 christos "A syntax error in expression, near `x'\\."
142 1.1 christos
143 1.1 christos if {$variant == "zuinteger-unlimited"} {
144 1.1 christos # -1 means unlimited. Other negative values are rejected. -1
145 1.1 christos # -is tested further below, along the "unlimited" tests.
146 1.1.1.3 christos gdb_test "$set_cmd -2" "integer -2 out of range"
147 1.1 christos check_type "test-settings $variant" "type = int"
148 1.1 christos } elseif {$variant == "uinteger" || $variant == "zuinteger"} {
149 1.1 christos # Negative values are not accepted.
150 1.1 christos gdb_test "$set_cmd -1" "integer -1 out of range"
151 1.1 christos gdb_test "$set_cmd -2" "integer -2 out of range"
152 1.1 christos check_type "test-settings $variant" "type = unsigned int"
153 1.1 christos } else {
154 1.1 christos # Negative values are not accepted.
155 1.1 christos gdb_test_no_output "$set_cmd -1"
156 1.1 christos show_setting "$show_cmd" "-1"
157 1.1 christos gdb_test_no_output "$set_cmd -2"
158 1.1 christos show_setting "$show_cmd" "-2"
159 1.1 christos check_type "test-settings $variant" "type = int"
160 1.1 christos }
161 1.1 christos
162 1.1 christos # Regular integer is accepted.
163 1.1 christos gdb_test_no_output "$set_cmd 999"
164 1.1 christos show_setting "$show_cmd" "999"
165 1.1 christos
166 1.1 christos if {$variant == "zinteger" || $variant == "zuinteger"} {
167 1.1 christos # 0 means 0.
168 1.1 christos gdb_test_no_output "$set_cmd 0"
169 1.1 christos show_setting "$show_cmd" "0"
170 1.1 christos } else {
171 1.1 christos # Either 0 or -1 mean unlimited. Test both the number and
172 1.1 christos # "unlimited". For the latter, test both full name and
173 1.1 christos # abbreviations.
174 1.1 christos
175 1.1 christos if {$variant == "zuinteger-unlimited"} {
176 1.1 christos gdb_test_no_output "$set_cmd -1"
177 1.1 christos } else {
178 1.1 christos gdb_test_no_output "$set_cmd 0"
179 1.1 christos }
180 1.1 christos show_setting "$show_cmd" "unlimited"
181 1.1 christos
182 1.1 christos foreach_with_prefix value {
183 1.1 christos "u"
184 1.1 christos "un"
185 1.1 christos "unl"
186 1.1 christos "unli"
187 1.1 christos "unlim"
188 1.1 christos "unlimi"
189 1.1 christos "unlimit"
190 1.1 christos "unlimite"
191 1.1 christos "unlimited"
192 1.1 christos } {
193 1.1 christos # Alternate between integer and unlimited, to make sure the
194 1.1 christos # setting really took effect.
195 1.1 christos gdb_test_no_output "$set_cmd 1"
196 1.1 christos show_setting "$show_cmd" "1"
197 1.1 christos
198 1.1 christos gdb_test_no_output "$set_cmd $value"
199 1.1 christos show_setting "$show_cmd" "unlimited"
200 1.1 christos }
201 1.1 christos }
202 1.1 christos
203 1.1 christos if {$variant == "zuinteger"} {
204 1.1 christos test_gdb_complete_multiple "maint set test-settings " "zuinteger" "" {
205 1.1 christos "zuinteger"
206 1.1 christos "zuinteger-unlimited"
207 1.1 christos }
208 1.1 christos } else {
209 1.1 christos test_gdb_complete_unique \
210 1.1 christos "$set_cmd" \
211 1.1 christos "$set_cmd"
212 1.1 christos }
213 1.1 christos
214 1.1 christos if {$variant == "zinteger" || $variant == "zuinteger"} {
215 1.1 christos test_gdb_complete_none \
216 1.1.1.2 christos "$set_cmd "
217 1.1 christos } else {
218 1.1.1.2 christos test_gdb_complete_multiple "$set_cmd " "" "" {
219 1.1.1.2 christos "NUMBER"
220 1.1.1.2 christos "unlimited"
221 1.1.1.2 christos }
222 1.1.1.2 christos test_gdb_complete_none \
223 1.1.1.2 christos "$set_cmd 1"
224 1.1 christos test_gdb_complete_unique \
225 1.1.1.2 christos "$set_cmd u" \
226 1.1 christos "$set_cmd unlimited"
227 1.1 christos }
228 1.1 christos
229 1.1 christos # Check junk after "unlimited".
230 1.1 christos gdb_test "$set_cmd unlimitedu" "No symbol table is loaded.*"
231 1.1 christos
232 1.1 christos if {$variant == "zinteger" || $variant == "zuinteger"} {
233 1.1 christos gdb_test "$set_cmd unlimited u" "No symbol table is loaded.*"
234 1.1 christos gdb_test "$set_cmd unlimited 1" "No symbol table is loaded.*"
235 1.1 christos gdb_test "$set_cmd unlimited -1" "No symbol table is loaded.*"
236 1.1 christos } else {
237 1.1 christos gdb_test "$set_cmd unlimited u" "Junk after \"unlimited\": u"
238 1.1 christos gdb_test "$set_cmd unlimited 1" "Junk after \"unlimited\": 1"
239 1.1 christos gdb_test "$set_cmd unlimited -1" "Junk after \"unlimited\": -1"
240 1.1 christos }
241 1.1 christos
242 1.1 christos test_gdb_complete_none "$set_cmd unlimited "
243 1.1 christos test_gdb_complete_none "$set_cmd unlimitedu"
244 1.1 christos test_gdb_complete_none "$set_cmd unlimited u"
245 1.1 christos test_gdb_complete_none "$set_cmd unlimited 1"
246 1.1 christos test_gdb_complete_none "$set_cmd x"
247 1.1 christos test_gdb_complete_none "$set_cmd x "
248 1.1 christos test_gdb_complete_none "$set_cmd -1"
249 1.1 christos test_gdb_complete_none "$set_cmd -1 "
250 1.1 christos test_gdb_complete_none "$set_cmd 1 "
251 1.1 christos
252 1.1 christos # Check show command completion.
253 1.1 christos if {$variant == "zuinteger"} {
254 1.1 christos test_gdb_complete_multiple "maintenance show test-settings " "zuinteger" "" {
255 1.1 christos "zuinteger"
256 1.1 christos "zuinteger-unlimited"
257 1.1 christos }
258 1.1 christos } else {
259 1.1 christos test_gdb_complete_unique \
260 1.1 christos "$show_cmd" \
261 1.1 christos "$show_cmd"
262 1.1 christos }
263 1.1 christos test_gdb_complete_none "$show_cmd "
264 1.1 christos }
265 1.1 christos
266 1.1 christos # boolean tests.
267 1.1 christos proc_with_prefix test-boolean {} {
268 1.1 christos # Use these variables to make sure we don't call the wrong command
269 1.1 christos # by mistake.
270 1.1 christos set set_cmd "maint set test-settings boolean"
271 1.1 christos set show_cmd "maint show test-settings boolean"
272 1.1 christos
273 1.1 christos # A bogus value.
274 1.1 christos gdb_test "$set_cmd bogus" \
275 1.1 christos "\"on\" or \"off\" expected\\."
276 1.1 christos
277 1.1 christos # Seemingly-valid but not quite valid value.
278 1.1 christos gdb_test "$set_cmd on1" \
279 1.1 christos "\"on\" or \"off\" expected\\."
280 1.1 christos
281 1.1 christos # Valid value followed by garbage.
282 1.1 christos gdb_test "$set_cmd on 1" \
283 1.1 christos "\"on\" or \"off\" expected\\."
284 1.1 christos
285 1.1 christos # Unlike auto-bool settings, "-1" is not accepted.
286 1.1 christos gdb_test "$set_cmd -1" \
287 1.1 christos "\"on\" or \"off\" expected\\."
288 1.1 christos
289 1.1 christos # Nor "auto".
290 1.1 christos gdb_test "$set_cmd auto" \
291 1.1 christos "\"on\" or \"off\" expected\\."
292 1.1 christos
293 1.1 christos # "o" is ambiguous.
294 1.1 christos gdb_test "$set_cmd o" \
295 1.1 christos "\"on\" or \"off\" expected\\."
296 1.1 christos
297 1.1 christos # Various valid values. Test both full value names and
298 1.1 christos # abbreviations.
299 1.1 christos
300 1.1 christos # Note that unlike with auto-bool, empty value implies "on".
301 1.1 christos foreach_with_prefix value {
302 1.1 christos ""
303 1.1 christos "on"
304 1.1 christos "1"
305 1.1 christos "y"
306 1.1 christos "ye"
307 1.1 christos "yes"
308 1.1 christos "e"
309 1.1 christos "en"
310 1.1 christos "ena"
311 1.1 christos "enab"
312 1.1 christos "enabl"
313 1.1 christos "enable"
314 1.1 christos } {
315 1.1 christos gdb_test_no_output "$set_cmd off"
316 1.1 christos show_setting "$show_cmd" "off"
317 1.1 christos
318 1.1 christos gdb_test_no_output "$set_cmd $value"
319 1.1 christos show_setting "$show_cmd" "on"
320 1.1 christos }
321 1.1 christos
322 1.1 christos check_type "test-settings boolean" "type = int"
323 1.1 christos
324 1.1 christos foreach_with_prefix value {
325 1.1 christos "of"
326 1.1 christos "off"
327 1.1 christos "0"
328 1.1 christos "n"
329 1.1 christos "no"
330 1.1 christos "d"
331 1.1 christos "di"
332 1.1 christos "dis"
333 1.1 christos "disa"
334 1.1 christos "disab"
335 1.1 christos "disabl"
336 1.1 christos "disable"
337 1.1 christos } {
338 1.1 christos gdb_test_no_output "$set_cmd on"
339 1.1 christos show_setting "$show_cmd" "on"
340 1.1 christos
341 1.1 christos gdb_test_no_output "$set_cmd $value"
342 1.1 christos show_setting "$show_cmd" "off"
343 1.1 christos }
344 1.1 christos
345 1.1 christos test_gdb_complete_multiple "$set_cmd " "" "o" {
346 1.1 christos "off"
347 1.1 christos "on"
348 1.1 christos }
349 1.1 christos
350 1.1 christos test_gdb_complete_unique \
351 1.1 christos "$set_cmd of" \
352 1.1 christos "$set_cmd off"
353 1.1 christos
354 1.1 christos test_gdb_complete_none "$set_cmd x"
355 1.1 christos
356 1.1 christos # Check that the show command doesn't complete anything.
357 1.1 christos test_gdb_complete_unique \
358 1.1 christos "$show_cmd" \
359 1.1 christos "$show_cmd"
360 1.1 christos test_gdb_complete_none "$show_cmd "
361 1.1 christos }
362 1.1 christos
363 1.1 christos # auto-boolean tests.
364 1.1 christos proc_with_prefix test-auto-boolean {} {
365 1.1 christos # Use these variables to make sure we don't call the wrong command
366 1.1 christos # by mistake.
367 1.1 christos set set_cmd "maint set test-settings auto-boolean"
368 1.1 christos set show_cmd "maint show test-settings auto-boolean"
369 1.1 christos
370 1.1 christos # A bogus value.
371 1.1 christos gdb_test "$set_cmd bogus" \
372 1.1 christos "\"on\", \"off\" or \"auto\" expected\\."
373 1.1 christos
374 1.1 christos # Seemingly-valid but not quite valid value.
375 1.1 christos gdb_test "$set_cmd on1" \
376 1.1 christos "\"on\", \"off\" or \"auto\" expected\\."
377 1.1 christos
378 1.1 christos # Valid value followed by garbage.
379 1.1 christos gdb_test "$set_cmd on 1" \
380 1.1 christos "\"on\", \"off\" or \"auto\" expected\\."
381 1.1 christos
382 1.1 christos # "o" is ambiguous.
383 1.1 christos gdb_test "$set_cmd o" \
384 1.1 christos "\"on\", \"off\" or \"auto\" expected\\."
385 1.1 christos
386 1.1 christos # Various valid values. Test both full value names and
387 1.1 christos # abbreviations.
388 1.1 christos
389 1.1 christos foreach_with_prefix value {
390 1.1 christos "on"
391 1.1 christos "1"
392 1.1 christos "y"
393 1.1 christos "ye"
394 1.1 christos "yes"
395 1.1 christos "e"
396 1.1 christos "en"
397 1.1 christos "ena"
398 1.1 christos "enab"
399 1.1 christos "enabl"
400 1.1 christos "enable"
401 1.1 christos } {
402 1.1 christos gdb_test_no_output "$set_cmd off"
403 1.1 christos show_setting "$show_cmd" "off"
404 1.1 christos
405 1.1 christos gdb_test_no_output "$set_cmd $value"
406 1.1 christos show_setting "$show_cmd" "on"
407 1.1 christos }
408 1.1 christos
409 1.1 christos foreach_with_prefix value {
410 1.1 christos "of"
411 1.1 christos "off"
412 1.1 christos "0"
413 1.1 christos "n"
414 1.1 christos "no"
415 1.1 christos "d"
416 1.1 christos "di"
417 1.1 christos "dis"
418 1.1 christos "disa"
419 1.1 christos "disab"
420 1.1 christos "disabl"
421 1.1 christos "disable"
422 1.1 christos } {
423 1.1 christos gdb_test_no_output "$set_cmd on"
424 1.1 christos show_setting "$show_cmd" "on"
425 1.1 christos
426 1.1 christos gdb_test_no_output "$set_cmd $value"
427 1.1 christos show_setting "$show_cmd" "off"
428 1.1 christos }
429 1.1 christos
430 1.1 christos foreach_with_prefix value {
431 1.1 christos "a"
432 1.1 christos "au"
433 1.1 christos "aut"
434 1.1 christos "auto"
435 1.1 christos "-1"
436 1.1 christos } {
437 1.1 christos gdb_test_no_output "$set_cmd on"
438 1.1 christos show_setting "$show_cmd" "on"
439 1.1 christos
440 1.1 christos gdb_test_no_output "$set_cmd $value"
441 1.1 christos show_setting "$show_cmd" "auto"
442 1.1 christos }
443 1.1 christos
444 1.1 christos check_type "test-settings auto-boolean" "type = int"
445 1.1 christos
446 1.1 christos # "-" is not accepted as abbreviation of "-1".
447 1.1 christos gdb_test "$set_cmd -" \
448 1.1 christos "\"on\", \"off\" or \"auto\" expected\\."
449 1.1 christos
450 1.1 christos test_gdb_complete_multiple "$set_cmd " "" "" {
451 1.1 christos "auto"
452 1.1 christos "off"
453 1.1 christos "on"
454 1.1 christos }
455 1.1 christos
456 1.1 christos test_gdb_complete_unique \
457 1.1 christos "$set_cmd of" \
458 1.1 christos "$set_cmd off"
459 1.1 christos
460 1.1 christos test_gdb_complete_none "$set_cmd x"
461 1.1 christos
462 1.1 christos # Check that the show command doesn't complete anything.
463 1.1 christos test_gdb_complete_unique \
464 1.1 christos "$show_cmd" \
465 1.1 christos "$show_cmd"
466 1.1 christos test_gdb_complete_none "$show_cmd "
467 1.1 christos }
468 1.1 christos
469 1.1 christos # Enum option tests.
470 1.1 christos proc_with_prefix test-enum {} {
471 1.1 christos # Use these variables to make sure we don't call the wrong command
472 1.1 christos # by mistake.
473 1.1 christos set set_cmd "maint set test-settings enum"
474 1.1 christos set show_cmd "maint show test-settings enum"
475 1.1 christos
476 1.1 christos # Missing value.
477 1.1 christos gdb_test "$set_cmd" \
478 1.1 christos "Requires an argument\\. Valid arguments are xxx, yyy, zzz\\."
479 1.1 christos
480 1.1 christos # A bogus value.
481 1.1 christos gdb_test "$set_cmd bogus" \
482 1.1 christos "Undefined item: \"bogus\"."
483 1.1 christos
484 1.1 christos # Seemingly-valid but not quite valid value.
485 1.1 christos gdb_test "$set_cmd xxx1" \
486 1.1 christos "Undefined item: \"xxx1\"."
487 1.1 christos
488 1.1 christos # Valid value followed by garbage.
489 1.1 christos gdb_test "$set_cmd xxx 1" \
490 1.1 christos "Junk after item \"xxx\": 1"
491 1.1 christos # Valid value followed by garbage, with extra spaces.
492 1.1 christos gdb_test "$set_cmd xxx 1" \
493 1.1 christos "Junk after item \"xxx\": 1"
494 1.1 christos # Abbreviated value followed by garbage.
495 1.1 christos gdb_test "$set_cmd xx 1" \
496 1.1 christos "Junk after item \"xx\": 1"
497 1.1 christos
498 1.1 christos # Various valid values. Test both full value names and
499 1.1 christos # abbreviations.
500 1.1 christos gdb_test_no_output "$set_cmd x"
501 1.1 christos show_setting "$show_cmd" "xxx" 0 "zzz"
502 1.1 christos gdb_test_no_output "$set_cmd yy"
503 1.1 christos show_setting "$show_cmd" "yyy" 0 "zzz"
504 1.1 christos gdb_test_no_output "$set_cmd zzz"
505 1.1 christos show_setting "$show_cmd" "zzz" 0 "yyy"
506 1.1 christos
507 1.1.1.3 christos check_type "test-settings enum" "type = char \\\[4\\\]"
508 1.1 christos
509 1.1 christos test_gdb_complete_multiple "$set_cmd " "" "" {
510 1.1 christos "xxx"
511 1.1 christos "yyy"
512 1.1 christos "zzz"
513 1.1 christos }
514 1.1 christos
515 1.1 christos test_gdb_complete_unique \
516 1.1 christos "$set_cmd x" \
517 1.1 christos "$set_cmd xxx"
518 1.1 christos
519 1.1 christos test_gdb_complete_none "$set_cmd a"
520 1.1 christos
521 1.1 christos # Check that the show command doesn't complete anything.
522 1.1 christos test_gdb_complete_unique \
523 1.1 christos "$show_cmd" \
524 1.1 christos "$show_cmd"
525 1.1 christos test_gdb_complete_none "$show_cmd "
526 1.1 christos }
527 1.1 christos
528 1.1 christos # string settings tests.
529 1.1 christos proc test-string {variant} {
530 1.1 christos global gdb_prompt
531 1.1 christos global srcfile binfile
532 1.1 christos
533 1.1 christos # Load symbols for the completion test below.
534 1.1 christos clean_restart $binfile
535 1.1 christos
536 1.1 christos # Use these variables to make sure we don't call the wrong command
537 1.1 christos # by mistake.
538 1.1 christos set set_cmd "maint set test-settings $variant"
539 1.1 christos set show_cmd "maint show test-settings $variant"
540 1.1 christos
541 1.1 christos # Checks that gdb doesn't crash if we haven't set the string yet.
542 1.1 christos if {$variant != "filename"} {
543 1.1.1.3 christos # This odd expected output here is because we expect GDB to
544 1.1.1.3 christos # emit a single blank line as a result of this command.
545 1.1.1.3 christos gdb_test -nonl "$show_cmd" "^\r\n" "$show_cmd: show default"
546 1.1 christos } else {
547 1.1 christos gdb_test "$show_cmd" "/foo/bar" "$show_cmd: show default"
548 1.1 christos }
549 1.1 christos
550 1.1 christos # A string value.
551 1.1 christos gdb_test_no_output "$set_cmd hello world"
552 1.1 christos show_setting "$show_cmd" "hello world"
553 1.1 christos
554 1.1 christos check_type "test-settings $variant" "type = char \\\[\[1-9\]\[0-9\]*\\\]"
555 1.1 christos
556 1.1 christos # A quoted string value.
557 1.1 christos if {$variant == "string"} {
558 1.1 christos gdb_test_no_output "$set_cmd \"hello world\""
559 1.1 christos show_setting "$show_cmd" "\\\\\"hello world\\\\\"" 1
560 1.1 christos } else {
561 1.1 christos gdb_test_no_output "$set_cmd \"hello world\""
562 1.1 christos show_setting "$show_cmd" "\"hello world\""
563 1.1 christos }
564 1.1 christos
565 1.1 christos # Test clearing the string.
566 1.1 christos with_test_prefix "clear string" {
567 1.1 christos if {$variant == "filename"} {
568 1.1 christos gdb_test "$set_cmd" \
569 1.1 christos "Argument required \\(filename to set it to\\.\\)\\."
570 1.1 christos
571 1.1 christos # Check the value didn't change.
572 1.1 christos show_setting "$show_cmd" "\"hello world\""
573 1.1 christos } else {
574 1.1 christos gdb_test_no_output "$set_cmd"
575 1.1.1.3 christos # This odd expected output here is because we expect GDB to
576 1.1.1.3 christos # emit a single blank line as a result of this command.
577 1.1.1.3 christos gdb_test -nonl "$show_cmd" "^\r\n" "$show_cmd: empty second time"
578 1.1 christos }
579 1.1 christos }
580 1.1 christos
581 1.1 christos # Test completion.
582 1.1 christos if {$variant == "string" || $variant == "string-noescape" } {
583 1.1 christos # Make sure GDB doesn't try to complete on symbols, which
584 1.1 christos # doesn't make any sense.
585 1.1 christos test_gdb_complete_none "$set_cmd "
586 1.1 christos } else {
587 1.1 christos # Complete on filename.
588 1.1 christos
589 1.1 christos # See comments in gdb.base/completion.exp.
590 1.1 christos
591 1.1 christos # We `cd' to ${srcdir}, and then do the completion relative to
592 1.1 christos # the current directory.
593 1.1 christos
594 1.1 christos # ${srcdir} may be a relative path. We want to make sure we
595 1.1 christos # end up in the right directory - so make sure we know where
596 1.1 christos # it is.
597 1.1.1.2 christos with_cwd $::srcdir {
598 1.1.1.2 christos set fullsrcdir [pwd]
599 1.1.1.2 christos }
600 1.1 christos
601 1.1 christos gdb_test "cd ${fullsrcdir}" \
602 1.1 christos "Working directory [string_to_regexp ${fullsrcdir}].*" \
603 1.1 christos "cd to \${srcdir}"
604 1.1 christos
605 1.1 christos set unique_file ../testsuite/gdb.base/comp-dir/subdir/dummy
606 1.1 christos
607 1.1 christos test_gdb_complete_unique \
608 1.1 christos "$set_cmd ${unique_file}" \
609 1.1 christos "$set_cmd ${unique_file}.txt"
610 1.1 christos
611 1.1 christos test_gdb_complete_none "$set_cmd ${unique_file}.abc"
612 1.1 christos }
613 1.1 christos
614 1.1 christos # Check show command completion.
615 1.1 christos if {$variant == "string"} {
616 1.1 christos test_gdb_complete_multiple "maint show test-settings " "string" "" {
617 1.1 christos "string"
618 1.1 christos "string-noescape"
619 1.1 christos }
620 1.1 christos } else {
621 1.1 christos test_gdb_complete_unique \
622 1.1 christos "$show_cmd" \
623 1.1 christos "$show_cmd"
624 1.1 christos }
625 1.1 christos test_gdb_complete_none "$show_cmd "
626 1.1 christos }
627 1.1 christos
628 1.1.1.3 christos # Check that $_gdb_setting & co report the correct error strings.
629 1.1.1.3 christos proc test-setting-error {} {
630 1.1.1.3 christos gdb_test {print $_gdb_setting("xxx")} \
631 1.1.1.3 christos "First argument of \\\$_gdb_setting must be a valid setting of the 'show' command\\."
632 1.1.1.3 christos gdb_test {print $_gdb_setting_str("xxx")} \
633 1.1.1.3 christos "First argument of \\\$_gdb_setting_str must be a valid setting of the 'show' command\\."
634 1.1.1.3 christos
635 1.1.1.3 christos gdb_test {print $_gdb_maint_setting("xxx")} \
636 1.1.1.3 christos "First argument of \\\$_gdb_maint_setting must be a valid setting of the 'maintenance show' command\\."
637 1.1.1.3 christos gdb_test {print $_gdb_maint_setting_str("xxx")} \
638 1.1.1.3 christos "First argument of \\\$_gdb_maint_setting_str must be a valid setting of the 'maintenance show' command\\."
639 1.1.1.3 christos }
640 1.1.1.3 christos
641 1.1 christos foreach variant {
642 1.1 christos uinteger
643 1.1 christos integer
644 1.1 christos zinteger
645 1.1 christos zuinteger
646 1.1 christos zuinteger-unlimited
647 1.1 christos } {
648 1.1 christos with_test_prefix "test-integer $variant" {
649 1.1 christos test-integer $variant
650 1.1 christos }
651 1.1 christos }
652 1.1 christos
653 1.1 christos test-boolean
654 1.1 christos test-auto-boolean
655 1.1 christos test-enum
656 1.1 christos
657 1.1 christos foreach variant {
658 1.1 christos string
659 1.1 christos string-noescape
660 1.1 christos optional-filename
661 1.1 christos filename
662 1.1 christos } {
663 1.1 christos with_test_prefix "test-string $variant" {
664 1.1 christos test-string $variant
665 1.1 christos }
666 1.1 christos }
667 1.1.1.3 christos
668 1.1.1.3 christos test-setting-error
669