mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
[gdb/testsuite] Add string_list_to_regexp
A regexp pattern with escapes like this is hard to read: ... set re "~\"\[$\]$decimal = 1\\\\n\"\r\n\\^done" ... We can make it more readable by spacing out parts (which allows us to also use the curly braces where that's convenient): ... set re [list "~" {"} {[$]} $decimal " = 1" "\\\\" "n" {"} "\r\n" "\\^" "done"] set re [join $re ""] ... or by using string_to_regexp: ... set re [list \ [string_to_regexp {~"$}] \ $decimal \ [string_to_regexp " = 1\\n\"\r\n^done"]] set re [join $re ""] ... Note: we have to avoid applying string_to_list to decimal, which is already a regexp. Add a proc string_list_to_regexp to make it easy to do both: ... set re [list \ [string_list_to_regexp ~ {"} $] \ $decimal \ [string_list_to_regexp " = 1" \\ n {"} \r\n ^ done]] ... Also add a test-case gdb.testsuite/string_to_regexp.exp.
This commit is contained in:
66
gdb/testsuite/gdb.testsuite/string_to_regexp.exp
Normal file
66
gdb/testsuite/gdb.testsuite/string_to_regexp.exp
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# Copyright 2021 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/>.
|
||||||
|
|
||||||
|
# Testsuite self-tests for string_to_regexp/string_list_to_regexp.
|
||||||
|
# The former is not explicitly tested, assuming string_list_to_regexp uses
|
||||||
|
# string_to_regexp.
|
||||||
|
|
||||||
|
set test_nr 0
|
||||||
|
|
||||||
|
proc test_regexp { args } {
|
||||||
|
global test_nr
|
||||||
|
incr test_nr
|
||||||
|
|
||||||
|
set fargs {}
|
||||||
|
set farg 1
|
||||||
|
foreach arg $args {
|
||||||
|
if { $farg } {
|
||||||
|
if { $arg == "--" } {
|
||||||
|
set farg 0
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
lappend fargs $arg
|
||||||
|
} else {
|
||||||
|
set re $arg
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set res [string_list_to_regexp {*}$fargs]
|
||||||
|
|
||||||
|
set test "#$test_nr: got expected re"
|
||||||
|
if { $res eq $re } {
|
||||||
|
pass $test
|
||||||
|
} else {
|
||||||
|
verbose -log "Expecting '$re'"
|
||||||
|
verbose -log "Got '$res'"
|
||||||
|
fail $test
|
||||||
|
}
|
||||||
|
|
||||||
|
set test "#$test_nr: re matches string"
|
||||||
|
set str [join $fargs ""]
|
||||||
|
if { [regexp $re $str] } {
|
||||||
|
pass $test
|
||||||
|
} else {
|
||||||
|
verbose -log "Matching '$str'"
|
||||||
|
verbose -log "Failed against '$re'"
|
||||||
|
fail $test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test_regexp abc -- abc
|
||||||
|
test_regexp abc def -- abcdef
|
||||||
|
test_regexp {\\} -- {\\\\}
|
||||||
|
test_regexp "\n" -- "\n"
|
||||||
|
test_regexp {\n} -- {\\n}
|
||||||
|
test_regexp {\\} n -- {\\\\n}
|
@ -38,6 +38,18 @@ proc string_to_regexp {str} {
|
|||||||
return $result
|
return $result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Given a list of strings, adds backslashes as needed to each string to
|
||||||
|
# create a regexp that will match the string, and join the result.
|
||||||
|
|
||||||
|
proc string_list_to_regexp { args } {
|
||||||
|
set result ""
|
||||||
|
foreach arg $args {
|
||||||
|
set arg [string_to_regexp $arg]
|
||||||
|
append result $arg
|
||||||
|
}
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
# Wrap STR in an ANSI terminal escape sequences -- one to set the
|
# Wrap STR in an ANSI terminal escape sequences -- one to set the
|
||||||
# style to STYLE, and one to reset the style to the default. The
|
# style to STYLE, and one to reset the style to the default. The
|
||||||
# return value is suitable for use as a regular expression.
|
# return value is suitable for use as a regular expression.
|
||||||
|
Reference in New Issue
Block a user