Fix racy output matching in gdb.tui/tui-completion.exp

'make check-read1 TESTS="gdb.tui/tui-completion.exp"' exposes this test race:

  (gdb) PASS: gdb.tui/completion.exp: set max-completions unlimited
  layout ^G
  asm    next   prev   regs   split  src
  (gdb) FAIL: gdb.tui/completion.exp: completion of layout names: tab completion
  Quit
  (gdb) PASS: gdb.tui/completion.exp: completion of layout names: quit command input
  focus ^G
  cmd   next  prev  src
  (gdb) FAIL: gdb.tui/completion.exp: completion of focus command: tab completion
  Quit

This is caused by expecting "$gdb_prompt layout $".
gdb_test_multiple's internal prompt regexp can match first if expect's
internal buffer is filled with partial output.  Fix that by splitting
the gdb_test_multiple in question in two.  Since the same problem/code
appears twice in the file, factor out a common procedure.

gdb/testsuite/ChangeLog:
2017-11-09  Pedro Alves  <palves@redhat.com>

	* gdb.tui/tui-completion.exp (test_tab_completion): New procedure,
	factored out from ...
	(top level): ... here, and adjusted to avoid expecting beyond the
	prompt in a single gdb_test_multiple.
This commit is contained in:
Pedro Alves 2017-11-09 22:44:10 +00:00
parent 5ed7a928ac
commit 584a564f36
2 changed files with 24 additions and 19 deletions

View File

@ -1,3 +1,10 @@
2017-11-09 Pedro Alves <palves@redhat.com>
* gdb.tui/tui-completion.exp (test_tab_completion): New procedure,
factored out from ...
(top level): ... here, and adjusted to avoid expecting beyond the
prompt in a single gdb_test_multiple.
2017-11-09 Pedro Alves <palves@redhat.com>
* gdb.multi/multi-attach.exp ("kill" test): Match the whole query

View File

@ -22,12 +22,20 @@ if {[skip_tui_tests] || [target_info exists gdb,nointerrupts]} {
gdb_test_no_output "set max-completions unlimited"
with_test_prefix "completion of layout names" {
# TAB-complete INPUT_LINE, and expect EXPECTED_RE as completion match
# output.
proc test_tab_completion {input_line expected_re} {
global gdb_prompt
set test "tab completion"
send_gdb "layout\t\t\t"
send_gdb "$input_line\t\t\t"
gdb_test_multiple "" "$test" {
-re "asm *next *prev *regs *split *src *\r\n$gdb_prompt layout $" {
pass "$test"
-re "$expected_re\r\n$gdb_prompt " {
gdb_test_multiple "" "$test" {
-re "^$input_line$" {
pass "$test"
}
}
}
}
send_gdb "\003"
@ -39,20 +47,10 @@ with_test_prefix "completion of layout names" {
}
}
with_test_prefix "completion of layout names" {
test_tab_completion "layout" "asm *next *prev *regs *split *src *"
}
with_test_prefix "completion of focus command" {
set test "tab completion"
send_gdb "focus \t\t"
gdb_test_multiple "" "$test" {
-re "cmd *next *prev *src *\r\n$gdb_prompt focus $" {
pass "$test"
}
}
send_gdb "\003"
set test "quit command input"
gdb_test_multiple "" "$test" {
-re "$gdb_prompt $" {
pass "$test"
}
}
test_tab_completion "focus" "cmd *next *prev *src *"
}