From: Doug Evans Date: Wed, 7 Jul 2010 18:49:51 +0000 (+0000) Subject: * lib/gdb.exp (gdb_test_list_exact): New function. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2dfb8c17712f0922994fef3476015e5789d2a24b;p=binutils-gdb.git * lib/gdb.exp (gdb_test_list_exact): New function. * gdb.base/default.exp (show convenience): Call it, add tests for $_sdata = void, $_thread = 0. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index f1b58b40901..5d29407f75b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-07-07 Doug Evans + + * lib/gdb.exp (gdb_test_list_exact): New function. + * gdb.base/default.exp (show convenience): Call it, add tests for + $_sdata = void, $_thread = 0. + 2010-07-05 Jan Kratochvil Joel Brobecker diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp index 283745abffb..64d4c9da6c3 100644 --- a/gdb/testsuite/gdb.base/default.exp +++ b/gdb/testsuite/gdb.base/default.exp @@ -567,8 +567,19 @@ gdb_test "show commands" ".*" "show commands" gdb_test "show complaints" "Max number of complaints about incorrect symbols is 0." "show complaints" #test show confirm gdb_test "show confirm" "Whether to confirm potentially dangerous operations is o\[a-z\]*." "show confirm" + #test show convenience -gdb_test "show convenience" "\\\$_siginfo = void" "show convenience" +# This is tricker as there are multiple internal convenience vars and we +# can't assume any particular order. +gdb_test_list_exact "show convenience" "show convenience" \ + {[^\r\n]+[\r\n]+} \ + {[^\r\n]+} \ + { \ + {$_sdata = void} \ + {$_siginfo = void} \ + {$_thread = 0} \ + } + #test show directories gdb_test "show directories" "Source directories searched: .cdir\[:;\].cwd" "show directories" #test show editing diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index d702dee8103..b5b33628f9b 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1036,6 +1036,59 @@ proc gdb_test_exact { args } { return [gdb_test $command $pattern $message] } + +# Wrapper around gdb_test_multiple that looks for a list of expected +# output elements, but which can appear in any order. +# CMD is the gdb command. +# NAME is the name of the test. +# ELM_FIND_REGEXP specifies how to partition the output into elements to +# compare. +# ELM_EXTRACT_REGEXP specifies the part of ELM_FIND_REGEXP to compare. +# RESULT_MATCH_LIST is a list of exact matches for each expected element. +# All elements of RESULT_MATCH_LIST must appear for the test to pass. +# +# A typical use of ELM_FIND_REGEXP/ELM_EXTRACT_REGEXP is to extract one line +# of text per element and then strip trailing \r\n's. +# Example: +# gdb_test_list_exact "foo" "bar" \ +# {[^\r\n]+[\r\n]+} \ +# {[^\r\n]+} \ +# { \ +# {expected result 1} \ +# {expected result 2} \ +# } + +proc gdb_test_list_exact { cmd name elm_find_regexp elm_extract_regexp result_match_list } { + global gdb_prompt + + set matches [lsort $result_match_list] + set seen {} + gdb_test_multiple $cmd $name { + "$cmd\[\r\n\]" { exp_continue } + -re $elm_find_regexp { + set str $expect_out(0,string) + verbose -log "seen: $str" 3 + regexp -- $elm_extract_regexp $str elm_seen + verbose -log "extracted: $elm_seen" 3 + lappend seen $elm_seen + exp_continue + } + -re "$gdb_prompt $" { + set failed "" + foreach got [lsort $seen] have $matches { + if {![string equal $got $have]} { + set failed $have + break + } + } + if {[string length $failed] != 0} { + fail "$name ($failed not found)" + } else { + pass $name + } + } + } +} proc gdb_reinitialize_dir { subdir } { global gdb_prompt