mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
291 lines
9.2 KiB
Plaintext
291 lines
9.2 KiB
Plaintext
# This testcase is part of GDB, the GNU debugger.
|
|
|
|
# Copyright 2019-2022 Free Software Foundation, Inc.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Test the "with" command.
|
|
|
|
load_lib completion-support.exp
|
|
|
|
standard_testfile .c
|
|
|
|
if {[build_executable "failed to prepare" $testfile $srcfile debug]} {
|
|
return -1
|
|
}
|
|
|
|
clean_restart $binfile
|
|
|
|
# Test "maint with". VALUES is a list of values. A nested "with" is
|
|
# performed with each combination of pair of values from this list.
|
|
# This exercises setting a value, and restoring it too. This is
|
|
# particularly important for the "special" values like "unlimited",
|
|
# which for example for var_uinteger maps to 0 at the user-visible
|
|
# level, but maps to -1 internally.
|
|
|
|
proc test_with {setting values} {
|
|
foreach val1 $values {
|
|
foreach val2 $values {
|
|
gdb_test \
|
|
"maint with test-settings $setting $val1 -- maint with test-settings $setting $val2 -- p 1" \
|
|
" = 1"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Test "maint with" in the error case. SETTING is the "maint set
|
|
# test-setting" setting to exercise. TMP_VAL is the value to set the
|
|
# setting to. EXPECTED_RE is the expected GDB output, which should be
|
|
# an error of some kind. Also checks that the setting's original
|
|
# value is preserved across the error.
|
|
|
|
proc test_with_error {setting tmp_val expected_re} {
|
|
global gdb_prompt
|
|
|
|
with_test_prefix "$setting, $tmp_val" {
|
|
set test "save org value"
|
|
set org_val ""
|
|
gdb_test_multiple "maint show test-settings $setting" $test {
|
|
-re "(.*)\r\n$gdb_prompt $" {
|
|
set org_val $expect_out(1,string)
|
|
pass $test
|
|
}
|
|
}
|
|
|
|
gdb_test \
|
|
"maint with test-settings $setting $tmp_val -- p 1" \
|
|
$expected_re
|
|
|
|
gdb_test "maint show test-settings $setting" "^$org_val" \
|
|
"value hasn't changed across error"
|
|
}
|
|
}
|
|
|
|
# Test "with" framework basics, using the internal "maint with
|
|
# test-settings" subcommands.
|
|
with_test_prefix "maint" {
|
|
test_with "auto-boolean" {"on" "off" "auto"}
|
|
test_with "boolean" {"" "on" "off" "0" "1" "enable" "disable"}
|
|
test_with "integer" {"0" "1" "-1" "unlimited"}
|
|
test_with "uinteger" {"0" "1" "unlimited"}
|
|
test_with "zinteger" {"0" "1" "-1"}
|
|
test_with "zuinteger" {"0" "1"}
|
|
test_with "zuinteger-unlimited" {"-1" "unlimited" "0" "1"}
|
|
test_with "string" {"" "foo" "\"hello world\""}
|
|
test_with "string-noescape" {"" "foo" "\"hello world\""}
|
|
test_with "filename" {"/foo" "bar/x/y"}
|
|
test_with "optional-filename" {"" "/foo" "bar/x/y"}
|
|
test_with "enum" {"xxx" "yyy"}
|
|
|
|
# Check the most important error conditions. E.g., empty,
|
|
# negative or "unlimited" values for settings that don't accept
|
|
# those. Exhaustive error coverage of the set/with value parsing
|
|
# is left to "set" testing, in gdb.base/settings.exp.
|
|
test_with_error "auto-boolean" "" \
|
|
"\"on\", \"off\" or \"auto\" expected\\."
|
|
test_with_error "auto-boolean" "xxx" \
|
|
"\"on\", \"off\" or \"auto\" expected\\."
|
|
test_with_error "boolean" "2" "\"on\" or \"off\" expected\\."
|
|
test_with_error "uinteger" "-1" "integer -1 out of range"
|
|
test_with_error "uinteger" "" \
|
|
"Argument required \\(integer to set it to, or \"unlimited\"\\.\\)\\."
|
|
test_with_error "zuinteger" "-1" "integer -1 out of range"
|
|
test_with_error "zuinteger" "" \
|
|
"Argument required \\(integer to set it to\\.\\)\\."
|
|
test_with_error "zuinteger-unlimited" "-2" \
|
|
"only -1 is allowed to set as unlimited"
|
|
test_with_error "zuinteger-unlimited" "" \
|
|
"Argument required \\(integer to set it to, or \"unlimited\"\\.\\)\\."
|
|
test_with_error "filename" "" \
|
|
"Argument required \\(filename to set it to\\.\\)\\."
|
|
test_with_error "enum" "" \
|
|
"Requires an argument\\. Valid arguments are xxx, yyy, zzz\\."
|
|
}
|
|
|
|
# Basic/core tests using user-visible commands.
|
|
with_test_prefix "basics" {
|
|
gdb_test "print g_s" " = {a = 1, b = 2, c = 3}"
|
|
gdb_test "with print pretty -- print g_s" \
|
|
[multi_line \
|
|
" = {" \
|
|
" a = 1," \
|
|
" b = 2," \
|
|
" c = 3" \
|
|
"}"]
|
|
|
|
# A boolean setting.
|
|
gdb_test "with non-stop on -- show non-stop" \
|
|
"Controlling the inferior in non-stop mode is on\\."
|
|
gdb_test "show non-stop" \
|
|
"Controlling the inferior in non-stop mode is off\\."
|
|
|
|
# Language.
|
|
gdb_test "with language pascal -- show language" \
|
|
"The current source language is \"pascal\"\\."
|
|
|
|
gdb_test "show language" \
|
|
"The current source language is \"auto; currently c\"\\."
|
|
|
|
gdb_test "with language ada -- print g_s" \
|
|
" = \\(a => 1, b => 2, c => 3\\)"
|
|
|
|
# Nested "with"s.
|
|
gdb_test "with language ada -- with language c -- print g_s" \
|
|
" = {a = 1, b = 2, c = 3}"
|
|
|
|
# "w" alias.
|
|
gdb_test "w language pascal -- show language" \
|
|
"The current source language is \"pascal\"\\." \
|
|
"w alias works"
|
|
|
|
# An early prototype of the "with" command got this wrong.
|
|
gdb_test \
|
|
"w print repeats unlimited -- w print repeats 1 -- p \"1223334444\"" \
|
|
" = \"1\", '2' <repeats 2 times>, '3' <repeats 3 times>, '4' <repeats 4 times>"
|
|
}
|
|
|
|
# Check a user-defined command.
|
|
with_test_prefix "user-defined" {
|
|
# A user defined command.
|
|
set test "define usercmd"
|
|
gdb_test_multiple "define usercmd" $test {
|
|
-re "End with" {
|
|
gdb_test \
|
|
[multi_line_input \
|
|
{print g_s} \
|
|
{end}] \
|
|
"" \
|
|
$test
|
|
}
|
|
}
|
|
gdb_test "with language ada -- usercmd" \
|
|
" = \\(a => 1, b => 2, c => 3\\)"
|
|
}
|
|
|
|
# Check repeating.
|
|
with_test_prefix "repeat" {
|
|
clean_restart $binfile
|
|
|
|
# "with" with no command reinvokes the previous command.
|
|
gdb_test "with language ada" \
|
|
"No previous command to relaunch" \
|
|
"reinvoke with no previous command to relaunch"
|
|
|
|
gdb_test "print g_s" " = {a = 1, b = 2, c = 3}"
|
|
|
|
gdb_test "with language ada" \
|
|
" = \\(a => 1, b => 2, c => 3\\)" \
|
|
"reinvoke with language"
|
|
|
|
# Same, but with "--".
|
|
gdb_test "with language fortran --" \
|
|
" = \\( a = 1, b = 2, c = 3 \\)" \
|
|
"reinvoke with language and --"
|
|
|
|
# Repeating repeats the original "print g_s", not the last "with"
|
|
# command.
|
|
set test "repeat command line"
|
|
send_gdb "\n"
|
|
gdb_test_multiple "" $test {
|
|
-re " = {a = 1, b = 2, c = 3}\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
}
|
|
|
|
# Basic run control.
|
|
with_test_prefix "run control" {
|
|
clean_restart $binfile
|
|
|
|
if ![runto_main] {
|
|
return
|
|
}
|
|
|
|
# Check "with" with a synchronous execution command.
|
|
gdb_test "with disassemble-next-line on -- next" \
|
|
"return 0;.*=>.*"
|
|
}
|
|
|
|
# Check errors.
|
|
with_test_prefix "errors" {
|
|
gdb_test "with" "Missing arguments\\."
|
|
|
|
# Try both an unknown root setting and an unknown prefixed
|
|
# setting. The errors come from different locations in the
|
|
# sources.
|
|
gdb_test "with xxxx yyyy" \
|
|
"Undefined set command: \"xxxx\". Try \"help set\"\\."
|
|
gdb_test "with print xxxx yyyy" \
|
|
"Undefined set print command: \"xxxx yyyy\". Try \"help set print\"\\."
|
|
# Try one error case for "maint with", to make sure the right
|
|
# "maintenance with" prefix is shown.
|
|
gdb_test "maint with xxxx yyyy" \
|
|
"Undefined maintenance set command: \"xxxx\". Try \"help maintenance set\"\\."
|
|
|
|
# Try ambiguous settings.
|
|
gdb_test "with w" \
|
|
"Ambiguous set command \"w\": watchdog, width, write\\."
|
|
gdb_test "with print m" \
|
|
"Ambiguous set print command \"m\": max-depth, max-symbolic-offset, memory-tag-violations\\."
|
|
|
|
gdb_test "with variable xxx=1" \
|
|
"Cannot use this setting with the \"with\" command"
|
|
|
|
gdb_test "with print elements -- p 1" \
|
|
"Argument required \\(integer to set it to, or \"unlimited\"\\.\\)\\."
|
|
|
|
gdb_test "with -- p 1" \
|
|
"Missing setting before '--' delimiter"
|
|
|
|
# Check that the setting is restored even if the command throws.
|
|
gdb_test "with print elements 1 -- unknowncommand" \
|
|
"Undefined command: \"unknowncommand\"\\. Try \"help\"\\."
|
|
gdb_test "show print elements" \
|
|
"Limit on string chars or array elements to print is 200\\."
|
|
}
|
|
|
|
# Check completion.
|
|
with_test_prefix "completion" {
|
|
test_gdb_complete_unique \
|
|
"with pri" \
|
|
"with print"
|
|
|
|
test_gdb_complete_unique \
|
|
"with print ele" \
|
|
"with print elements"
|
|
|
|
test_gdb_complete_unique \
|
|
"with print elements u" \
|
|
"with print elements unlimited"
|
|
|
|
test_gdb_complete_none \
|
|
"with print elements unlimited "
|
|
|
|
test_gdb_completion_offers_commands "with print elements unlimited -- "
|
|
|
|
# Check that the completer nests into the nested command line's
|
|
# completer.
|
|
test_gdb_complete_unique \
|
|
"with print elements unlimited -- with print ele" \
|
|
"with print elements unlimited -- with print elements"
|
|
|
|
# Check completion of "maint with". "maint with" and "with"'s
|
|
# completers share 99% of the code. All we need to care about
|
|
# here is that the completion word point is computed correctly, so
|
|
# any simple completion is sufficient.
|
|
test_gdb_complete_unique \
|
|
"maint with test-set" \
|
|
"maint with test-settings"
|
|
}
|