blob: a05ce614b1d9f124f127dea4bac2b1cb226c4354 [file]
# Copyright 2025 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Test gdb_test_multiple -lbl, particularly with patterns that share a
# common prefix.
standard_testfile
clean_restart
gdb_test_no_output "source ${srcdir}/${subdir}/$testfile.gdb" \
"source gdb test script"
set saw_prompt 0
set saw_prefix 0
set saw_command 0
set saw_prefix_foo 0
set saw_prefix_bar 0
# #1 - We need anchors so that the "prefix foo" pattern below does not
# match when the expect output buffer contains:
#
# "\r\nprefix xxx\r\n\prefix foo\r\n"
#
# #2 - We need an anchor on the prompt match as otherwise the prompt
# regexp would match:
#
# "\r\nmeant-to-be-matched-by-lbl-2\r\nprefix xxx\r\n(gdb) "
#
# This test would fail if -lbl did not force the built-in prompt match
# regexp to have an anchor as well, as without it, the built-in prompt
# regexp would have the exact same issue as #2 above.
gdb_test_multiple "command" "" -lbl {
-re "^command(?=\r\n)" {
verbose -log <COMMAND>
incr saw_command
exp_continue
}
-re "^\r\nprefix foo(?=\r\n)" {
verbose -log <PREFIX-FOO>
incr saw_prefix_foo
exp_continue
}
-re "^\r\nprefix bar(?=\r\n)" {
verbose -log <PREFIX-BAR>
incr saw_prefix_bar
exp_continue
}
-re "^\r\nprefix \[^\r\n\]*(?=\r\n)" {
verbose -log <PREFIX>
incr saw_prefix
exp_continue
}
-re "^\r\n$gdb_prompt $" {
verbose -log <PROMPT>
incr saw_prompt
pass $gdb_test_name
}
}
verbose -log "saw_command: $saw_command"
verbose -log "saw_prefix_foo: $saw_prefix_foo"
verbose -log "saw_prefix_bar: $saw_prefix_bar"
verbose -log "saw_prefix: $saw_prefix"
verbose -log "saw_prompt: $saw_prompt"
gdb_assert {$saw_command == 1}
gdb_assert {$saw_prefix_foo == 1}
gdb_assert {$saw_prefix_bar == 1}
gdb_assert {$saw_prefix == 3}
gdb_assert {$saw_prompt == 1}