0eba65ab18
filenames, which can make the readline library produce output we don't recognize, cd to the directory first, and then complete using nice, short relative paths.
737 lines
26 KiB
Text
737 lines
26 KiB
Text
# Copyright 1998, 1999 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 2 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, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
# Please email any bugs, comments, and/or additions to this file to:
|
|
# bug-gdb@prep.ai.mit.edu
|
|
|
|
# This file was written by Elena Zannoni (ezannoni@cygnus.com)
|
|
|
|
# This file is part of the gdb testsuite.
|
|
|
|
#
|
|
# tests for command completion
|
|
#
|
|
# Here are some useful test cases for completion.
|
|
# They should be tested with both M-? and TAB.
|
|
#
|
|
# "show output-" "radix"
|
|
# "show output" "-radix"
|
|
# "p" ambiguous (commands starting with p--path, print, printf, etc.)
|
|
# "p " ambiguous (all symbols)
|
|
# "info t foo" no completions
|
|
# "info t " no completions
|
|
# "info t" ambiguous ("info target", "info terminal", etc.)
|
|
# "info ajksdlfk" no completions
|
|
# "info ajksdlfk " no completions
|
|
# "info" " "
|
|
# "info " ambiguous (all info commands)
|
|
# "p \"break" unambiguous (completes to filename "break.c")
|
|
# "p \"break." unambiguous (should complete to "break.c" but does not,
|
|
# due to readline limitations)
|
|
# "p 'a" ambiguous (all symbols starting with a)
|
|
# "p b-a" ambiguous (all symbols starting with a)
|
|
# "p b-" ambiguous (all symbols)
|
|
# "file Make" "file" (word break hard to screw up here)
|
|
# "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
|
|
#
|
|
|
|
|
|
if $tracelevel then {
|
|
strace $tracelevel
|
|
}
|
|
|
|
|
|
global usestubs
|
|
|
|
#
|
|
# test running programs
|
|
#
|
|
set prms_id 0
|
|
set bug_id 0
|
|
|
|
set testfile "break"
|
|
set srcfile ${testfile}.c
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-w}] != "" } {
|
|
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
|
|
}
|
|
|
|
if [get_compiler_info ${binfile}] {
|
|
return -1;
|
|
}
|
|
|
|
gdb_exit
|
|
|
|
# Don't let a .inputrc file or an existing setting of INPUTRC mess up
|
|
# the test results. Even if /dev/null doesn't exist on the particular
|
|
# platform, the readline library will use the default setting just by
|
|
# failing to open the file. OTOH, opening /dev/null successfully will
|
|
# also result in the default settings being used since nothing will be
|
|
# read from this file.
|
|
global env
|
|
if [info exists env(INPUTRC)] {
|
|
set old_inputrc $env(INPUTRC)
|
|
}
|
|
set env(INPUTRC) "/dev/null"
|
|
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
|
|
if ![runto_main] then {
|
|
perror "tests suppressed"
|
|
}
|
|
|
|
set oldtimeout1 $timeout
|
|
set timeout 30
|
|
|
|
|
|
send_gdb "hfgfh\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^hfgfh\\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Undefined command: \"hfgfh\"\\. Try \"help\"\\..*$gdb_prompt $"\
|
|
{ pass "complete 'hfgfh'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'hfgfh'"}
|
|
timeout {fail "(timeout) complete 'hfgfh'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'hfgfh'" }
|
|
timeout { fail "(timeout) complete 'hfgfh'" }
|
|
}
|
|
|
|
#exp_internal 0
|
|
|
|
send_gdb "show output\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^show output-radix $"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
|
|
{ pass "complete 'show output'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'show output'"}
|
|
timeout {fail "(timeout) complete 'show output'"}
|
|
}
|
|
}
|
|
-re "^show output$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
|
|
{ fail "complete 'show output'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'show output'"}
|
|
timeout { fail "(timeout) complete 'show output'"}
|
|
}
|
|
|
|
}
|
|
|
|
-re ".*$gdb_prompt $" { fail "complete 'show output'" }
|
|
timeout { fail "(timeout) complete 'show output'" }
|
|
}
|
|
|
|
|
|
send_gdb "show output-\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^show output-radix $"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
|
|
{ pass "complete 'show output-'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'show output-'"}
|
|
timeout {fail "(timeout) complete 'show output-'"}
|
|
}
|
|
}
|
|
-re "^show output-$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
|
|
{ fail "complete 'show output-'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'show output-'"}
|
|
timeout { fail "(timeout) complete 'show output-'"}
|
|
}
|
|
|
|
}
|
|
|
|
-re ".*$gdb_prompt $" { fail "complete 'show output-'" }
|
|
timeout { fail "(timeout) complete 'show output-'" }
|
|
}
|
|
|
|
send_gdb "p\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p\\\x07$"\
|
|
{ send_gdb "\n"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "The history is empty\\..*$gdb_prompt $"\
|
|
{ pass "complete 'p'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p'"}
|
|
timeout {fail "(timeout) complete 'p' 2"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p'" }
|
|
timeout { fail "(timeout) complete 'p' 1" }
|
|
}
|
|
|
|
send_gdb "p \t"
|
|
sleep 3
|
|
gdb_expect {
|
|
-re "^p \\\x07$"\
|
|
{ send_gdb "\n"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "The history is empty\\..*$gdb_prompt $"\
|
|
{ pass "complete 'p '"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p '"}
|
|
timeout {fail "(timeout) complete 'p ' 1"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p '" }
|
|
timeout { fail "(timeout) complete 'p ' 2" }
|
|
}
|
|
|
|
|
|
send_gdb "info t foo\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info t foo\\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Ambiguous info command \"t foo\": target, terminal, threads, tp, tracepoints, types\\..*$gdb_prompt $"\
|
|
{ pass "complete 'info t foo'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info t foo'"}
|
|
timeout {fail "(timeout) complete 'info t foo'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info t foo'" }
|
|
timeout { fail "(timeout) complete 'info t foo'" }
|
|
}
|
|
|
|
send_gdb "info t\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info t\\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Ambiguous info command \"t\": target, terminal, threads, tp, tracepoints, types\\..
|
|
*$gdb_prompt $"\
|
|
{ pass "complete 'info t'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info t'"}
|
|
timeout {fail "(timeout) complete 'info t'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info t'" }
|
|
timeout { fail "(timeout) complete 'info t'" }
|
|
}
|
|
|
|
|
|
send_gdb "info t \t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info t \\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Ambiguous info command \"t \": target, terminal, threads, tp, tracepoints, types\\..
|
|
*$gdb_prompt $"\
|
|
{ pass "complete 'info t '"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info t '"}
|
|
timeout {fail "(timeout) complete 'info t '"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info t '" }
|
|
timeout { fail "(timeout) complete 'info t '" }
|
|
}
|
|
|
|
|
|
send_gdb "info asdfgh\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info asdfgh\\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Undefined info command: \"asdfgh\". Try \"help info\"\\..
|
|
*$gdb_prompt $"\
|
|
{ pass "complete 'info asdfgh'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info asdfgh'"}
|
|
timeout {fail "(timeout) complete 'info asdfgh'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info asdfgh'" }
|
|
timeout { fail "(timeout) complete 'info asdfgh'" }
|
|
}
|
|
|
|
|
|
send_gdb "info asdfgh \t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info asdfgh \\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Undefined info command: \"asdfgh \". Try \"help info\"\\..
|
|
*$gdb_prompt $"\
|
|
{ pass "complete 'info asdfgh '"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info asdfgh '"}
|
|
timeout {fail "(timeout) complete 'info asdfgh '"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info asdfgh '" }
|
|
timeout { fail "(timeout) complete 'info asdfgh '" }
|
|
}
|
|
|
|
send_gdb "info\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info $"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*info address.*info watchpoints.*\r\n\r\nType \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
|
|
{ pass "complete 'info'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info'"}
|
|
timeout {fail "(timeout) complete 'info'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info'" }
|
|
timeout { fail "(timeout) complete 'info'" }
|
|
}
|
|
|
|
send_gdb "info \t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info \\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*info address.*Type \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
|
|
{ pass "complete 'info '"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info '"}
|
|
timeout {fail "(timeout) complete 'info '"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info '" }
|
|
timeout { fail "(timeout) complete 'info '" }
|
|
}
|
|
|
|
|
|
send_gdb "info \t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info \\\x07$"\
|
|
{ send_gdb "\t"
|
|
gdb_expect {
|
|
-re "address.*types.*$gdb_prompt info $"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "\"info\".*unambiguous\\..*$gdb_prompt $"\
|
|
{ pass "complete (2) 'info '"}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'info '"}
|
|
timeout {fail "(timeout) complete (2) 'info '"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'info '"}
|
|
timeout {fail "(timeout) complete (2) 'info '"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'info '" }
|
|
timeout { fail "(timeout) complete (2) 'info '" }
|
|
}
|
|
|
|
|
|
send_gdb "p \"break\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p \"break\\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \"break'"}
|
|
timeout {fail "(timeout) complete 'p \"break'"}
|
|
}
|
|
}
|
|
-re "^p \"break\\.c\"$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re ".*$gdb_prompt $" { pass "complete 'p \"break'"}
|
|
timeout {fail "(timeout) complete 'p \"break'"}
|
|
}
|
|
}
|
|
-re "^p \"break.*$"
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \"break'"}
|
|
timeout {fail "(timeout) complete 'p \"break'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \"break'" }
|
|
timeout { fail "(timeout) complete 'p \"break'" }
|
|
}
|
|
|
|
setup_xfail "*-*-*"
|
|
send_gdb "p \"break.\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p \"break\\.\\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \"break.'"}
|
|
timeout {fail "(timeout) complete 'p \"break.'"}
|
|
}
|
|
}
|
|
-re "^p \"break\\.c\"$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re ".*$gdb_prompt $" { pass "complete 'p \"break.'"}
|
|
timeout {fail "(timeout) complete 'p \"break.'"}
|
|
}
|
|
}
|
|
-re "^p \"break\\..*$"
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \"break.'"}
|
|
timeout {fail "(timeout) complete 'p \"break.'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \"break.'" }
|
|
timeout { fail "(timeout) complete 'p \"break.'" }
|
|
}
|
|
|
|
send_gdb "p 'a\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p 'a\\\x07$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Invalid character constant\\..*$gdb_prompt $"\
|
|
{ pass "complete 'p \'a'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \'a'"}
|
|
timeout {fail "(timeout) complete 'p \'a'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'p \'a'" }
|
|
timeout { fail "(timeout) complete 'p \'a'" }
|
|
}
|
|
|
|
send_gdb "p 'a\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p 'a\\\x07$" {
|
|
send_gdb "\t"
|
|
gdb_expect {
|
|
-re ".*argv.*$gdb_prompt p .a$" {
|
|
send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Invalid character constant\\..*$gdb_prompt $" {
|
|
pass "complete (2) 'p \'a'"
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
|
|
timeout { fail "(timeout) complete (2) 'p \'a'" }
|
|
}
|
|
}
|
|
-re "(There are $decimal possibilities\\. Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
|
|
send_gdb "n"
|
|
gdb_expect {
|
|
-re "\\(gdb\\) p 'a$" {
|
|
send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Invalid character constant\\..*$gdb_prompt $" {
|
|
pass "complete (2) 'p \'a'"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p \'a'"
|
|
}
|
|
timeout { fail "(timeout) complete (2) 'p \'a'" }
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
|
|
timeout { fail "(timeout) complete (2) 'p \'a'" }
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
|
|
timeout { fail "(timeout) complete (2) 'p \'a'" }
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
|
|
timeout { fail "(timeout) complete (2) 'p \'a'" }
|
|
}
|
|
|
|
|
|
# These tests used to try completing the shorter "p b-a".
|
|
# Unfortunately, on some systems, there are .o files in system
|
|
# libraries which declare static variables named `b'. Of course,
|
|
# those variables aren't really in scope, as far as the compiler is
|
|
# concerned. But GDB deliberately tries to be more liberal: if you
|
|
# enter an identifier that doesn't have any binding in scope, GDB will
|
|
# search all the program's compilation units for a static variable of
|
|
# the given name.
|
|
#
|
|
# This behavior can help avoid a lot of pedantry, so it's usually a
|
|
# good thing. But in this test case, it causes GDB to print the value
|
|
# of some random variable, instead of giving us the "No symbol..."
|
|
# error we were expecting.
|
|
#
|
|
# For example, on S/390 linux, the file s_atan.c in libm.a declares a
|
|
# `b', which is a structure containing an int and a float, so GDB says
|
|
# ``Argument to arithmetic operation not a number or boolean'' instead
|
|
# of ``No symbol ...''.
|
|
#
|
|
# So, I'm hoping that there is no system with a static library variable named
|
|
# `no_var_by_this_name'.
|
|
send_gdb "p no_var_named_this-a\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p no_var_named_this-a\\\x07$" {
|
|
send_gdb "\n"
|
|
gdb_expect {
|
|
-re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
|
|
pass "complete 'p no_var_named_this-a'"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete 'p no_var_named_this-a'"
|
|
}
|
|
timeout {
|
|
fail "(timeout) complete 'p no_var_named_this-a'"
|
|
}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete 'p no_var_named_this-a'"
|
|
}
|
|
timeout {
|
|
fail "(timeout) complete 'p no_var_named_this-a'"
|
|
}
|
|
}
|
|
|
|
send_gdb "p no_var_named_this-a\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p no_var_named_this-a\\\x07$" {
|
|
send_gdb "\t"
|
|
gdb_expect {
|
|
-re ".*argv.*$gdb_prompt p no_var_named_this-a$" {
|
|
send_gdb "\n"
|
|
gdb_expect {
|
|
-re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
|
|
pass "complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
timeout {
|
|
fail "(timeout) complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
}
|
|
}
|
|
-re "(There are $decimal possibilities\\. Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
|
|
send_gdb "n"
|
|
gdb_expect {
|
|
-re "\\(gdb\\) p no_var_named_this-a$" {
|
|
send_gdb "\n"
|
|
gdb_expect {
|
|
-re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
|
|
pass "complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
timeout {
|
|
fail "(timeout) complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
timeout {
|
|
fail "(timeout) complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p no_var_named_this-a'"
|
|
}
|
|
timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" }
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-a'" }
|
|
timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" }
|
|
}
|
|
|
|
send_gdb "p no_var_named_this-\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^p no_var_named_this-\\\x07$" {
|
|
send_gdb "\t"
|
|
gdb_expect {
|
|
-re "(There are $decimal possibilities\\. Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
|
|
send_gdb "n"
|
|
gdb_expect {
|
|
-re "\\(gdb\\) p no_var_named_this-$" {
|
|
send_gdb "\n"
|
|
gdb_expect {
|
|
-re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
|
|
pass "complete (2) 'p no_var_named_this-'"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p no_var_named_this-'"
|
|
}
|
|
timeout {
|
|
fail "(timeout) complete (2) 'p no_var_named_this-'"
|
|
}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p no_var_named_this-'"
|
|
}
|
|
timeout {
|
|
fail "(timeout) complete (2) 'p no_var_named_this-'"
|
|
}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "complete (2) 'p no_var_named_this-'"
|
|
}
|
|
timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-'" }
|
|
timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }
|
|
}
|
|
|
|
|
|
# The following tests used to simply try to complete `${objdir}/Make',
|
|
# and so on. The problem is that ${objdir} can be very long; the
|
|
# completed filename may be more than eighty characters wide. When
|
|
# this happens, readline tries to manage things, producing output that
|
|
# may make sense on the screen, but is rather hard for our script to
|
|
# recognize.
|
|
#
|
|
# In the case that motivated this change, the (gdb) prompt occupied
|
|
# the leftmost six columns, and `${objdump}/' was seventy-four
|
|
# characters long --- eighty in all. After printing the slash,
|
|
# readline emitted a space, a carriage return, and then `Makefile'
|
|
# (the tab character being received as input after `Make'.
|
|
#
|
|
# Basically, you have to let readline do whatever it's going to do to
|
|
# make the screen look right. If it happens to use a different
|
|
# strategy on Tuesdays to get the cursor in the right place, that's
|
|
# not something the testsuite should care about.
|
|
#
|
|
# So, we avoid long lines. We `cd' to ${objdir} first, and then do
|
|
# the completion relative to the current directory.
|
|
|
|
gdb_test "cd ${objdir}" "Working directory ${objdir}.*" "cd to \${objdir}"
|
|
send_gdb "file ./Make\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "file ./Makefile.*$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "\r\nA program is being debugged already\\. Kill it\\? \\(y or n\\) $"\
|
|
{ send_gdb "n\n"
|
|
gdb_expect {
|
|
-re "\r\nProgram not killed\\.\r\n$gdb_prompt $"\
|
|
{ pass "complete 'file ./Make'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'file ./Make'"}
|
|
timeout {fail "(timeout) complete 'file ./Make'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'file ./Make'"}
|
|
timeout {fail "(timeout) complete 'file ./Make'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'file ./Make'" }
|
|
timeout { fail "(timeout) complete 'file ./Make'" }
|
|
}
|
|
|
|
|
|
gdb_test "cd ${srcdir}" "Working directory ${srcdir}.*" "cd to \${srcdir}"
|
|
send_gdb "file ./gdb.base/compl\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^file ./gdb.base/completion\\.exp $"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "\r\nA program is being debugged already\\. Kill it\\? \\(y or n\\) $"
|
|
\
|
|
{ send_gdb "n\n"
|
|
gdb_expect {
|
|
-re "\r\nProgram not killed\\.\r\n$gdb_prompt $"\
|
|
{ pass "complete 'file ./gdb.base/compl'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'"}
|
|
timeout {fail "(timeout) complete 'file ./gdb.base/compl'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'"}
|
|
timeout {fail "(timeout) complete 'file ./gdb.base/compl'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'" }
|
|
timeout { fail "(timeout) complete 'file ./gdb.base/compl'" }
|
|
}
|
|
|
|
send_gdb "info func mark\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "^info func mark.*er$"\
|
|
{
|
|
send_gdb "\t\t"
|
|
sleep 3
|
|
gdb_expect {
|
|
-re "marker1.*$gdb_prompt info func marker$"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "All functions matching regular expression \"marker\":.*File.*break.c:\r\nint marker1\\(\\);\r\nint marker2\\(int\\).*marker3\\(char.*char.*\\).*marker4\\(long int\\);.*$gdb_prompt $"\
|
|
{ pass "complete 'info func mar'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info func mar'"}
|
|
timeout {fail "(timeout) complete 'info func mar'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info func mar'"}
|
|
timeout {fail "(timeout) complete 'info func mar'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'info func mar'" }
|
|
timeout { fail "(timeout) complete 'info func mar'" }
|
|
}
|
|
|
|
|
|
send_gdb "set follow-fork-mode \t\t"
|
|
sleep 1
|
|
gdb_expect {
|
|
-re "ask.*child.*parent.*$gdb_prompt set follow-fork-mode $"\
|
|
{ send_gdb "\n"
|
|
gdb_expect {
|
|
-re "Requires an argument.*ask.*child.*parent.*$gdb_prompt $"\
|
|
{ pass "complete 'set follow-fork-mode'"}
|
|
-re "Ambiguous item \"\"\\..*$gdb_prompt $"\
|
|
{ pass "complete 'set follow-fork-mode'"}
|
|
-re ".*$gdb_prompt $" { fail "complete 'set follow-fork-mode'"}
|
|
timeout {fail "(timeout) complete 'set follow-fork-mode'"}
|
|
}
|
|
}
|
|
-re ".*$gdb_prompt $" { fail "complete 'set follow-fork-mode'" }
|
|
timeout { fail "(timeout) complete 'set follow-fork-mode'" }
|
|
}
|
|
|
|
# Restore globals modified in this test...
|
|
if [info exists old_inputrc] {
|
|
set env(INPUTRC) $old_inputrc
|
|
} else {
|
|
unset env(INPUTRC)
|
|
}
|
|
set timeout $oldtimeout1
|
|
|
|
return 0
|