diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/gdb.base/info_sources.exp | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/gdb/testsuite/gdb.base/info_sources.exp b/gdb/testsuite/gdb.base/info_sources.exp index 9063a30..6ef711f 100644 --- a/gdb/testsuite/gdb.base/info_sources.exp +++ b/gdb/testsuite/gdb.base/info_sources.exp @@ -23,17 +23,29 @@ if {[prepare_for_testing $testfile.exp $testfile \ return -1 } -# Executes "info sources " $args. -# EXPECT_SEEN_INFO_SOURCES 1 indicates that the source file info_sources.c must be seen -# in the output. Similarly, EXPECT_SEEN_INFO_SOURCES_BASE indicates that the source file -# info_sources_base.c must be seen in the output. -proc test_info_sources {args expect_seen_info_sources expect_seen_info_sources_base} { +# Executes "info sources ARGS". +# +# EXPECT_SEEN_INFO_SOURCES 1 indicates that the source file info_sources.c +# must be seen in the output. Similarly, EXPECT_SEEN_INFO_SOURCES_BASE +# indicates that the source file info_sources_base.c must be seen in the +# output. +# +# If TESTNAME is not the empty string then this is the test name, otherwise +# uses "info sources ARGS" as the test name. +proc test_info_sources {args expect_seen_info_sources \ + expect_seen_info_sources_base \ + {testname ""}} { global gdb_prompt srcfile srcfile2 set seen_info_sources 0 set seen_info_sources_base 0 set cmd [concat "info sources " $args] - gdb_test_multiple $cmd $cmd { + + if { $testname eq "" } { + set $testname $cmd + } + + gdb_test_multiple $cmd $testname { -re "^\[^,\]*${srcfile}(, |\[\r\n\]+)" { incr seen_info_sources exp_continue @@ -48,9 +60,9 @@ proc test_info_sources {args expect_seen_info_sources expect_seen_info_sources_b -re "$gdb_prompt $" { if {$seen_info_sources == $expect_seen_info_sources \ && $seen_info_sources_base == $expect_seen_info_sources_base} { - pass $cmd + pass $gdb_test_name } else { - fail $cmd + fail $gdb_test_name } } } @@ -99,6 +111,34 @@ if { ! [is_remote host] } { test_info_sources "-dirname base" 1 1 } -# Test non matching regexp, with option terminator: +# Test non matching regexp against the basename, with option +# terminator: test_info_sources "-b -- -d" 0 0 -test_info_sources "-d -- -d" 0 0 + +# The following tests relies on using a regexp which will not match +# either the directory name of the source files. Unlike the basename +# test above we need to be more careful picking the regexp as the +# source filename might contain any simple character patterns, and so +# could unexpectedly match the regexp. +# +# Loop through all the characters a-z trying regexp '-C' (where 'C' is +# each character), looking for a regexp which doesn't match the +# directory name. +set re "" +for {set i [scan a %c]} {$i <= [scan z %c]} {incr i} { + set tmp_re -[format %c $i] + + if {$re eq "" && ![regexp $tmp_re $srcdir/$subdir/]} { + set re $tmp_re + } +} + +# If we found a suitable regexp then test non matching regexp against +# the directory name, with option terminator: +if { $re ne "" } { + test_info_sources "-d -- $re" 0 0 \ + "info sources -d -- <non matching regexp>" +} else { + unresolved \ + "info sources -d -- <non matching regexp> (failed to find regexp)" +} |