[gdb/testsuite] Fix handling of nr_args < 3 in mi_gdb_test
The documentation of mi_gdb_test states that the command, pattern and message arguments are mandatory: ... # mi_gdb_test COMMAND PATTERN MESSAGE [IPATTERN] -- send a command to gdb; # test the result. ... However, this is not checked, and when mi_gdb_test is called with less than 3 arguments, it passes or fails silently. Fix this by using the following semantics: - if there are 1 or 2 arguments, use the command as the message. - if there is 1 argument, use ".*" as the pattern. - if there are no or too much arguments, error out. Fix a PATH issue in gdb.mi/mi-logging.exp, introduced by using the command as message. Fix a few other trivial-looking FAILs. There are 11 less trivial-looking FAILs left in gdb.mi in test-cases: - mi-nsmoribund.exp - mi-breakpoint-changed.exp - mi-break.exp. Tested on x86_64-linux.
This commit is contained in:
parent
ca49878470
commit
e36788d135
6 changed files with 43 additions and 12 deletions
|
@ -341,7 +341,7 @@ proc_with_prefix test_explicit_breakpoints {} {
|
|||
|
||||
# First check mixed explicit/parsed linespecs.
|
||||
mi_gdb_test "-break-insert --function main $srcfile:$line_callee3_head" \
|
||||
".*Garbage following explicit linespec"
|
||||
".*Garbage following explicit location.*"
|
||||
|
||||
# Insert some breakpoints and list them
|
||||
# Also, disable some so they do not interfere with other tests
|
||||
|
|
|
@ -32,7 +32,8 @@ if {[mi_runto_main] < 0} {
|
|||
|
||||
set milogfile [standard_output_file "milog.txt"]
|
||||
|
||||
mi_gdb_test "-gdb-set logging file $milogfile" ".*"
|
||||
mi_gdb_test "-gdb-set logging file $milogfile" "\\^done" \
|
||||
"-gdb-set logging file"
|
||||
|
||||
mi_gdb_test "-gdb-set logging overwrite on" ".*"
|
||||
|
||||
|
|
|
@ -75,7 +75,8 @@ gdb_expect {
|
|||
}
|
||||
}
|
||||
|
||||
mi_gdb_test "set var *(unsigned int *) ${main_addr} = ${main_insn}" \
|
||||
".*=memory-changed,thread-group=\"i${decimal}\".addr=\"${main_addr}\",len=\"0x4\",type=\"code\".*\\^done"
|
||||
regsub ^0x0* $main_addr "" main_addr
|
||||
mi_gdb_test "set var *(unsigned int *) 0x${main_addr} = ${main_insn}" \
|
||||
".*=memory-changed,thread-group=\"i${decimal}\".addr=\"0x0*${main_addr}\",len=\"0x4\",type=\"code\".*\\^done"
|
||||
mi_gdb_exit
|
||||
return 0
|
||||
|
|
|
@ -115,7 +115,12 @@ mi_check_thread_states \
|
|||
# gdb_test_multiple (or an MI equivalent)
|
||||
|
||||
mi_gdb_test "102-break-delete" "102\\^done.*"
|
||||
mi_gdb_test "print done = 1" { = 1"}
|
||||
set re [list \
|
||||
[string_list_to_regexp ~ {"} $] \
|
||||
$decimal \
|
||||
[string_list_to_regexp " = 1" \\ n {"} \r\n ^ done]]
|
||||
set re [join $re ""]
|
||||
mi_gdb_test "print done = 1" $re
|
||||
mi_gdb_test "103-exec-continue --all" "\[^\n\]*\r\n$running_re"
|
||||
|
||||
gdb_expect {
|
||||
|
|
|
@ -44,7 +44,9 @@ mi_runto_main
|
|||
|
||||
set remote_python_file [gdb_remote_download host ${srcdir}/${subdir}/${pyfile}]
|
||||
|
||||
mi_gdb_test "source ${remote_python_file}" "load python file"
|
||||
set cmd "source ${remote_python_file}"
|
||||
set re [string_list_to_regexp & {"} $cmd \\ n {"} \r\n ^ done]
|
||||
mi_gdb_test $cmd $re "load python file"
|
||||
|
||||
mi_continue_to_line [gdb_get_line_number {MI breakpoint here} ${srcfile}] \
|
||||
"step to breakpoint"
|
||||
|
@ -74,7 +76,7 @@ with_test_prefix "varobj nscont" {
|
|||
mi_delete_varobj nscont "delete varobj"
|
||||
}
|
||||
|
||||
mi_gdb_test "-enable-pretty-printing" ""
|
||||
mi_gdb_test "-enable-pretty-printing" "\\^done"
|
||||
|
||||
mi_create_varobj_checked string string_1 \
|
||||
"struct string_repr" \
|
||||
|
@ -283,7 +285,9 @@ with_test_prefix "varobj nscont" {
|
|||
"choose default visualizer"
|
||||
}
|
||||
|
||||
mi_gdb_test "python exception_flag = True" ""
|
||||
set cmd "python exception_flag = True"
|
||||
set re [string_list_to_regexp & {"} $cmd \\ n {"} \r\n ^ done]
|
||||
mi_gdb_test $cmd $re
|
||||
|
||||
mi_create_dynamic_varobj nstype2 nstype2 1 \
|
||||
"create nstype2 varobj"
|
||||
|
|
|
@ -691,16 +691,18 @@ proc mi_readnow { args } {
|
|||
return $readnow_p
|
||||
}
|
||||
|
||||
# mi_gdb_test COMMAND PATTERN MESSAGE [IPATTERN] -- send a command to gdb;
|
||||
# mi_gdb_test COMMAND [PATTERN [MESSAGE [IPATTERN]]] -- send a command to gdb;
|
||||
# test the result.
|
||||
#
|
||||
# COMMAND is the command to execute, send to GDB with send_gdb. If
|
||||
# this is the null string no command is sent.
|
||||
# PATTERN is the pattern to match for a PASS, and must NOT include
|
||||
# the \r\n sequence immediately before the gdb prompt.
|
||||
# If not specified, .* is used.
|
||||
# MESSAGE is the message to be printed. (If this is the empty string,
|
||||
# then sometimes we don't call pass or fail at all; I don't
|
||||
# understand this at all.)
|
||||
# If not specified, COMMAND is used.
|
||||
# IPATTERN is the pattern to match for the inferior's output. This parameter
|
||||
# is optional. If present, it will produce a PASS if the match is
|
||||
# successful, and a FAIL if unsuccessful.
|
||||
|
@ -717,9 +719,23 @@ proc mi_gdb_test { args } {
|
|||
global inferior_exited_re async
|
||||
upvar timeout timeout
|
||||
|
||||
set command [lindex $args 0]
|
||||
set pattern [lindex $args 1]
|
||||
set message [lindex $args 2]
|
||||
if { [llength $args] >= 1 } then {
|
||||
set command [lindex $args 0]
|
||||
} else {
|
||||
error "Not enough arguments in mi_gdb_test"
|
||||
}
|
||||
|
||||
if { [llength $args] >= 2 } then {
|
||||
set pattern [lindex $args 1]
|
||||
} else {
|
||||
set pattern ".*"
|
||||
}
|
||||
|
||||
if { [llength $args] >= 3 } then {
|
||||
set message [lindex $args 2]
|
||||
} else {
|
||||
set message $command
|
||||
}
|
||||
|
||||
if [llength $args]==4 {
|
||||
set ipattern [lindex $args 3]
|
||||
|
@ -732,6 +748,10 @@ proc mi_gdb_test { args } {
|
|||
set question_string "^FOOBAR$"
|
||||
}
|
||||
|
||||
if { [llength $args] >= 6 } {
|
||||
error "Too many arguments in mi_gdb_test"
|
||||
}
|
||||
|
||||
if $verbose>2 then {
|
||||
send_user "Sending \"$command\" to gdb\n"
|
||||
send_user "Looking to match \"$pattern\"\n"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue