[v2,2/5] Further cleanup/modernization of gdb.base/commands.exp

Message ID c018dbb5-5aeb-8e90-38a9-f4c7aa29d39f@redhat.com
State New, archived
Headers

Commit Message

Pedro Alves Nov. 9, 2016, 3:59 p.m. UTC
  On 11/09/2016 03:56 PM, Pedro Alves wrote:
> On 11/09/2016 03:02 AM, Simon Marchi wrote:
>> On 2016-11-08 19:19, Pedro Alves wrote:
>>> - Use multi_line for matching multi-line GDB output.
>>>
>>>  - Add a multi_line_input variant of multi_line to build GDB input and
>>>    use it throughout.
>>>
>>>    (The two changes above make the tests much more readable, IMO.)
>>>
>>>  - Remove gdb_stop_suppressing_tests uses.
>>>
>>>  - tighten a few regexps.
>>>
>>>  - Replace send_gdb/gdb_expect with gdb_test_multiple and simplify,
>>>    making pass/fail messages the same.
>>
>> I agree, the test is now much more readable.
>>
>>> +    gdb_test \
>>> +    [multi_line_input \
>>> +         "while \$foo > 0" \
>>> +         "  p/x 0xfeedface" \
>>> +         "  set \$foo -= 1" \
>>> +         "end"] \
>>> +    [multi_line \
>>> +         "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> +         "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> +         "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> +         "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> +         "\\\$\[0-9\]* = 0xfeedface"] \
>>> +    "#1"
>>
>> In these instance, what is the [^\n] meant to match?  Is it the \r?  In
>> that case, multi_line matches it, so I think we can get rid of them
>> (throughout the file).
>>
> 
> Indeed.  I did that now, with the patchlet below, and the test
> still passes.  Also found another place where we could use multi_line.

And I'm wondering whether this below as well would be a good idea,
or whether it'd obfuscate?  If a good idea, maybe we'd put the new
variable in gdb.exp.

From 6ad38c7fd5a2f3c2937b5de4e94d87b86894873e Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Wed, 9 Nov 2016 15:45:53 +0000
Subject: [PATCH] valnum

---
 gdb/testsuite/gdb.base/commands.exp | 89 ++++++++++++++++++++++---------------
 1 file changed, 54 insertions(+), 35 deletions(-)
  

Comments

Simon Marchi Nov. 9, 2016, 4:09 p.m. UTC | #1
On 2016-11-09 10:59, Pedro Alves wrote:
> And I'm wondering whether this below as well would be a good idea,
> or whether it'd obfuscate?  If a good idea, maybe we'd put the new
> variable in gdb.exp.

...

> @@ -45,7 +50,7 @@ proc_with_prefix gdbvar_simple_if_test {} {
>  	     "else" \
>  	     "  p/x 0xdeadbeef" \
>  	     "end"] \
> -	"\\\$\[0-9\]* = 0xdeadbeef" \
> +	"$valnum_re = 0xdeadbeef" \
>  	"#1"


That's not bad.  I was going to suggest using {} instead of "" to get 
rid of most backslashes (untested):

-"\\\$\[0-9\]* = 0xdeadbeef"
+{\$[0-9]* = 0xdeadbeef}

but with the variable it looks good as well.
  
Pedro Alves Nov. 9, 2016, 4:22 p.m. UTC | #2
On 11/09/2016 04:09 PM, Simon Marchi wrote:
> On 2016-11-09 10:59, Pedro Alves wrote:
>> And I'm wondering whether this below as well would be a good idea,
>> or whether it'd obfuscate?  If a good idea, maybe we'd put the new
>> variable in gdb.exp.
> 
> ...
> 
>> @@ -45,7 +50,7 @@ proc_with_prefix gdbvar_simple_if_test {} {
>>           "else" \
>>           "  p/x 0xdeadbeef" \
>>           "end"] \
>> -    "\\\$\[0-9\]* = 0xdeadbeef" \
>> +    "$valnum_re = 0xdeadbeef" \
>>      "#1"
> 
> 
> That's not bad.  I was going to suggest using {} instead of "" to get
> rid of most backslashes (untested):
> 
> -"\\\$\[0-9\]* = 0xdeadbeef"
> +{\$[0-9]* = 0xdeadbeef}

I strikes me that I can use {}when building the input strings.  I was
already doing it in the new tests added by the following patches, but
not in this one, for some reason.  Let me give that a try.

> 
> but with the variable it looks good as well.
> 

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp
index c4bf425..f7909dc 100644
--- a/gdb/testsuite/gdb.base/commands.exp
+++ b/gdb/testsuite/gdb.base/commands.exp
@@ -33,8 +33,13 @@  proc runto_or_return {function} {
     }
 }
 
