From patchwork Sat Sep 7 11:38:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Waroquiers X-Patchwork-Id: 34444 Received: (qmail 105163 invoked by alias); 7 Sep 2019 11:38:42 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 105106 invoked by uid 89); 7 Sep 2019 11:38:41 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.1 spammy=zzz X-HELO: mailsec106.isp.belgacom.be Received: from mailsec106.isp.belgacom.be (HELO mailsec106.isp.belgacom.be) (195.238.20.102) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 07 Sep 2019 11:38:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skynet.be; i=@skynet.be; q=dns/txt; s=securemail; t=1567856319; x=1599392319; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4JM1qspPGj86PGMhDa55pF+44kLVHLoho3t3RCD14t0=; b=duxVgaBN6AV3HAwBt+sEj7E3RAe75rzxZf59LO8wy1ktsRtPLIpTYgB/ L8EGUcsqnEi7qCN5JCKRMBd/x66aEA==; Received: from 255.38-242-81.adsl-dyn.isp.belgacom.be (HELO md.home) ([81.242.38.255]) by relay.skynet.be with ESMTP/TLS/DHE-RSA-AES128-GCM-SHA256; 07 Sep 2019 13:38:32 +0200 From: Philippe Waroquiers To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [RFAv4 2/3] Test the convenience functions $_gdb_setting and $_gdb_int_setting. Date: Sat, 7 Sep 2019 13:38:22 +0200 Message-Id: <20190907113823.17436-3-philippe.waroquiers@skynet.be> In-Reply-To: <20190907113823.17436-1-philippe.waroquiers@skynet.be> References: <20190907113823.17436-1-philippe.waroquiers@skynet.be> MIME-Version: 1.0 X-IsSubscribed: yes gdb/testsuite/ChangeLog 2019-09-07 Philippe Waroquiers * gdb.base/setshow.exp: Test $_gdb_setting and $_gdb_setting_str. * gdb.base/settings.exp: Test all settings types using $_gdb_maint_setting and $_gdb_maint_setting_str in proc_show_setting, that now verifies that the value of "maint show" is the same as returned by the settings functions. * gdb.base/default.exp: Update show_conv_list. --- gdb/testsuite/gdb.base/default.exp | 4 ++ gdb/testsuite/gdb.base/setshow.exp | 60 ++++++++++++++++++++++++- gdb/testsuite/gdb.base/settings.exp | 68 ++++++++++++++++++++++++++--- 3 files changed, 125 insertions(+), 7 deletions(-) diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp index 0325b8045d..114831f2fc 100644 --- a/gdb/testsuite/gdb.base/default.exp +++ b/gdb/testsuite/gdb.base/default.exp @@ -604,6 +604,10 @@ set show_conv_list \ {$_cimag = } \ {$_creal = } \ {$_isvoid = } \ + {$_gdb_maint_setting_str = } \ + {$_gdb_maint_setting = } \ + {$_gdb_setting_str = } \ + {$_gdb_setting = } \ {$_gdb_major = 8} \ {$_gdb_minor = 4} \ {$_shell_exitsignal = void} \ diff --git a/gdb/testsuite/gdb.base/setshow.exp b/gdb/testsuite/gdb.base/setshow.exp index d807d75a66..4c25c7bb32 100644 --- a/gdb/testsuite/gdb.base/setshow.exp +++ b/gdb/testsuite/gdb.base/setshow.exp @@ -91,6 +91,9 @@ gdb_test "show args" "Argument list to give program being debugged when it is st gdb_test_no_output "set args foo bar blup baz bubble" "set args" #test show args gdb_test "show args" "Argument list to give program being debugged when it is started is \"foo bar blup baz bubble\"..*" "show args" +gdb_test "p \$_gdb_setting(\"args\")" ".*\"foo bar blup baz bubble\"" \ + "_gdb_setting args" + # Don't test if we can't pass args or if we're using a stub. if { !$use_gdb_stub && ![target_info exists noargs] } { @@ -100,17 +103,23 @@ if { !$use_gdb_stub && ![target_info exists noargs] } { gdb_test "run" "Starting program:.*foo bar blup baz bubble.*" "passing args" } #test set check range on -gdb_test "set check range on" ".*" "set check range on" +gdb_test "set check range on" ".*" "set check range on" +gdb_test "p \$_gdb_setting(\"check range\")" ".*\"on\"" \ + "_gdb_setting check range on" #test show check range on gdb_test "show check range" "Range checking is \"on\"\..*" "show check range (on)" #test set check range off with trailing space gdb_test_no_output "set check range off " "set check range off" #test show check range off gdb_test "show check range" "Range checking is \"off\"\..*" "show check range (off)" +gdb_test "p \$_gdb_setting(\"check range\")" ".*\"off\"" \ + "_gdb_setting check range off" #test set check range auto gdb_test_no_output "set check range auto" "set check range auto" #test show check range auto gdb_test "show check range" "Range checking is \"auto; currently .*" "show check range (auto)" +gdb_test "p \$_gdb_setting(\"check range\")" ".*\"auto\"" \ + "_gdb_setting check range auto" # Test set check type on gdb_test "set check type on" ".*" "set check type on" @@ -118,14 +127,49 @@ gdb_test "set check type on" ".*" "set check type on" # Test show check type on gdb_test "show check type" "Strict type checking is on\..*" \ "show check type (on)" +gdb_test "p \$_gdb_setting_str(\"check type\")" ".*\"on\"" \ + "_gdb_setting_str check type on" +gdb_test "p \$_gdb_setting(\"check type\")" ".*= 1" \ + "_gdb_setting check type on 1" # Test set check type off with trailing space gdb_test_no_output "set check type off " "set check type off" +gdb_test "p \$_gdb_setting_str(\"check type\")" ".*\"off\"" \ + "_gdb_setting_str check type off" +gdb_test "p \$_gdb_setting(\"check type\")" ".*= 0" \ + "_gdb_setting check type off 0" # Test show check type off gdb_test "show check type" "Strict type checking is off\..*" \ "show check type (off)" +#test set breakpoint pending +#test set breakpoint pending on +gdb_test "set breakpoint pending on" ".*" "set breakpoint pending on" +gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" ".*\"on\"" \ + "_gdb_setting_str breakpoint pending on" +gdb_test "p \$_gdb_setting(\"breakpoint pending\")" ".*= 1" \ + "_gdb_setting breakpoint pending 1" +#test show breakpoint pending on +gdb_test "show breakpoint pending" ".* is on\..*" "show breakpoint pending on" +#test show breakpoint pending off +gdb_test "set breakpoint pending off" ".*" "set breakpoint pending off" +gdb_test "show breakpoint pending" ".* is off\..*" "show breakpoint pending off" +gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" ".*\"off\"" \ + "_gdb_setting_str breakpoint pending off" +gdb_test "p \$_gdb_setting(\"breakpoint pending\")" ".* = 0" \ + "_gdb_setting breakpoint pending 0" +#test set breakpoint pending auto +gdb_test_no_output "set breakpoint pending auto" "set breakpoint pending auto" +#test show breakpoint pending auto +gdb_test "show breakpoint pending" " is auto.*" "show breakpoint pending auto" +gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" ".*\"auto\"" \ + "_gdb_setting_str breakpoint pending auto" +gdb_test "p \$_gdb_setting(\"breakpoint pending\")" ".* = -1" \ + "_gdb_setting breakpoint pending -1" + + + #test set complaints 100 gdb_test_no_output "set complaints 100" "set complaints 100" #test show complaints 100 @@ -159,9 +203,17 @@ gdb_test "show environment FOOBARBAZ" "FOOBARBAZ = grbxgrbxgrbx.*" "show enviro gdb_test_no_output "set height 100" "set height 100" #test show height 100 gdb_test "show height" "Number of lines gdb thinks are in a page is 100..*" "show height" +gdb_test "p \$_gdb_setting_str(\"height\")" ".*\"100\"" \ + "_gdb_setting_str height 100" +gdb_test "p \$_gdb_setting(\"height\")" ".*= 100" \ + "_gdb_setting height 100" # Back to infinite height to avoid pagers. While at it, check that # literal "unlimited" works just as well as 0. gdb_test_no_output "set height unlimited" +gdb_test "p \$_gdb_setting_str(\"height\")" ".*\"unlimited\"" \ + "_gdb_setting_str height unlimited" +gdb_test "p \$_gdb_setting(\"height\")" ".*= 0" \ + "_gdb_setting height unlimited" #test set history expansion on gdb_test_no_output "set history expansion on" "set history expansion on" #test show history expansion on @@ -182,6 +234,12 @@ gdb_test_no_output "set history filename ~/foobar.baz" \ gdb_test "show history filename" \ "The filename in which to record the command history is \"[string_to_regexp $HOME]/foobar.baz\"..*" \ "show history filename (~/foobar.baz)" +gdb_test "p \$_gdb_setting(\"history filename\")" \ + ".*\"[string_to_regexp $HOME]/foobar.baz\"..*" \ + "_gdb_setting history filename" +gdb_test "p \$_gdb_setting_str(\"history filename\")" \ + ".*\"[string_to_regexp $HOME]/foobar.baz\"..*" \ + "_gdb_setting_str history filename" #get current working directory set PWD "" set test "show working directory" diff --git a/gdb/testsuite/gdb.base/settings.exp b/gdb/testsuite/gdb.base/settings.exp index 53049d6b59..102e0c57a4 100644 --- a/gdb/testsuite/gdb.base/settings.exp +++ b/gdb/testsuite/gdb.base/settings.exp @@ -35,13 +35,69 @@ if { ![readline_is_used] } { } # Test the show command SHOW_CMD. EXPECTED_RE is the expected output. -# This procedure exists in order to make it easier to make the test +# Also verifies that $_gdb_maint_setting_str produces an equivalent output, +# matching it with EXPECTED_RE. EXPECTED_RE double quotes are escaped +# unless EXPECTED_RE_QUOTED is 1, indicating the quotes in EXPECTED_RE +# are already escaped. +# The value for the setting corresponding to SHOW_CMD is then reset +# to RESET_VALUE, then set again to the value given by $_gdb_maint_setting_str +# and $_gdb_maint_setting. +# The setting value must still be the one in force before calling show_setting. +# In other words, this verifies that +# maint set test-settings $_gdb_maint_setting_str() +# maint set test-settings $_gdb_maint_setting() +# do not change the setting value. +# This procedure makes it easier to make the test # name/message unique, since we test the "show" commands many times. # EXPECTED_RE is made part of the test name. -proc show_setting {show_cmd expected_re} { +proc show_setting {show_cmd expected_re {expected_re_quoted 0} {reset_value 0}} { + global gdb_prompt gdb_test "$show_cmd" $expected_re "$show_cmd: $expected_re" + + # Remove the first two words (such as "maint show") to have the + # setting name to use for $_gdb_maint_setting_str. + regsub "\[^ \]+ +\[^ \]+ +\(.*\)" $show_cmd "\\1" maint_setting + if {$expected_re_quoted == 1} { + set quoted_expected_re $expected_re + } else { + regsub -all "\"" $expected_re "\\\\\\\"" quoted_expected_re + } + set test "print \$_gdb_maint_setting_str(\"$maint_setting\") $quoted_expected_re $expected_re" + gdb_test_multiple "print \$_gdb_maint_setting_str(\"$maint_setting\")" $test { + -re ".*= \"\($quoted_expected_re\)\".*$gdb_prompt $" { + set setting_str_value $expect_out(1,string) + regsub -all "\\\\" $expect_out(1,string) "" setting_str_value + pass "$test value $setting_str_value" + } + } + + # Change the setting value to RESET_VALUE, set it back to setting_str_value + # and check we still have the original value. + gdb_test_no_output "maintenance set $maint_setting $reset_value" "str reset $show_cmd: $expected_re" + gdb_test_no_output "maintenance set $maint_setting $setting_str_value" "str set again $show_cmd: $expected_re" + gdb_test "$show_cmd" $expected_re "str $show_cmd: $expected_re after reset+set again" + + # Same test, but with value captured from $_gdb_maint_setting. + set test "print \$_gdb_maint_setting(\"$maint_setting\") $quoted_expected_re $expected_re" + gdb_test_multiple "print \$_gdb_maint_setting(\"$maint_setting\")" $test { + -re ".*= \"\(.*\)\".*$gdb_prompt $" { + set setting_value $expect_out(1,string) + regsub -all "\\\\" $expect_out(1,string) "" setting_value + pass "$test quoted value $setting_value" + } + -re ".*= \(.*\)\r\n$gdb_prompt $" { + set setting_value $expect_out(1,string) + pass "$test non quoted value $setting_value" + } + } + + gdb_test_no_output "maintenance set $maint_setting $reset_value" "reset $show_cmd: $expected_re" + gdb_test_no_output "maintenance set $maint_setting $setting_value" "set again $show_cmd: $expected_re" + gdb_test "$show_cmd" $expected_re "$show_cmd: $expected_re after reset+set again" + } + # var_Xinteger tests. VARIANT determines which command/variant to # exercise. proc test-integer {variant} { @@ -409,11 +465,11 @@ proc_with_prefix test-enum {} { # Various valid values. Test both full value names and # abbreviations. gdb_test_no_output "$set_cmd x" - show_setting "$show_cmd" "xxx" + show_setting "$show_cmd" "xxx" 0 "zzz" gdb_test_no_output "$set_cmd yy" - show_setting "$show_cmd" "yyy" + show_setting "$show_cmd" "yyy" 0 "zzz" gdb_test_no_output "$set_cmd zzz" - show_setting "$show_cmd" "zzz" + show_setting "$show_cmd" "zzz" 0 "yyy" test_gdb_complete_multiple "$set_cmd " "" "" { "xxx" @@ -461,7 +517,7 @@ proc test-string {variant} { # A quoted string value. if {$variant == "string"} { gdb_test_no_output "$set_cmd \"hello world\"" - show_setting "$show_cmd" "\\\\\"hello world\\\\\"" + show_setting "$show_cmd" "\\\\\"hello world\\\\\"" 1 } else { gdb_test_no_output "$set_cmd \"hello world\"" show_setting "$show_cmd" "\"hello world\""