1 # This testcase is part of GDB, the GNU debugger.
3 # Copyright 2019-2021 Free Software Foundation, Inc.
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.
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.
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/>.
18 # Test the gdb::option framework.
20 # The test uses the "maintenance test-options" subcommands to exercise
21 # TAB-completion and option processing.
23 # It also tests option integration in various commands, including:
34 load_lib completion-support.exp
38 if {[build_executable "failed to prepare" $testfile $srcfile debug]} {
44 if { ![readline_is_used] } {
45 untested "no tab completion support without readline"
49 # Check the completion result, as returned by the "maintenance show
50 # test-options-completion-result" command. TEST is used as test name.
51 proc check_completion_result {expected test} {
52 gdb_test "maintenance show test-options-completion-result" \
54 "$test: res=$expected"
57 # Like test_gdb_complete_unique, but the expected output is expected
58 # to be the input line. I.e., the line is already complete. We're
59 # just checking whether GDB recognizes the option and auto-appends a
61 proc test_completer_recognizes {res input_line} {
62 set expected_re [string_to_regexp $input_line]
63 test_gdb_complete_unique $input_line $expected_re
64 check_completion_result $res $input_line
67 # Wrapper around test_gdb_complete_multiple that also checks the
68 # completion result is RES.
69 proc res_test_gdb_complete_multiple {res cmd_prefix completion_word args} {
70 test_gdb_complete_multiple $cmd_prefix $completion_word {*}$args
71 check_completion_result $res "$cmd_prefix$completion_word"
74 # Wrapper around test_gdb_complete_none that also checks the
75 # completion result is RES.
76 proc res_test_gdb_complete_none { res input_line } {
77 test_gdb_complete_none $input_line
78 check_completion_result $res "$input_line"
81 # Wrapper around test_gdb_complete_unique that also checks the
82 # completion result is RES.
83 proc res_test_gdb_complete_unique { res input_line args} {
84 test_gdb_complete_unique $input_line {*}$args
85 check_completion_result $res "$input_line"
88 # Make a full command name from VARIANT. VARIANT is either
89 # "require-delimiter", "unknown-is-error" or "unknown-is-operand".
90 proc make_cmd {variant} {
91 return "maint test-options $variant"
94 # Return a string for the expected result of running "maint
95 # test-options xxx", with no flag/option set. OPERAND is the expected
97 proc expect_none {operand} {
98 return "-flag 0 -xx1 0 -xx2 0 -bool 0 -enum xxx -uint 0 -zuint-unl 0 -string '' -- $operand"
101 # Return a string for the expected result of running "maint
102 # test-options xxx", with -flag set. OPERAND is the expected operand.
103 proc expect_flag {operand} {
104 return "-flag 1 -xx1 0 -xx2 0 -bool 0 -enum xxx -uint 0 -zuint-unl 0 -string '' -- $operand"
107 # Return a string for the expected result of running "maint
108 # test-options xxx", with -bool set. OPERAND is the expected operand.
109 proc expect_bool {operand} {
110 return "-flag 0 -xx1 0 -xx2 0 -bool 1 -enum xxx -uint 0 -zuint-unl 0 -string '' -- $operand"
113 # Return a string for the expected result of running "maint
114 # test-options xxx", with one of the integer options set to $VAL.
115 # OPTION determines which option to expect set. OPERAND is the
117 proc expect_integer {option val operand} {
118 if {$option == "uinteger"} {
119 return "-flag 0 -xx1 0 -xx2 0 -bool 0 -enum xxx -uint $val -zuint-unl 0 -string '' -- $operand"
120 } elseif {$option == "zuinteger-unlimited"} {
121 return "-flag 0 -xx1 0 -xx2 0 -bool 0 -enum xxx -uint 0 -zuint-unl $val -string '' -- $operand"
123 error "unsupported option: $option"
127 # Return a string for the expected result of running "maint
128 # test-options xxx", with -string set to $STR. OPERAND is the
130 proc expect_string {str operand} {
131 # Dequote the string in the expected output.
132 if { ( [string range $str 0 0] == "\""
133 && [string range $str end end] == "\"")
134 || ([string range $str 0 0] == "'"
135 && [string range $str end end] == "'")} {
136 set str [string range $str 1 end-1]
138 return "-flag 0 -xx1 0 -xx2 0 -bool 0 -enum xxx -uint 0 -zuint-unl 0 -string '$str' -- $operand"
149 "-zuinteger-unlimited"
152 # Basic option-machinery + "print" command integration tests.
153 proc_with_prefix test-print {{prefix ""}} {
156 # Completing "print" with no argument completes on symbols only,
157 # no options are offered. Since we haven't loaded any symbols,
158 # the match list should be empty.
159 test_gdb_complete_none "${prefix}print "
161 # OTOH, completing at "-" should list all options.
162 test_gdb_complete_multiple "${prefix}print " "-" "" {
168 "-memory-tag-violations"
181 clean_restart $binfile
184 fail "cannot run to main"
188 # Mix options and format.
189 gdb_test "${prefix}print -pretty -- /x 1" " = 0x1"
191 # Smoke test that options actually work.
192 gdb_test "${prefix}print -pretty -- g_s" \
200 test_gdb_complete_unique \
201 "${prefix}print xxx" \
202 "${prefix}print xxx1"
203 test_gdb_complete_unique \
204 "${prefix}print -- xxx" \
205 "${prefix}print -- xxx1"
207 # Error messages when testing with "compile" are different from
208 # the error messages gdb's internal parser throws. This procedure
209 # hides the difference. EXPECTED_RE is only considered when not
210 # testing with "compile".
211 proc test_invalid_expression {cmd expected_re} {
214 if {$prefix != "compile "} {
215 gdb_test $cmd $expected_re
217 # Error messages depend on compiler version, so we just
218 # look for the last line indicating a failure.
219 gdb_test $cmd "Compilation failed\\."
223 # Check that '-XXX' without a "--" is handled as an
225 gdb_test "${prefix}print -1" " = -1"
226 test_invalid_expression \
227 "${prefix}print --1" \
228 "Left operand of assignment is not an lvalue\\."
229 test_invalid_expression \
230 "${prefix}print -object" \
231 "No symbol \"object\".*"
233 # Test printing with options and no expression.
234 set test "${prefix}print -object --"
235 if {$prefix != "compile "} {
236 # Regular "print" repeats the last history value.
237 gdb_test $test " = -1"
239 # "compile print" starts a multiline expression.
240 gdb_test_multiple $test $test {
242 gdb_test "-1\nend" " = -1" \
248 # Check that everything after "-- " is treated as an
249 # expression, not confused with an option.
250 test_invalid_expression \
251 "${prefix}print -- -address" \
253 gdb_test "${prefix}print -- -1" " = -1"
254 test_invalid_expression \
255 "${prefix}print -- --1" \
256 "Left operand of assignment is not an lvalue\\."
259 # Basic option-machinery + "backtrace" command integration tests.
260 proc_with_prefix test-backtrace {} {
263 test_gdb_complete_unique "backtrace" "backtrace"
264 test_gdb_complete_none "backtrace "
266 gdb_test "backtrace -" "Ambiguous option at: -"
267 gdb_test "backtrace --" "No stack\\."
268 gdb_test "backtrace -- -" "No stack\\."
270 test_gdb_complete_multiple "backtrace " "-" "" {
279 "-raw-frame-arguments"
282 # Test that we complete the qualifiers, if there's any.
283 test_gdb_complete_unique \
286 test_gdb_complete_unique \
289 test_gdb_complete_unique \
291 "backtrace no-filters"
294 clean_restart $binfile
297 fail "cannot run to main"
301 # COUNT in "backtrace COUNT" is parsed as an expression. Check
302 # that we complete expressions.
304 test_gdb_complete_unique \
308 test_gdb_complete_unique \
312 test_gdb_complete_unique \
313 "backtrace 1 + xxx" \
316 test_gdb_complete_unique \
317 "backtrace (1 + xxx" \
318 "backtrace (1 + xxx1"
321 # Basic option-machinery + "frame apply" command integration tests.
322 proc_with_prefix test-frame-apply {} {
323 test_gdb_complete_unique "frame apply all" "frame apply all"
325 gdb_test "frame apply level 0-" \
326 "Please specify a command to apply on the selected frames"
327 test_gdb_complete_none "frame apply level 0-"
332 "frame apply level 0"
336 test_gdb_completion_offers_commands "$cmd "
338 # tfaas is silent on command error by design. This procedure
339 # hides that aspect. EXPECTED_RE is only considered when not
340 # testing with "faas"/"tfaas".
341 proc test_error_cmd {cmd arg expected_re} {
342 if {$cmd == "tfaas"} {
343 gdb_test_no_output "$cmd$arg"
345 gdb_test "$cmd$arg" $expected_re
348 # Same, but for tests where both "faas" and "tfaas" are
349 # expected to be silent.
350 proc test_error_cmd2 {cmd arg expected_re} {
351 if {$cmd == "tfaas" || $cmd == "faas"} {
352 gdb_test_no_output "$cmd$arg"
354 gdb_test "$cmd$arg" $expected_re
358 test_error_cmd $cmd " -" "Ambiguous option at: -"
359 test_gdb_complete_multiple "$cmd " "-" "" {
367 with_test_prefix "no-trailing-space" {
368 test_error_cmd $cmd " --" \
369 "Please specify a command to apply on the selected frames"
370 test_gdb_complete_unique "$cmd --" "$cmd --"
373 with_test_prefix "trailing-space" {
374 test_error_cmd $cmd " -- " \
375 "Please specify a command to apply on the selected frames"
376 test_gdb_completion_offers_commands "$cmd -- "
379 # '-' is a valid TUI command.
380 test_error_cmd2 $cmd " -- -" \
381 "Cannot enable the TUI when output is not a terminal"
382 test_gdb_complete_unique \
386 test_error_cmd2 $cmd " -foo" \
387 "Undefined command: \"-foo\". Try \"help\"\\."
388 test_gdb_complete_none "$cmd -foo"
390 test_gdb_completion_offers_commands "$cmd -s "
394 # Basic option-machinery + "thread apply" command integration tests.
395 proc_with_prefix test-thread-apply {} {
397 test_gdb_complete_unique "thread apply all" "thread apply all"
398 test_gdb_complete_unique "taas" "taas"
400 gdb_test "thread apply 1-" \
402 test_gdb_complete_none "frame apply level 1-"
409 test_gdb_completion_offers_commands "$cmd "
411 # taas is silent on command error by design. This procedure
412 # hides the difference. EXPECTED_RE is only considered when
413 # not testing with "taas".
414 proc test_invalid_cmd {cmd arg expected_re} {
415 if {$cmd != "taas"} {
416 gdb_test "$cmd$arg" $expected_re
418 gdb_test_no_output "$cmd$arg"
422 gdb_test "$cmd -" "Ambiguous option at: -"
424 if {$cmd != "thread apply 1"} {
425 test_gdb_complete_multiple "$cmd " "-" "" {
432 # "-ascending" only works with "all".
433 test_gdb_complete_multiple "$cmd " "-" "" {
440 if {$cmd == "thread apply all" || $cmd == "taas"} {
442 "Please specify a command at the end of 'thread apply all'"
443 } elseif {$cmd == "thread apply 1"} {
445 "Please specify a command following the thread ID list"
447 error "unexpected cmd: $cmd"
450 with_test_prefix "no-trailing-space" {
451 gdb_test "$cmd --" $errmsg
452 test_gdb_complete_unique "$cmd --" "$cmd --"
455 with_test_prefix "trailing-space" {
456 gdb_test "$cmd -- " $errmsg
457 test_gdb_completion_offers_commands "$cmd -- "
460 # '-' is a valid TUI command.
461 test_invalid_cmd "$cmd" " -- -" \
462 "Cannot enable the TUI when output is not a terminal"
463 test_gdb_complete_unique \
467 test_invalid_cmd $cmd " -foo" \
468 "Undefined command: \"-foo\". Try \"help\"\\."
469 test_gdb_complete_none "$cmd -foo"
471 test_gdb_completion_offers_commands "$cmd -c "
475 # Basic option-machinery + "info threads" command integration tests.
476 proc_with_prefix test-info-threads {} {
477 test_gdb_complete_multiple "info threads " "" "" {
482 test_gdb_complete_unique \
486 # "ID" isn't really something the user can type.
487 test_gdb_complete_none "info threads I"
490 # Miscellaneous tests.
491 proc_with_prefix test-misc {variant} {
494 set cmd [make_cmd $variant]
496 # Call test command with no arguments at all.
497 gdb_test "$cmd" [expect_none ""]
499 # Now with a single dash.
500 if {$variant == "require-delimiter"} {
501 gdb_test "$cmd -" [expect_none "-"]
503 gdb_test "$cmd -" "Ambiguous option at: -"
506 # Completing at "-" should list all options.
507 res_test_gdb_complete_multiple \
508 "1 [expect_none "-"]" \
509 "$cmd " "-" "" $all_options
511 # Now with a double dash.
512 gdb_test "$cmd --" [expect_none ""]
514 # "--" is recognized by options completer, gdb auto-appends a
516 test_completer_recognizes \
517 "1 [expect_none "--"]" \
520 # Now with a double dash, plus a dash as operand.
521 gdb_test "$cmd -- -" [expect_none "-"]
522 res_test_gdb_complete_none "0 -" "$cmd -- -"
524 # Completing an unambiguous option just appends an empty space.
525 test_completer_recognizes \
526 "1 [expect_none "-flag"]" \
529 # Try running an ambiguous option.
530 if {$variant == "require-delimiter"} {
531 gdb_test "$cmd -xx" [expect_none "-xx"]
533 gdb_test "$cmd -xx" "Ambiguous option at: -xx"
536 # Check that options are not case insensitive.
537 gdb_test "$cmd -flag --" [expect_flag ""]
539 # Check how the different modes behave on unknown option, with a
541 gdb_test "$cmd -FLAG --" \
542 "Unrecognized option at: -FLAG --"
544 # Check how the different modes behave on unknown option, without
546 if {$variant == "unknown-is-error"} {
547 gdb_test "$cmd -FLAG" \
548 "Unrecognized option at: -FLAG"
550 gdb_test "$cmd -FLAG" [expect_none "-FLAG"]
553 # Test parsing stops at a negative integer.
554 gdb_test "$cmd -1 --" \
555 "Unrecognized option at: -1 --"
556 gdb_test "$cmd -2 --" \
557 "Unrecognized option at: -2 --"
561 proc_with_prefix test-flag {variant} {
564 set cmd [make_cmd $variant]
566 # Completing a flag just appends a space.
567 test_completer_recognizes \
568 "1 [expect_none "-flag"]" \
571 # Add a dash, and all options should be shown.
572 res_test_gdb_complete_multiple \
573 "1 [expect_flag "-"]" \
574 "$cmd -flag " "-" "" $all_options
576 # Basic smoke tests of accepted / not accepted values.
578 # Check all the different variants a bool option may be specified.
579 if {$variant == "require-delimiter"} {
580 gdb_test "$cmd -flag 999" [expect_none "-flag 999"]
582 gdb_test "$cmd -flag 999" [expect_flag "999"]
584 gdb_test "$cmd -flag -- 999" [expect_flag "999"]
586 # If the "--" separator is present, then GDB errors out if the
587 # flag option is passed some value -- check that too.
588 gdb_test "$cmd -flag xxx 999 --" "Unrecognized option at: xxx 999 --"
589 gdb_test "$cmd -flag o 999 --" "Unrecognized option at: o 999 --"
590 gdb_test "$cmd -flag 1 999 --" "Unrecognized option at: 1 999 --"
592 # Extract twice the same flag, separated by one space.
593 gdb_test "$cmd -flag -flag -- non flags args" \
594 [expect_flag "non flags args"]
596 # Extract twice the same flag, separated by one space.
597 gdb_test "$cmd -xx1 -xx2 -xx1 -xx2 -xx1 -- non flags args" \
598 "-flag 0 -xx1 1 -xx2 1 -bool 0 -enum xxx -uint 0 -zuint-unl 0 -string '' -- non flags args"
600 # Extract 2 known flags in front of unknown flags.
601 gdb_test "$cmd -xx1 -xx2 -a -b -c -xx1 --" \
602 "Unrecognized option at: -a -b -c -xx1 --"
604 # Check that combined flags are not recognised.
605 gdb_test "$cmd -xx1 -xx1xx2 -xx1 --" \
606 "Unrecognized option at: -xx1xx2 -xx1 --"
608 # Make sure the completer don't confuse a flag option with a
609 # boolean option. Specifically, "o" should not complete to
612 if {$variant == "require-delimiter"} {
613 res_test_gdb_complete_none \
614 "1 [expect_flag "o"]" \
617 gdb_test "$cmd -flag o" [expect_none "-flag o"]
619 res_test_gdb_complete_none "0 o" "$cmd -flag o"
621 gdb_test "$cmd -flag o" [expect_flag "o"]
625 # Boolean option tests.
626 proc_with_prefix test-boolean {variant} {
629 set cmd [make_cmd $variant]
631 # Boolean option's values are optional -- "on" is implied. Check
634 # - For require-delimiter commands, completing after a boolean
635 # option lists all other options, plus "on/off". This is
636 # because operands won't be processed until we see a "--"
639 # - For !require-delimiter commands, completing after a boolean
640 # option completes as an operand, since that will tend to be
641 # more common than typing "on/off".
642 # E.g., "frame apply all -past-main COMMAND".
644 if {$variant == "require-delimiter"} {
645 set match_list $all_options
646 lappend match_list "off" "on"
647 res_test_gdb_complete_multiple \
648 "1 [expect_none ""]" \
649 "$cmd -bool " "" "" $match_list
651 res_test_gdb_complete_none "0 " "$cmd -bool "
654 # Add another dash, and "on/off" are no longer offered:
655 res_test_gdb_complete_multiple \
656 "1 [expect_bool "-"]" \
657 "$cmd -bool " "-" "" $all_options
659 # Basic smoke tests of accepted / not accepted values.
661 # The command accepts all of "1/0/enable/disable/yes/no" too, even
662 # though like the "set" command, we don't offer those as
663 # completion candidates if you complete right after the boolean
664 # command's name, like:
666 # (gdb) maint test-options require-delimiter -bool [TAB]
669 # However, the completer does recognize them if you start typing
671 foreach value {"0" "1"} {
672 test_completer_recognizes \
673 "1 [expect_none ""]" \
676 foreach value {"of" "off"} {
677 res_test_gdb_complete_unique \
678 "1 [expect_none ""]" \
679 "$cmd -bool $value" \
682 foreach value {"y" "ye" "yes"} {
683 res_test_gdb_complete_unique \
684 "1 [expect_none ""]" \
685 "$cmd -bool $value" \
688 foreach value {"n" "no"} {
689 res_test_gdb_complete_unique \
690 "1 [expect_none ""]" \
691 "$cmd -bool $value" \
702 res_test_gdb_complete_unique \
703 "1 [expect_none ""]" \
704 "$cmd -bool $value" \
716 res_test_gdb_complete_unique \
717 "1 [expect_none ""]" \
718 "$cmd -bool $value" \
722 if {$variant == "require-delimiter"} {
723 res_test_gdb_complete_none \
724 "1 [expect_none "xxx"]" \
727 res_test_gdb_complete_none "0 xxx" "$cmd -bool xxx"
730 # The command accepts abbreviations of "enable/disable/yes/no",
731 # even though we don't offer those for completion.
741 gdb_test "$cmd -bool $value --" [expect_bool ""]
754 gdb_test "$cmd -bool $value --" [expect_none ""]
757 if {$variant == "require-delimiter"} {
758 gdb_test "$cmd -bool 999" [expect_none "-bool 999"]
760 gdb_test "$cmd -bool 999" [expect_bool "999"]
762 gdb_test "$cmd -bool -- 999" [expect_bool "999"]
764 # Since "on" is implied after a boolean option, for
765 # !require-delimiter commands, anything that is not
766 # yes/no/1/0/on/off/enable/disable should be considered as the raw
767 # input after the last option. Also check "o", which might look
768 # like "on" or "off", but it's treated the same.
770 foreach arg {"xxx" "o"} {
771 if {$variant == "require-delimiter"} {
772 gdb_test "$cmd -bool $arg" [expect_none "-bool $arg"]
774 gdb_test "$cmd -bool $arg" [expect_bool "$arg"]
777 # Also try -1. "unknown-is-error" commands error out saying that
778 # that's not a valid option.
779 if {$variant == "require-delimiter"} {
780 gdb_test "$cmd -bool -1" \
781 [expect_none "-bool -1"]
782 } elseif {$variant == "unknown-is-error"} {
783 gdb_test "$cmd -bool -1" \
784 "Unrecognized option at: -1"
786 gdb_test "$cmd -bool -1" [expect_bool "-1"]
789 # OTOH, if the "--" separator is present, then GDB errors out if
790 # the boolean option is passed an invalid value -- check that too.
791 gdb_test "$cmd -bool -1 999 --" \
792 "Unrecognized option at: -1 999 --"
793 gdb_test "$cmd -bool xxx 999 --" \
794 "Value given for `-bool' is not a boolean: xxx"
795 gdb_test "$cmd -bool o 999 --" \
796 "Value given for `-bool' is not a boolean: o"
798 # Completing after a boolean option + "o" does list "on/off",
800 if {$variant == "require-delimiter"} {
801 res_test_gdb_complete_multiple \
802 "1 [expect_none "o"]" \
803 "$cmd -bool " "o" "" {
808 res_test_gdb_complete_multiple "0 o" "$cmd -bool " "o" "" {
815 # Uinteger option tests. OPTION is which integer option we're
816 # testing. Can be "uinteger" or "zuinteger-unlimited".
817 proc_with_prefix test-uinteger {variant option} {
820 set cmd "[make_cmd $variant] -$option"
822 # Test completing a uinteger option:
823 res_test_gdb_complete_multiple \
824 "1 [expect_none ""]" \
830 # NUMBER above is just a placeholder, make sure we don't complete
831 # it as a valid option.
832 res_test_gdb_complete_none \
833 "1 [expect_none "NU"]" \
836 # "unlimited" is valid though.
837 res_test_gdb_complete_unique \
838 "1 [expect_none "u"]" \
842 # Basic smoke test of accepted / not accepted values.
843 gdb_test "$cmd 1 -- 999" [expect_integer $option "1" "999"]
844 gdb_test "$cmd unlimited -- 999" \
845 [expect_integer $option "unlimited" "999"]
846 if {$option == "zuinteger-unlimited"} {
847 gdb_test "$cmd -1 --" [expect_integer $option "unlimited" ""]
848 gdb_test "$cmd 0 --" [expect_integer $option "0" ""]
850 gdb_test "$cmd -1 --" "integer -1 out of range"
851 gdb_test "$cmd 0 --" [expect_integer $option "unlimited" ""]
853 gdb_test "$cmd xxx --" \
854 "Expected integer at: xxx --"
855 gdb_test "$cmd unlimitedx --" \
856 "Expected integer at: unlimitedx --"
858 # Don't offer completions until we're past the
859 # -uinteger/-zuinteger-unlimited argument.
860 res_test_gdb_complete_none \
861 "1 [expect_none ""]" \
864 # A number of invalid values.
865 foreach value {"x" "x " "1a" "1a " "1-" "1- " "unlimitedx"} {
866 res_test_gdb_complete_none \
867 "1 [expect_none $value]" \
872 if {$option == "uinteger"} {
873 # -1 is invalid uinteger.
874 foreach value {"-1" "-1 "} {
875 res_test_gdb_complete_none \
876 "1 [expect_none ""]" \
880 # -1 is valid for zuinteger-unlimited.
881 res_test_gdb_complete_none \
882 "1 [expect_none ""]" \
884 if {$variant == "require-delimiter"} {
885 res_test_gdb_complete_multiple \
886 "1 [expect_integer $option "unlimited" ""]" \
887 "$cmd -1 " "" "-" $all_options
889 res_test_gdb_complete_none "0 " "$cmd -1 "
893 # Check that after a fully parsed option:
895 # - for require-delimiter commands, completion offers all
898 # - for !require-delimiter commands, completion offers nothing
900 if {$variant == "require-delimiter"} {
901 res_test_gdb_complete_multiple \
902 "1 [expect_integer $option 1 ""]" \
903 "$cmd 1 " "" "-" $all_options
905 res_test_gdb_complete_none "0 " "$cmd 1 "
908 # Test completing non-option arguments after "-uinteger 1 ".
909 foreach operand {"x" "x " "1a" "1a " "1-" "1- "} {
910 if {$variant == "require-delimiter"} {
911 res_test_gdb_complete_none \
912 "1 [expect_integer $option 1 $operand]" \
915 res_test_gdb_complete_none "0 $operand" "$cmd 1 $operand"
918 # These look like options, but they aren't.
919 foreach operand {"-1" "-1 "} {
920 if {$variant == "unknown-is-operand"} {
921 res_test_gdb_complete_none "0 $operand" "$cmd 1 $operand"
923 res_test_gdb_complete_none \
924 "1 [expect_integer $option 1 $operand]" \
931 proc_with_prefix test-enum {variant} {
932 set cmd [make_cmd $variant]
934 res_test_gdb_complete_multiple \
935 "1 [expect_none ""]" \
936 "$cmd -enum " "" "" {
942 # Check that "-" where a value is expected does not show the
943 # command's options. I.e., an enum's value is not optional.
944 # Check both completion and running the command.
945 res_test_gdb_complete_none \
946 "1 [expect_none "-"]" \
948 gdb_test "$cmd -enum --"\
949 "Requires an argument. Valid arguments are xxx, yyy, zzz\\."
951 # Try passing an undefined item to an enum option.
952 gdb_test "$cmd -enum www --" "Undefined item: \"www\"."
955 # String option tests.
956 proc_with_prefix test-string {variant} {
959 set cmd [make_cmd $variant]
961 res_test_gdb_complete_none \
962 "1 [expect_none ""]" \
965 # Check that "-" where a value is expected does not show the
966 # command's options. I.e., a string's value is not optional.
967 # Check both completion and running the command.
968 res_test_gdb_complete_none \
969 "1 [expect_none ""]" \
971 gdb_test "$cmd -string --"\
972 "-string requires an argument"
973 if {$variant == "require-delimiter"} {
974 gdb_test "$cmd -string" [expect_none "-string"]
976 gdb_test "$cmd -string"\
977 "-string requires an argument"
980 foreach_with_prefix str {
990 "\"STR \\\"GGG\\\" HHH\""
991 "'STR \\\'III\\\' JJJ'"
993 res_test_gdb_complete_none \
994 "1 [expect_none ""]" \
995 "$cmd -string ${str}"
996 gdb_test "$cmd -string ${str} --" [expect_string "${str}" ""]
998 # Completing at "-" after parsing STR should list all options.
999 res_test_gdb_complete_multiple \
1000 "1 [expect_string "${str}" "-"]" \
1001 "$cmd -string ${str} " "-" "" $all_options
1003 # Check that only $STR is considered part of the string's value.
1004 # I.e., that we stop parsing the string at the first
1005 # whitespace or after the closing quote of $STR.
1006 if {$variant == "require-delimiter"} {
1007 res_test_gdb_complete_none \
1008 "1 [expect_string "${str}" "BAR"]" \
1009 "$cmd -string ${str} BAR"
1011 res_test_gdb_complete_none "0 BAR" "$cmd -string ${str} BAR"
1013 gdb_test "$cmd -string ${str} BAR --" "Unrecognized option at: BAR --"
1017 # Run the options framework tests first.
1018 foreach_with_prefix cmd {
1021 "unknown-is-operand"
1026 foreach subcmd {"uinteger" "zuinteger-unlimited" } {
1027 test-uinteger $cmd $subcmd
1033 # Run the print integration tests, both as "standalone", and under
1034 # "frame/thread apply". The latter checks that the "frame/thread
1035 # apply ... COMMAND" commands recurse the completion machinery for
1036 # COMMAND completion correctly.
1041 "frame apply level 0 "
1044 "thread apply 1 frame apply 1 "
1049 # Same for "compile print". Not really a wrapper prefix command like
1050 # "frame apply", but similar enough that we test pretty much the same
1052 if ![skip_compile_feature_tests] {
1053 test-print "compile "
1056 # Basic "backtrace" integration tests.
1059 # Basic "frame apply" integration tests.
1062 # Basic "thread apply" integration tests.
1065 # Basic "info threads" integration tests.