+# A regular expression that matches a value history number.
+# E.g., $1, $2, etc.
+set valnum_re "\\\$$decimal"
+
 proc_with_prefix gdbvar_simple_if_test {} {
     global gdb_prompt
+    global valnum_re
 
     gdb_test_no_output "set \$foo = 0" "set foo"
     # All this test should do is print 0xdeadbeef once.
@@ -45,7 +50,7 @@  proc_with_prefix gdbvar_simple_if_test {} {
 	     "else" \
 	     "  p/x 0xdeadbeef" \
 	     "end"] \
-	"\\\$\[0-9\]* = 0xdeadbeef" \
+	"$valnum_re = 0xdeadbeef" \
 	"#1"
 
     # All this test should do is print 0xfeedface once.
@@ -56,12 +61,13 @@  proc_with_prefix gdbvar_simple_if_test {} {
 	     "else" \
 	     "  p/x 0xdeadbeef" \
 	     "end"] \
-	"\\\$\[0-9\]* = 0xfeedface" \
+	"$valnum_re = 0xfeedface" \
 	"#2"
 }
 
 proc_with_prefix gdbvar_simple_while_test {} {
     global gdb_prompt
+    global valnum_re
 
     gdb_test_no_output "set \$foo = 5" "set foo"
     # This test should print 0xfeedface five times.
@@ -72,16 +78,17 @@  proc_with_prefix gdbvar_simple_while_test {} {
 	     "  set \$foo -= 1" \
 	     "end"] \
 	[multi_line \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface"] \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface"] \
 	"#1"
 }
 
 proc_with_prefix gdbvar_complex_if_while_test {} {
     global gdb_prompt
+    global valnum_re
 
     gdb_test_no_output "set \$foo = 4" "set foo"
     # This test should alternate between 0xdeadbeef and 0xfeedface two times.
@@ -96,15 +103,16 @@  proc_with_prefix gdbvar_complex_if_while_test {} {
 	     "  end" \
 	     "end"] \
 	[multi_line \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface"] \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface"] \
 	"#1"
 }
 
 proc_with_prefix progvar_simple_if_test {} {
     global gdb_prompt
+    global valnum_re
 
     runto_or_return factorial
 
@@ -119,7 +127,7 @@  proc_with_prefix progvar_simple_if_test {} {
 	     "else" \
 	     "  p/x 0xdeadbeef" \
 	     "end"] \
-	"\\\$\[0-9\]* = 0xdeadbeef" \
+	"$valnum_re = 0xdeadbeef" \
 	"#1"
 
     # All this test should do is print 0xfeedface once.
@@ -130,12 +138,13 @@  proc_with_prefix progvar_simple_if_test {} {
 	     "else" \
 	     "  p/x 0xdeadbeef" \
 	     "end"] \
-	"\\\$\[0-9\]* = 0xfeedface" \
+	"$valnum_re = 0xfeedface" \
 	"#2"
 }
 
 proc_with_prefix progvar_simple_while_test {} {
     global gdb_prompt
+    global valnum_re
 
     runto_or_return factorial
 
@@ -150,16 +159,17 @@  proc_with_prefix progvar_simple_while_test {} {
 	     "  set value -= 1" \
 	     "end"] \
 	[multi_line \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xfeedface"] \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xfeedface"] \
 	"#1"
 }
 
 proc_with_prefix progvar_complex_if_while_test {} {
     global gdb_prompt
+    global valnum_re
 
     runto_or_return factorial
 
@@ -179,14 +189,16 @@  proc_with_prefix progvar_complex_if_while_test {} {
 	     "  end" \
 	     "end"] \
 	[multi_line \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface"] \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface"] \
 	"#1"
 }
 
 proc_with_prefix if_while_breakpoint_command_test {} {
+    global valnum_re
+
     runto_or_return factorial
 
     # Don't depend upon argument passing, since most simulators don't
@@ -218,10 +230,10 @@  proc_with_prefix if_while_breakpoint_command_test {} {
     gdb_test \
 	"continue" \
 	[multi_line \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface"] \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface"] \
 	"#1"
     gdb_test "info break" "while.*set.*if.*p/x.*else.*p/x.*end.*"
 }
@@ -282,6 +294,7 @@  proc_with_prefix breakpoint_command_test {} {
 # Test a simple user defined command (with arguments)
 proc_with_prefix user_defined_command_test {} {
     global gdb_prompt
+    global valnum_re
 
     gdb_test_no_output "set \$foo = 4" "set foo"
 
@@ -306,13 +319,16 @@  proc_with_prefix user_defined_command_test {} {
 	"" \
 	"enter commands"
 
+    global decimal
+    set valnum_re "\\\$$decimal"
+
     gdb_test \
 	"mycommand \$foo" \
 	[multi_line \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface" \
-	     "\\\$\[0-9\]* = 0xdeadbeef" \
-	     "\\\$\[0-9\]* = 0xfeedface"] \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface" \
+	     "$valnum_re = 0xdeadbeef" \
+	     "$valnum_re = 0xfeedface"] \
 	"execute user-defined command"
    gdb_test "show user mycommand" \
 	"  while \\\$arg0.*set.*    if \\\(\\\$arg0.*p/x.*    else\[^\n\].*p/x.*    end\[^\n\].*  end\[^\n\].*" \
@@ -414,6 +430,7 @@  proc_with_prefix watchpoint_command_test {} {
 
 proc_with_prefix test_command_prompt_position {} {
     global gdb_prompt
+    global valnum_re
 
     runto_or_return factorial
 
@@ -430,7 +447,7 @@  proc_with_prefix test_command_prompt_position {} {
 	     "else" \
 	     "  p/x 0xdeadbeef" \
 	     "end"] \
-	"\\\$\[0-9\]* = 0xdeadbeef" \
+	"$valnum_re = 0xdeadbeef" \
 	"if test"
 
     # Now let's test for the correct position of the '>' in gdb's
@@ -579,20 +596,22 @@  proc_with_prefix temporary_breakpoint_commands {} {
 # Test that GDB can handle $arg0 outside of user functions without
 # crashing.
 proc_with_prefix stray_arg0_test { } {
+    global valnum_re
+
     gdb_test "print \$arg0" \
-	"\\\$\[0-9\]* = void" \
+	"$valnum_re = void" \
 	"#1"
 
     gdb_test "if 1 == 1\nprint \$arg0\nend" \
-	"\\\$\[0-9\]* = void" \
+	"$valnum_re = void" \
 	"#2"
 
     gdb_test "print \$arg0 = 1" \
-	"\\\$\[0-9\]* = 1" \
+	"$valnum_re = 1" \
 	"#3"
 
     gdb_test "print \$arg0" \
-	"\\\$\[0-9\]* = 1" \
+	"$valnum_re = 1" \
 	"#4"
 }