aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/lib
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1995-01-20 22:26:33 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1995-01-20 22:26:33 +0000
commitf34c87666e4020cfd61a4d8d1084f03c9f3038d2 (patch)
tree91af313377010a20ed188b235a3d09bbc757078d /gdb/testsuite/lib
parentb2683e0914903c870e5782e1cf8501a5ac291a0a (diff)
downloadgdb-f34c87666e4020cfd61a4d8d1084f03c9f3038d2.zip
gdb-f34c87666e4020cfd61a4d8d1084f03c9f3038d2.tar.gz
gdb-f34c87666e4020cfd61a4d8d1084f03c9f3038d2.tar.bz2
* gdb.c++/classes.exp, gdb.c++/cplusfuncs.exp,
gdb.c++/inherit.exp, gdb.c++/templates.exp, gdb.c++/virtfunc.exp, gdb.fortran/exprs.exp, gdb.fortran/types.exp, gdb.chill/chexp.exp, gdb.base/printcmds.exp: Remove passcount, failcount, etc., stuff; it makes the tests harder to understand and confuses test-o-matic. The preferred style is that each test provides a PASS or a FAIL, and has a unique message (e.g. "continue #54" not just "continue") which is the same for the pass and the fail. * gdb.fortran/exprs.exp, gdb.fortran/types.exp, gdb.chill/chexp.exp: Move test_print_accept and test_print_reject to lib/gdb.exp. * gdb.base/printcmds.exp: Use test_print_accept. Remove prt_accept which was basically the same thing. Likewise for test_print_reject and prt_reject. * lib/gdb.exp (test_print_reject): Add some more error message patterns to match from the former printcmds.exp (prt_reject). * gdb.c++/classes.exp, gdb.base/scope.exp: Remove spurious xfails. One defect of the passcount stuff is that some of it failed to report XPASS where appropriate. * gdb.c++/cplusfuncs.exp (print_addr_of): No longer accept extra stuff before and after arg in expected pattern. (test_paddr_operator_functions): Re-do test without print_addr_of; this is the only test which seems to want extra stuff there.
Diffstat (limited to 'gdb/testsuite/lib')
-rw-r--r--gdb/testsuite/lib/gdb.exp146
1 files changed, 133 insertions, 13 deletions
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index cb54c954..a3e0fac 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1,4 +1,4 @@
-# Copyright (C) 1992, 1994 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1994, 1995 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
@@ -40,15 +40,15 @@ if ![info exists prompt] then {
}
#
-# gdb_version -- extract and print the version number of gcc
+# gdb_version -- extract and print the version number of GDB
#
proc default_gdb_version {} {
global GDB
global GDBFLAGS
if {[which $GDB] != 0} then {
- set tmp [exec echo "q" | $GDB]
+ set tmp [exec echo "q" | $GDB -nw]
regexp " \[0-9\.\]+" $tmp version
- clone_output "[which $GDB] version$version $GDBFLAGS\n"
+ clone_output "[which $GDB] version$version -nw $GDBFLAGS \n"
} else {
warning "$GDB does not exist"
}
@@ -157,9 +157,9 @@ proc runto { function } {
send "break $function\n"
# The first two regexps are what we get with -g, the third is without -g.
expect {
- -re "Breakpoint \[0-9\]* at 0x\[0-9a-f\]*: file .*, line $decimal.\r\n$prompt $" {}
+ -re "Breakpoint \[0-9\]* at .*: file .*, line $decimal.\r\n$prompt $" {}
-re "Breakpoint \[0-9\]*: file .*, line $decimal.\r\n$prompt $" {}
- -re "Breakpoint \[0-9\]* at 0x\[0-9a-f\]*.*$prompt $" {}
+ -re "Breakpoint \[0-9\]* at .*$prompt $" {}
-re "$prompt $" { fail "setting breakpoint at $function" ; return 0 }
timeout { fail "setting breakpoint at $function (timeout)" ; return 0 }
}
@@ -285,7 +285,131 @@ proc gdb_test { args } {
}
return $result
}
+
+# Testing printing of a specific value. For passes and fails, return
+# a 1 to indicate that more tests can proceed. However a timeout
+# is a serious error, generates a special fail message, and causes
+# a 0 to be returned to indicate that more tests are likely to fail
+# as well.
+#
+# Args are:
+#
+# First one is string to send to gdb
+# Second one is string to match gdb result to
+# Third one is an optional message to be printed
+#
+# This differs from gdb_test in a few ways: (1) no catch on the send (there is
+# no reason for this to be different from gdb_test but I think the lack of
+# catch is correct), (2) it tests for the " =" (that could easily be moved
+# to the callers, (3) the pattern must be followed by \r\n and the prompt,
+# not other garbage as in gdb_test (this feature seems kind of worthwhile).
+proc test_print_accept { args } {
+ global prompt
+ global verbose
+
+ if [llength $args]==3 then {
+ set message [lindex $args 2]
+ } else {
+ set message [lindex $args 0]
+ }
+ set sendthis [lindex $args 0]
+ set expectthis [lindex $args 1]
+ if $verbose>2 then {
+ send_user "Sending \"$sendthis\" to gdb\n"
+ send_user "Looking to match \"$expectthis\"\n"
+ send_user "Message is \"$message\"\n"
+ }
+ send "$sendthis\n"
+ expect {
+ -re ".* = $expectthis\r\n$prompt $" {
+ if ![string match "" $message] then {
+ pass "$sendthis ($message)"
+ } else {
+ pass "$sendthis"
+ }
+ return 1
+ }
+ -re ".*$prompt $" {
+ if ![string match "" $message] then {
+ fail "$sendthis ($message)"
+ } else {
+ fail "$sendthis"
+ }
+ return 1
+ }
+ timeout {
+ fail "$sendthis (timeout)"
+ return 0
+ }
+ }
+}
+
+# Testing printing of a specific value. For pass or fail, return
+# a 1 to indicate that more tests can proceed. However a timeout
+# is a serious error, generates a special fail message, and causes
+# a 0 to be returned to indicate that more tests are likely to fail
+# as well.
+
+proc test_print_reject { args } {
+ global prompt
+ global verbose
+
+ if [llength $args]==2 then {
+ set expectthis [lindex $args 1]
+ } else {
+ set expectthis "should never match this bogus string"
+ }
+ set sendthis [lindex $args 0]
+ if $verbose>2 then {
+ send_user "Sending \"$sendthis\" to gdb\n"
+ send_user "Looking to match \"$expectthis\"\n"
+ }
+ send "$sendthis\n"
+ expect {
+ -re ".*A .* in expression.*\\.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*Invalid syntax in expression.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*Junk after end of expression.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*Invalid number.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*Invalid character constant.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*No symbol table is loaded.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*No symbol .* in current context.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*$expectthis.*$prompt $" {
+ pass "reject $sendthis"
+ return 1
+ }
+ -re ".*$prompt $" {
+ fail "reject $sendthis"
+ return 1
+ }
+ default {
+ fail "reject $sendthis (eof or timeout)"
+ return 0
+ }
+ }
+}
+
# Given an input string, adds backslashes as needed to create a
# regexp that will match the string.
@@ -308,7 +432,7 @@ proc gdb_test_exact { args } {
}
return [gdb_test $command $pattern $message]
}
-
+
proc gdb_reinitialize_dir { subdir } {
global prompt
@@ -434,7 +558,7 @@ proc default_gdb_start { } {
global prompt
global spawn_id
global timeout
- verbose "Spawning $GDB $GDBFLAGS"
+ verbose "Spawning $GDB -nw $GDBFLAGS"
if { [which $GDB] == 0 } then {
perror "$GDB does not exist."
@@ -443,11 +567,7 @@ proc default_gdb_start { } {
set oldtimeout $timeout
set timeout [expr "$timeout + 60"]
- if [ llength $GDBFLAGS ] then {
- spawn $GDB $GDBFLAGS
- } else {
- spawn $GDB
- }
+ eval "spawn $GDB -nw $GDBFLAGS"
expect {
-re ".*\r\n$prompt $" {
verbose "GDB initialized."