* lib/gdb.exp (gdb_test_sequence): New function.
authorDoug Evans <dje@google.com>
Tue, 23 Nov 2010 22:25:37 +0000 (22:25 +0000)
committerDoug Evans <dje@google.com>
Tue, 23 Nov 2010 22:25:37 +0000 (22:25 +0000)
(gdb_expect_list): Add verbose -log call for each pattern.
* gdb.base/signals.exp (test_handle_all_print): Call it.
Reduce timeout increment from 6 minutes to 1 minute.
* gdb.server/ext-run.exp: Call it.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/signals.exp
gdb/testsuite/gdb.server/ext-run.exp
gdb/testsuite/lib/gdb.exp

index f6c6b438bd8c2bb15cfc82ed93e9a1f630d4cdcb..33eed4c9f4e78592101fa1bb79ef1f64ada9c5a4 100644 (file)
@@ -1,3 +1,11 @@
+2010-11-23  Doug Evans  <dje@google.com>
+
+       * lib/gdb.exp (gdb_test_sequence): New function.
+       (gdb_expect_list): Add verbose -log call for each pattern.
+       * gdb.base/signals.exp (test_handle_all_print): Call it.
+       Reduce timeout increment from 6 minutes to 1 minute.
+       * gdb.server/ext-run.exp: Call it.
+
 2010-11-23  Phil Muldoon  <pmuldoon@redhat.com>
 
         PR python/12212
index 109996facac0c69d56bd1324986161684b969108..bd6a9ac42a4251d9ddb491c78c3c72e0a6bc3654 100644 (file)
@@ -56,14 +56,23 @@ proc test_handle_all_print {} {
     # Increase timeout and expect input buffer for large output from gdb.
     # Allow blank or TAB as whitespace characters.
     set oldtimeout $timeout
-    set timeout [expr "$timeout + 360"]
+    set timeout [expr "$timeout + 60"]
     verbose "Timeout is now $timeout seconds" 2
     if { ![istarget "*-*-linux*"]
          && ( [istarget "*-*-gnu*"]
               || [istarget "*-*-mach*"] ) } {
-       gdb_test "handle all print" "Signal\[   \]+Stop\[       \]+Print\[      \]+Pass to program\[    \]+Description\r\nSIGHUP\[      \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Hangup.*SIG63\[      \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Real-time event 63.*EXC_BREAKPOINT\[         \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Breakpoint"
+       gdb_test_sequence "handle all print" "" \
+           {
+               "Signal\[       \]+Stop\[       \]+Print\[      \]+Pass to program\[    \]+Description\r\nSIGHUP\[      \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Hangup"
+               "SIG63\[        \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Real-time event 63"
+               "EXC_BREAKPOINT\[       \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Breakpoint"
+           }
     } else {
-       gdb_test "handle all print" "Signal\[   \]+Stop\[       \]+Print\[      \]+Pass to program\[    \]+Description\r\nSIGHUP\[      \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Hangup.*SIG63\[      \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Real-time event 63.*"
+       gdb_test_sequence "handle all print" "" \
+           {
+               "Signal\[       \]+Stop\[       \]+Print\[      \]+Pass to program\[    \]+Description\r\nSIGHUP\[      \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Hangup"
+               "SIG63\[        \]+Yes\[        \]+Yes\[        \]+Yes\[        \]+Real-time event 63"
+           }
     }
     set timeout $oldtimeout
     verbose "Timeout restored to $timeout seconds" 2
index e268a7d97af9be2b63b44caf58198915e836dc2d..79c41affccecfc9e071a8f2b5e4ca5ee5dc5bb58 100644 (file)
@@ -53,21 +53,9 @@ if { [istarget *-*-linux*] } {
     # But only if xml support is compiled in.
     if { $do_xml_test } {
        # This is done in a way to avoid the timeout that can occur from
-       # applying .* regexp to large output.  It is copied from
-       # gdb.base/maint.exp "maint check-symtabs".
-       send_gdb "info os processes\n"
-       gdb_expect {
-           -re ".*pid +user +command.*1 +root +\[/a-z\]*init" {
-               gdb_expect {
-                   -re "$gdb_prompt $" {
-                       pass "get process list"
-                   }
-                   timeout { fail "(timeout) get process list" }
-               }
-           }
-           -re ".*$gdb_prompt $" { fail "get process list" }
-           timeout { fail "(timeout) get process list" }
-       }
+       # applying .* regexp to large output.
+       gdb_test_sequence "info os processes" "get process list" \
+           { "pid +user +command" "1 +root +\[/a-z\]*init" }
     }
 }
 
index 63e68d3e23173d704475eb4e72c562eb7f6a12ff..ab54c2508688d98662ebd5d3dfa14c7da7447be8 100644 (file)
@@ -921,6 +921,32 @@ proc gdb_test_no_output { args } {
     }
 }
 
+# Send a command and then wait for a sequence of outputs.
+# This is useful when the sequence is long and contains ".*", a single
+# regexp to match the entire output can get a timeout much easier.
+#
+# COMMAND is the command to send.
+# TEST_NAME is passed to pass/fail.  COMMAND is used if TEST_NAME is "".
+# EXPECTED_OUTPUT_LIST is a list of regexps of expected output, which are
+# processed in order, and all must be present in the output.
+#
+# It is unnecessary to specify ".*" at the beginning or end of any regexp,
+# there is an implicit ".*" between each element of EXPECTED_OUTPUT_LIST.
+# There is also an implicit ".*" between the last regexp and the gdb prompt.
+#
+# Like gdb_test and gdb_test_multiple, the output is expected to end with the
+# gdb prompt, which must not be specified in EXPECTED_OUTPUT_LIST.
+
+proc gdb_test_sequence { command test_name expected_output_list } {
+    global gdb_prompt
+    if { $test_name == "" } {
+       set test_name $command
+    }
+    lappend expected_output_list ""; # implicit ".*" before gdb prompt
+    send_gdb "$command\n"
+    gdb_expect_list $test_name "$gdb_prompt $" $expected_output_list
+}
+
 \f
 # Test that a command gives an error.  For pass or fail, return
 # a 1 to indicate that more tests can proceed.  However a timeout
@@ -2375,6 +2401,7 @@ proc gdb_expect_list {test sentinel list} {
     while { ${index} < [llength ${list}] } {
        set pattern [lindex ${list} ${index}]
         set index [expr ${index} + 1]
+       verbose -log "gdb_expect_list pattern: /$pattern/" 2
        if { ${index} == [llength ${list}] } {
            if { ${ok} } {
                gdb_expect {