Add "style" proc to the test suite
Commit Message
This adds a "style" helper proc to the test suite, and updates
existing style tests to use it. Thanks to Sergio for the idea.
Tested on x86-64 Fedora 29.
gdb/testsuite/ChangeLog
2019-05-14 Tom Tromey <tromey@adacore.com>
* gdb.base/info-shared.exp (check_info_shared): Use "style".
* gdb.base/style.exp: Use "style".
* lib/gdb-utils.exp (style): New proc.
---
gdb/testsuite/ChangeLog | 6 ++++++
gdb/testsuite/gdb.base/info-shared.exp | 4 ++--
gdb/testsuite/gdb.base/style.exp | 13 +++++++------
gdb/testsuite/lib/gdb-utils.exp | 18 ++++++++++++++++++
4 files changed, 33 insertions(+), 8 deletions(-)
Comments
* Tom Tromey <tromey@adacore.com> [2019-05-14 08:05:36 -0600]:
> This adds a "style" helper proc to the test suite, and updates
> existing style tests to use it. Thanks to Sergio for the idea.
>
> Tested on x86-64 Fedora 29.
>
> gdb/testsuite/ChangeLog
> 2019-05-14 Tom Tromey <tromey@adacore.com>
>
> * gdb.base/info-shared.exp (check_info_shared): Use "style".
> * gdb.base/style.exp: Use "style".
> * lib/gdb-utils.exp (style): New proc.
> ---
> gdb/testsuite/ChangeLog | 6 ++++++
> gdb/testsuite/gdb.base/info-shared.exp | 4 ++--
> gdb/testsuite/gdb.base/style.exp | 13 +++++++------
> gdb/testsuite/lib/gdb-utils.exp | 18 ++++++++++++++++++
> 4 files changed, 33 insertions(+), 8 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.base/info-shared.exp b/gdb/testsuite/gdb.base/info-shared.exp
> index e1314bf5dd7..42295ce7367 100644
> --- a/gdb/testsuite/gdb.base/info-shared.exp
> +++ b/gdb/testsuite/gdb.base/info-shared.exp
> @@ -161,8 +161,8 @@ with_test_prefix styled {
>
> # Simple test for "info sharedlibrary" styling. Look for styled
> # addresses and file name.
> - set addr "\033\\\[34m${hex}\033\\\[m"
> - set sofile "\033\\\[32m\[^\033\]+\033\\\[m"
> + set addr [style $hex address]
> + set sofile [style "\[^\033\]+" file]
I wonder if there's a nice way to get rid of the \033 here? Two
thoughts I had was a different proc so we could maybe write this:
set sofile [styled-string file]
Alternatively, I wondered if we could special case this:
set sofile [styled ".*" file]
So that if we pass exactly ".*" it is changed into "\[^\033\]+" inside
the style proc.
Just thought it might be nice to try and remove more of the escape
sequences.
Thanks,
Andrew
> gdb_test_no_output "set style enabled on"
> gdb_test "info sharedlibrary" \
> "$addr\[ \t\]+$addr.*$sofile\r\n.*"
> diff --git a/gdb/testsuite/gdb.base/style.exp b/gdb/testsuite/gdb.base/style.exp
> index 369c1f59a88..15de05cdafb 100644
> --- a/gdb/testsuite/gdb.base/style.exp
> +++ b/gdb/testsuite/gdb.base/style.exp
> @@ -41,10 +41,10 @@ save_vars { env(TERM) } {
>
> gdb_test_no_output "set style enabled on"
>
> - set main_expr "\033\\\[33mmain\033\\\[m"
> - set base_file_expr "\033\\\[32m.*style\\.c\033\\\[m"
> + set main_expr [style main function]
> + set base_file_expr [style ".*style\\.c" file]
> set file_expr "$base_file_expr:\[0-9\]"
> - set arg_expr "\033\\\[36marg.\033\\\[m"
> + set arg_expr [style "arg." variable]
>
> gdb_test "frame" \
> "$main_expr.*$arg_expr.*$arg_expr.*$file_expr.*"
> @@ -58,7 +58,7 @@ save_vars { env(TERM) } {
>
> gdb_test "break main" "file $base_file_expr.*"
>
> - gdb_test "print &main" " = .* \033\\\[34m$hex\033\\\[m <$main_expr>"
> + gdb_test "print &main" " = .* [style $hex address] <$main_expr>"
>
> # Regression test for a bug where line-wrapping would occur at the
> # wrong spot with styling. There were different bugs at different
> @@ -86,11 +86,12 @@ save_vars { env(TERM) } {
> gdb_exit
> gdb_spawn
>
> - gdb_test "" "\033\\\[35;1mGNU gdb.*\033\\\[m.*" \
> + set vers [style "GNU gdb.*" "35;1"]
> + gdb_test "" "${vers}.*" \
> "version is styled"
>
> set quoted [string_to_regexp $binfile]
> gdb_test "file $binfile" \
> - "Reading symbols from \033\\\[32m${quoted}\033\\\[m..." \
> + "Reading symbols from [style $quoted file]..." \
> "filename is styled when loading symbol file"
> }
> diff --git a/gdb/testsuite/lib/gdb-utils.exp b/gdb/testsuite/lib/gdb-utils.exp
> index 26bbbf593c6..a6567884426 100644
> --- a/gdb/testsuite/lib/gdb-utils.exp
> +++ b/gdb/testsuite/lib/gdb-utils.exp
> @@ -37,3 +37,21 @@ proc string_to_regexp {str} {
> regsub -all {[]*+.|(){}^$\[\\]} $str {\\&} result
> return $result
> }
> +
> +# 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
> +# return value is suitable for use as a regular expression.
> +
> +# STYLE can either be the payload part of an ANSI terminal sequence,
> +# or a shorthand for one of the gdb standard styles: "file",
> +# "function", "variable", or "address".
> +
> +proc style {str style} {
> + switch -exact -- $style {
> + file { set style 32 }
> + function { set style 33 }
> + variable { set style 36 }
> + address { set style 34 }
> + }
> + return "\033\\\[${style}m${str}\033\\\[m"
> +}
> --
> 2.20.1
>
>>>>> "Andrew" == Andrew Burgess <andrew.burgess@embecosm.com> writes:
>> + set sofile [style "\[^\033\]+" file]
Andrew> I wonder if there's a nice way to get rid of the \033 here? Two
Andrew> thoughts I had was a different proc so we could maybe write this:
Andrew> set sofile [styled-string file]
Andrew> Alternatively, I wondered if we could special case this:
Andrew> set sofile [styled ".*" file]
Andrew> So that if we pass exactly ".*" it is changed into "\[^\033\]+" inside
Andrew> the style proc.
Andrew> Just thought it might be nice to try and remove more of the escape
Andrew> sequences.
Another idea is to just make it non-greedy with
set sofile [style ".*?" file]
Tom
>>>>> "Tom" == Tom Tromey <tromey@adacore.com> writes:
Andrew> Just thought it might be nice to try and remove more of the escape
Andrew> sequences.
Tom> Another idea is to just make it non-greedy with
Tom> set sofile [style ".*?" file]
I'm checking this in with this change.
Tom
@@ -161,8 +161,8 @@ with_test_prefix styled {
# Simple test for "info sharedlibrary" styling. Look for styled
# addresses and file name.
- set addr "\033\\\[34m${hex}\033\\\[m"
- set sofile "\033\\\[32m\[^\033\]+\033\\\[m"
+ set addr [style $hex address]
+ set sofile [style "\[^\033\]+" file]
gdb_test_no_output "set style enabled on"
gdb_test "info sharedlibrary" \
"$addr\[ \t\]+$addr.*$sofile\r\n.*"
@@ -41,10 +41,10 @@ save_vars { env(TERM) } {
gdb_test_no_output "set style enabled on"
- set main_expr "\033\\\[33mmain\033\\\[m"
- set base_file_expr "\033\\\[32m.*style\\.c\033\\\[m"
+ set main_expr [style main function]
+ set base_file_expr [style ".*style\\.c" file]
set file_expr "$base_file_expr:\[0-9\]"
- set arg_expr "\033\\\[36marg.\033\\\[m"
+ set arg_expr [style "arg." variable]
gdb_test "frame" \
"$main_expr.*$arg_expr.*$arg_expr.*$file_expr.*"
@@ -58,7 +58,7 @@ save_vars { env(TERM) } {
gdb_test "break main" "file $base_file_expr.*"
- gdb_test "print &main" " = .* \033\\\[34m$hex\033\\\[m <$main_expr>"
+ gdb_test "print &main" " = .* [style $hex address] <$main_expr>"
# Regression test for a bug where line-wrapping would occur at the
# wrong spot with styling. There were different bugs at different
@@ -86,11 +86,12 @@ save_vars { env(TERM) } {
gdb_exit
gdb_spawn
- gdb_test "" "\033\\\[35;1mGNU gdb.*\033\\\[m.*" \
+ set vers [style "GNU gdb.*" "35;1"]
+ gdb_test "" "${vers}.*" \
"version is styled"
set quoted [string_to_regexp $binfile]
gdb_test "file $binfile" \
- "Reading symbols from \033\\\[32m${quoted}\033\\\[m..." \
+ "Reading symbols from [style $quoted file]..." \
"filename is styled when loading symbol file"
}
@@ -37,3 +37,21 @@ proc string_to_regexp {str} {
regsub -all {[]*+.|(){}^$\[\\]} $str {\\&} result
return $result
}
+
+# 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
+# return value is suitable for use as a regular expression.
+
+# STYLE can either be the payload part of an ANSI terminal sequence,
+# or a shorthand for one of the gdb standard styles: "file",
+# "function", "variable", or "address".
+
+proc style {str style} {
+ switch -exact -- $style {
+ file { set style 32 }
+ function { set style 33 }
+ variable { set style 36 }
+ address { set style 34 }
+ }
+ return "\033\\\[${style}m${str}\033\\\[m"
+}