-# Copyright 1998, 1999, 2002, 2003, 2004, 2007, 2008
+# Copyright 1998, 1999, 2002, 2003, 2004, 2007, 2008, 2009, 2010
# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
#
# test running programs
#
-set prms_id 0
-set bug_id 0
set testfile "break"
set srcfile ${testfile}.c
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}
-re "^info t foo\\\x07$"\
{ send_gdb "\n"
gdb_expect {
- -re "Ambiguous info command \"t foo\": target, tasks, terminal, threads, tp, tracepoints, types\\..*$gdb_prompt $"\
+ -re "Ambiguous info command \"t foo\": target, tasks, terminal, threads, tp, tracepoints, tvariables, types\\..*$gdb_prompt $"\
{ pass "complete 'info t foo'"}
-re ".*$gdb_prompt $" { fail "complete 'info t foo'"}
timeout {fail "(timeout) complete 'info t foo'"}
-re "^info t\\\x07$"\
{ send_gdb "\n"
gdb_expect {
- -re "Ambiguous info command \"t\": target, tasks, terminal, threads, tp, tracepoints, types\\..
+ -re "Ambiguous info command \"t\": target, tasks, terminal, threads, tp, tracepoints, tvariables, types\\..
*$gdb_prompt $"\
{ pass "complete 'info t'"}
-re ".*$gdb_prompt $" { fail "complete 'info t'"}
-re "^info t \\\x07$"\
{ send_gdb "\n"
gdb_expect {
- -re "Ambiguous info command \"t \": target, tasks, terminal, threads, tp, tracepoints, types\\..
+ -re "Ambiguous info command \"t \": target, tasks, terminal, threads, tp, tracepoints, tvariables, types\\..
*$gdb_prompt $"\
{ pass "complete 'info t '"}
-re ".*$gdb_prompt $" { fail "complete 'info t '"}
-re "^help info watchpoints $"\
{ send_gdb "\n"
gdb_expect {
- -re "Synonym for .*\r\n.*$gdb_prompt $"\
+ -re "Status of watchpoints, .*\r\n.*$gdb_prompt $"\
{ pass "complete help info wat" }
-re ".*$gdb_prompt $" { fail "complete help info wat"}
timeout {fail "(timeout) complete help info wat"}
timeout { fail "(timeout) complete 'p &values\[0\] -> a' 2" }
}
+gdb_test "complete p &values\[0\]->z" \
+ "p &values.0.->z_field" \
+ "copmletion of field in anonymous union"
+
# The following tests used to simply try to complete `${objdir}/file',
# and so on. The problem is that ${objdir} can be very long; the
# completed filename may be more than eighty characters wide. When
"Working directory [string_to_regexp ${fullsrcdir}].*" \
"cd to \${srcdir}"
+
+# GDB used to fail adding / on directories, on the first try only.
+set uniquedir ../testsuite/gdb.base/comp-dir
+set escapeduniquedir [string_to_regexp ${uniquedir}]
+set uniquesu subdi
+set uniquesub ${uniquesu}r
+set escapeuniquesub [string_to_regexp ${uniquesub}]
+send_gdb "dir ${uniquedir}\t"
+gdb_expect {
+ -re "${escapeduniquedir}/" {
+ pass "directory completion"
+ send_gdb "${uniquesu}\t"
+ }
+ -re "${escapeduniquedir} $" {
+ fail "directory completion (old gdb bug)"
+ send_gdb "\b/${uniquesu}\t"
+ }
+ default {
+ fail "directory completion (timeout)"
+ send_gdb "\ndir ${uniquedir}/${uniquesu}\t"
+ }
+}
+
+gdb_expect {
+ -re "${escapeuniquesub}/$" {
+ pass "directory completion 2"
+ }
+ timeout {
+ fail "directory completion 2"
+ }
+}
+
+# Empty COMMAND sends no newline while " " sends the newline we need.
+gdb_test " " "Source directories searched: .*" "Glob remaining of directory test"
+
+
send_gdb "complete file ./gdb.base/compl\n"
sleep 1
gdb_expect {
-re "marker1.*$gdb_prompt info func marker$"\
{ send_gdb "\n"
gdb_expect {
- -re "All functions matching regular expression \"marker\":.*File.*break1.c:\r\nint marker1\\((void|)\\);\r\nint marker2\\(int\\).*marker3\\(char.*char.*\\).*marker4\\(long int\\);.*$gdb_prompt $"\
+ -re "All functions matching regular expression \"marker\":.*File.*break1.c:\r\nint marker1\\((void|)\\);\r\nint marker2\\(int\\).*marker3\\(char.*char.*\\).*marker4\\(long( int)?\\);.*$gdb_prompt $"\
{ pass "complete 'info func marke'"}
-re ".*$gdb_prompt $" { fail "complete 'info func marke'"}
timeout {fail "(timeout) complete 'info func marke'"}
timeout { fail "(timeout) complete 'set follow-fork-mode'" }
}
-send_gdb "p values\[0\].nonex.\t"
-gdb_expect {
- -re "Type struct some_struct has no component named nonex.\r\n$gdb_prompt $"\
- { pass "Completing non-existing component" }
- -re ".*$gdb_prompt $" { fail "Completing non-existing component" }
- timeout { fail "(timeout) Completing non-existing component" }
- eof { fail "(eof) Completing non-existing component #2" }
- }
-# Double memory freeing gets found only on the second run:
-send_gdb "p values\[0\].nonex.\t"
-gdb_expect {
- -re "Type struct some_struct has no component named nonex.\r\n$gdb_prompt $"\
- { pass "Completing non-existing component #2" }
- -re ".*$gdb_prompt $" { fail "Completing non-existing component #2" }
- timeout { fail "(timeout) Completing non-existing component #2" }
- eof { fail "(eof) Completing non-existing component #2" }
- }
+gdb_test_no_output "complete print values\[0\].x." \
+ "field completion with invalid field"
+
+# If there is a non-deprecated completion, it should be returned.
+gdb_test "complete sav" "save" "test non-deprecated completion"
+# If there is only a deprecated completion, then it should be returned.
+gdb_test "complete save-t" "save-tracepoints" "test deprecated completion"
+
# 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