From d422fe19c6d3e626916f52859cd30df6fe2946ea Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Sun, 23 Nov 2003 01:09:19 +0000 Subject: [PATCH] 2003-11-22 Andrew Cagney * lib/gdb.exp (gdb_test_multiple): Add simple example. * gdb.base/structs.exp: Use gdb_test_multiple. --- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.base/structs.exp | 68 +++--------------------------- gdb/testsuite/lib/gdb.exp | 14 ++++++ 3 files changed, 24 insertions(+), 63 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index cfb43a8de8..35fcaea6fb 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-11-22 Andrew Cagney + + * lib/gdb.exp (gdb_test_multiple): Add simple example. + * gdb.base/structs.exp: Use gdb_test_multiple. + 2003-11-20 Andrew Cagney * gdb.base/structs.exp: Handle and recover from internal errors. diff --git a/gdb/testsuite/gdb.base/structs.exp b/gdb/testsuite/gdb.base/structs.exp index 0fbdc07389..7d399fd37e 100644 --- a/gdb/testsuite/gdb.base/structs.exp +++ b/gdb/testsuite/gdb.base/structs.exp @@ -294,10 +294,9 @@ proc test_struct_returns { n } { # "return_value_unknown", if non-empty, records why GDB realised # that it didn't know where the return value was. - send_gdb "return foo${n}\n" set test "return foo; ${tests}" set return_value_unknown 0 - gdb_expect { + gdb_test_multiple "return foo${n}" "${test}" { -re "The location" { # Ulgh, a struct return, remember this (still need prompt). set return_value_unknown 1 @@ -312,8 +311,7 @@ proc test_struct_returns { n } { exp_continue } -re "Make fun${n} return now.*y or n. $" { - send_gdb "y\n" - gdb_expect { + gdb_test_multiple "y" "${test}" { -re "L${n} *= fun${n}.*${gdb_prompt} $" { # Need to step off the function call gdb_test "next" "L.* *= fun.*" "${test}" @@ -321,38 +319,17 @@ proc test_struct_returns { n } { -re "L[expr ${n} + 1] *= fun[expr ${n} + 1].*${gdb_prompt} $" { pass "${test}" } - -re "A problem internal to GDB has been detected" { - fail "${test} (GDB internal error 2)" - gdb_internal_error_resync - } - -re "${gdb_prompt} $" { - fail "${test} (wrong line info)" - } - timeout { - fail "${test} (timeout 2)" - } } } - -re "A problem internal to GDB has been detected" { - fail "${test} (GDB internal error 1)" - gdb_internal_error_resync - } - -re "${gdb_prompt} $" { - fail "${test} (no query)" - } - timeout { - fail "${test} (timeout 1)" - } } # Check that the return-value is as expected. At this stage we're # just checking that GDB has returned a value consistent with # "return_value_unknown" set above. - send_gdb "p/c L${n}\n" set test "value foo returned; ${tests}" setup_kfails structs-*tld* i686-*-* gdb/1447 - gdb_expect { + gdb_test_multiple "p/c L${n}" "${test}" { -re " = [foo ${n}].*${gdb_prompt} $" { if $return_value_unknown { # This contradicts the above claim that GDB didn't @@ -375,17 +352,6 @@ proc test_struct_returns { n } { fail "${test}" } } - -re "A problem internal to GDB has been detected" { - fail "${test} (GDB internal error)" - gdb_internal_error_resync - } - -re "${gdb_prompt} $" { - # Garbage returned, garbage printed - fail "${test}" - } - timeout { - fail "${test} (timeout)" - } } # Check that a "finish" works. @@ -409,10 +375,9 @@ proc test_struct_returns { n } { # Finish the function, set 'finish_value_unknown" to non-empty if the # return-value was not found. - send_gdb "finish\n" set test "finish foo; ${tests}" set finish_value_unknown 0 - gdb_expect { + gdb_test_multiple "finish" "${test}" { -re "Value returned is .*${gdb_prompt} $" { pass "${test}" } @@ -421,26 +386,14 @@ proc test_struct_returns { n } { set finish_value_unknown 1 pass "${test}" } - -re "A problem internal to GDB has been detected" { - fail "${test} (GDB internal error)" - gdb_internal_error_resync - } - -re ".*${gdb_prompt} $" { - # Garbage returned - fail "${test}" - } - timeout { - fail "${test} (timeout)" - } } # Re-print the last (return-value) using the more robust # "p/c". If no return value was found, the 'Z' from the previous # check that the variable was cleared, is printed. - send_gdb "p/c\n" set test "value foo finished; ${tests}" setup_kfails structs-*tld* i686-*-* gdb/1447 - gdb_expect { + gdb_test_multiple "p/c" "${test}" { -re "[foo ${n}]\[\r\n\]+${gdb_prompt} $" { if $finish_value_unknown { # This contradicts the above claim that GDB didn't @@ -460,17 +413,6 @@ proc test_struct_returns { n } { fail "${test}" } } - -re "A problem internal to GDB has been detected" { - fail "${test} (GDB internal error)" - gdb_internal_error_resync - } - -re ".*${gdb_prompt} $" { - # Garbage returned - fail "${test}" - } - timeout { - fail "${test} (timeout)" - } } # Finally, check that "return" and finish" have consistent diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index e0be1b79cd..136f68c43b 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -430,6 +430,20 @@ proc gdb_internal_error_resync {} { # 0 if only user-supplied patterns matched # -1 if there was an internal error. # +# You can use this function thus: +# +# gdb_test_multiple "print foo" "test foo" { +# -re "expected output 1" { +# pass "print foo" +# } +# -re "expected output 2" { +# fail "print foo" +# } +# } +# +# The standard patterns, such as "Program exited..." and "A problem +# ...", all being implicitly appended to that list. +# proc gdb_test_multiple { command message user_code } { global verbose global gdb_prompt