mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +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.
162 lines
5.2 KiB
Plaintext
162 lines
5.2 KiB
Plaintext
# Copyright 2011-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 that the "shell", "!", "|" and "pipe" commands work.
|
|
|
|
load_lib completion-support.exp
|
|
|
|
gdb_exit
|
|
gdb_start
|
|
|
|
gdb_test "shell echo foo" "foo"
|
|
|
|
gdb_test "! echo foo" "foo"
|
|
gdb_test "!echo foo" "foo"
|
|
|
|
# Convenience variables with shell command.
|
|
gdb_test_no_output "! exit 0"
|
|
gdb_test "p \$_shell_exitcode" " = 0" "shell success exitcode"
|
|
gdb_test "p \$_shell_exitsignal" " = void" "shell success exitsignal"
|
|
|
|
gdb_test_no_output "! exit 1"
|
|
gdb_test "p \$_shell_exitcode" " = 1" "shell fail exitcode"
|
|
gdb_test "p \$_shell_exitsignal" " = void" "shell fail exitsignal"
|
|
|
|
# This test will not work when the shell is CMD.EXE.
|
|
if { ! [ishost *-*-mingw*] } {
|
|
gdb_test_no_output "! kill -2 $$"
|
|
gdb_test "p \$_shell_exitcode" " = void" "shell interrupt exitcode"
|
|
gdb_test "p \$_shell_exitsignal" " = 2" "shell interrupt exitsignal"
|
|
}
|
|
|
|
# Define the user command "foo", used to test "pipe" command.
|
|
gdb_test_multiple "define foo" "define foo" {
|
|
-re "End with" {
|
|
pass "define foo"
|
|
}
|
|
}
|
|
gdb_test \
|
|
[multi_line_input \
|
|
{ echo coucou\n }\
|
|
{ echo truc\n }\
|
|
{ echo machin\n }\
|
|
{ if $argc > 0 }\
|
|
{ echo $arg0\n}\
|
|
{end}\
|
|
{end}] \
|
|
"" \
|
|
"enter commands"
|
|
|
|
|
|
gdb_test "pipe foo | wc -l" "3" "simple pipe"
|
|
gdb_test "pipe foo brol| wc -l" "4" "simple pipe with arg"
|
|
gdb_test "pipe foo truc2 | grep truc | wc -l" "2" "double pipe"
|
|
|
|
gdb_test "| foo truc2 | grep truc | wc -l" "2" "double pipe, pipe char"
|
|
gdb_test "|foo|grep truc|wc -l" "1" "no space around pipe char"
|
|
|
|
gdb_test "echo coucou\\n" "coucou" "echo coucou"
|
|
gdb_test "||wc -l" "1" "repeat previous command"
|
|
|
|
gdb_test "| -d ! echo this contains a | character\\n ! sed -e \"s/|/PIPE/\"" \
|
|
"this contains a PIPE character" "alternate 1char delim"
|
|
|
|
gdb_test "|-d ! echo this contains a | character\\n!sed -e \"s/|/PIPE/\"" \
|
|
"this contains a PIPE character" "alternate 1char delim, no space"
|
|
|
|
gdb_test "| -d !!! echo this contains a | character\\n !!! sed -e \"s/|/PIPE/\"" \
|
|
"this contains a PIPE character" "alternate 3char delim"
|
|
|
|
gdb_test "|-d !!! echo this contains a | character\\n!!!sed -e \"s/|/PIPE/\"" \
|
|
"this contains a PIPE character" "alternate 3char delim, no space"
|
|
|
|
# Convenience variables with pipe command.
|
|
gdb_test "|p 123| exit 0" ""
|
|
gdb_test "p \$_shell_exitcode" " = 0" "pipe success exitcode"
|
|
gdb_test "p \$_shell_exitsignal" " = void" "pipe success exitsignal"
|
|
|
|
gdb_test "|p 123| exit 1" ""
|
|
gdb_test "p \$_shell_exitcode" " = 1" "pipe fail exitcode"
|
|
gdb_test "p \$_shell_exitsignal" " = void" "pipe fail exitsignal"
|
|
|
|
# This test will not work when the shell is CMD.EXE.
|
|
if { ! [ishost *-*-mingw*] } {
|
|
gdb_test "|p 123| kill -2 $$" ""
|
|
gdb_test "p \$_shell_exitcode" " = void" "pipe interrupt exitcode"
|
|
gdb_test "p \$_shell_exitsignal" " = 2" "pipe interrupt exitsignal"
|
|
}
|
|
|
|
# Error handling verifications.
|
|
gdb_test "|" "Missing COMMAND" "all missing"
|
|
gdb_test "|-d" "-d requires an argument" "-d value missing"
|
|
gdb_test "|-d " "-d requires an argument" "-d spaces value missing"
|
|
gdb_test "| echo coucou" \
|
|
"Missing delimiter before SHELL_COMMAND" \
|
|
"| delimiter missing"
|
|
gdb_test "|-d DELIM echo coucou" \
|
|
"Missing delimiter before SHELL_COMMAND" \
|
|
"DELIM delimiter missing"
|
|
gdb_test "|echo coucou|" \
|
|
"Missing SHELL_COMMAND" \
|
|
"SHELL_COMMAND missing"
|
|
gdb_test "|-d ! echo coucou !" \
|
|
"Missing SHELL_COMMAND" \
|
|
"SHELL_COMMAND missing with delimiter"
|
|
gdb_test "|-d! echo coucou ! wc" \
|
|
"Missing delimiter before SHELL_COMMAND" \
|
|
"delimiter missing due to missing space"
|
|
|
|
# Completion tests.
|
|
|
|
test_gdb_complete_unique \
|
|
"pipe" \
|
|
"pipe"
|
|
|
|
# Note that unlike "pipe", "|" doesn't require a space. This checks
|
|
# that completion behaves that way too.
|
|
foreach cmd {"pipe " "| " "|"} {
|
|
test_gdb_completion_offers_commands "$cmd"
|
|
|
|
# There's only one option.
|
|
test_gdb_complete_unique \
|
|
"${cmd}-" \
|
|
"${cmd}-d"
|
|
|
|
# Cannot complete "-d"'s argument.
|
|
test_gdb_complete_none "${cmd}-d "
|
|
test_gdb_complete_none "${cmd}-d main"
|
|
|
|
# Check completing a GDB command, with and without -d.
|
|
test_gdb_complete_unique \
|
|
"${cmd}maint set test-se" \
|
|
"${cmd}maint set test-settings"
|
|
test_gdb_complete_unique \
|
|
"${cmd}-d XXX maint set test-se" \
|
|
"${cmd}-d XXX maint set test-settings"
|
|
|
|
# Check that GDB doesn't try to complete the shell command.
|
|
test_gdb_complete_none \
|
|
"${cmd}print 1 | "
|
|
|
|
# Same, while making sure that the completer understands "-d".
|
|
test_gdb_complete_unique \
|
|
"${cmd}-d XXX maint set" \
|
|
"${cmd}-d XXX maint set"
|
|
test_gdb_complete_none \
|
|
"${cmd}-d set maint set"
|
|
test_gdb_complete_none \
|
|
"${cmd}-d set maint set "
|
|
}
|