From patchwork Sat Jun 1 21:23:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Waroquiers X-Patchwork-Id: 32964 Received: (qmail 80388 invoked by alias); 1 Jun 2019 21:23:54 -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 80294 invoked by uid 89); 1 Jun 2019 21:23:53 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.0 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=obtained, wrapped, UD:gdb.exp, l_entire_body X-HELO: mailsec102.isp.belgacom.be Received: from mailsec102.isp.belgacom.be (HELO mailsec102.isp.belgacom.be) (195.238.20.98) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 01 Jun 2019 21:23:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skynet.be; i=@skynet.be; q=dns/txt; s=securemail; t=1559424230; x=1590960230; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IBp08EqZq/iN27fZG3xs5tsjFvtQPUaNsBKEjpaC3S8=; b=oA8atsiprm9T44m0ILduOWCxvYz68FIJ+t0RJ/coAvNGY4wbdL2hoI9A mZo94BLgKO4fH8bmldyw91MZH02N3g==; Received: from 161.32-242-81.adsl-dyn.isp.belgacom.be (HELO md.home) ([81.242.32.161]) by relay.skynet.be with ESMTP/TLS/DHE-RSA-AES128-GCM-SHA256; 01 Jun 2019 23:23:40 +0200 From: Philippe Waroquiers To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [RFAv2 3/4] Update tests following changes to "help" and "apropos" Date: Sat, 1 Jun 2019 23:23:30 +0200 Message-Id: <20190601212331.12085-4-philippe.waroquiers@skynet.be> In-Reply-To: <20190601212331.12085-1-philippe.waroquiers@skynet.be> References: <20190601212331.12085-1-philippe.waroquiers@skynet.be> MIME-Version: 1.0 X-IsSubscribed: yes Factorizes the testing of the help output, by having a single place that defines the common help trailer and/or prefix messages. --- gdb/testsuite/ChangeLog | 15 +++++++ gdb/testsuite/gdb.base/help.exp | 7 +-- gdb/testsuite/gdb.base/style.exp | 33 ++++++++++++++ gdb/testsuite/gdb.guile/scm-cmd.exp | 4 +- gdb/testsuite/gdb.python/py-cmd.exp | 2 +- gdb/testsuite/gdb.trace/tracecmd.exp | 2 +- gdb/testsuite/lib/gdb-utils.exp | 2 + gdb/testsuite/lib/gdb.exp | 66 ++++++++++++++++++++-------- 8 files changed, 102 insertions(+), 29 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8d5f6bc637..3ab208377e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -16117,3 +16117,18 @@ For older changes see ChangeLog-1993-2013. Copyright 2014-2019 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. + +2019-05-31 Philippe Waroquiers + + * lib/gdb.exp (help_list_trailer): New regexp variable + factorizing the help trailer message. + (test_class_help): Use help_list_trailer. Add LIST_OF_COMMANDS + arg to allow to better factorize various tests. + (test_user_defined_class_help): Factorizes testing 'help user-defined'. + (test_prefix_command_help): Use help_list_trailer. + * gdb.python/py-cmd.exp: Use test_user_defined_class_help. + * gdb.guile/scm-cmd.exp: Likewise. + * gdb.trace/tracecmd.exp: Update caller of test_class_help. + * gdb.base/help.exp: Use test_user_defined_class_help. + * gdb.base/style.exp: Add tests for styling of help and apropos. + * lib/gdb-utils.exp (style): Add title and highlight styles. diff --git a/gdb/testsuite/gdb.base/help.exp b/gdb/testsuite/gdb.base/help.exp index 511e7d6238..e65f7c875f 100644 --- a/gdb/testsuite/gdb.base/help.exp +++ b/gdb/testsuite/gdb.base/help.exp @@ -51,11 +51,8 @@ test_class_help "support" {"Support facilities\.\[\r\n\]+"} test_class_help "tracepoints" { "Tracing of program execution without stopping the program\.\[\r\n\]+" } -test_class_help "user-defined" { - "User-defined commands\.\[\r\n\]+" - "The commands in this class are those defined by the user\.\[\r\n\]+" - "Use the \"define\" command to define a command\.\[\r\n\]+" -} + +test_user_defined_class_help # Test help of an abbreviated command. "break" is picked at random. set help_breakpoint_text "Set breakpoint at specified location\..*" diff --git a/gdb/testsuite/gdb.base/style.exp b/gdb/testsuite/gdb.base/style.exp index 15de05cdaf..a17f201486 100644 --- a/gdb/testsuite/gdb.base/style.exp +++ b/gdb/testsuite/gdb.base/style.exp @@ -90,6 +90,39 @@ save_vars { env(TERM) } { gdb_test "" "${vers}.*" \ "version is styled" + set address_style_expr [style "\"address\" style" address] + gdb_test "show style address foreground" \ + "The ${address_style_expr} foreground color is: blue" \ + "style name and style word styled using its own style in show style" + + set aliases_expr [style "aliases" title] + set breakpoints_expr [style "breakpoints" title] + gdb_test "help" \ + [multi_line \ + "List of classes of commands:" \ + "" \ + "${aliases_expr} -- Aliases of other commands" \ + "${breakpoints_expr} -- Making program stop at certain points" \ + ".*" \ + ] \ + "help classes of commands styled with title" + + set taas_expr [style "taas" title] + set tfaas_expr [style "tfaas" title] + set cut_for_thre_expr [style "cut for 'thre" highlight] + gdb_test "apropos -v cut for 'thre" \ + [multi_line \ + "" \ + "${taas_expr} --.*" \ + "Usage:.*" \ + "short${cut_for_thre_expr}ad apply.*" \ + "" \ + "${tfaas_expr} --.*" \ + "Usage:.*" \ + "short${cut_for_thre_expr}ad apply.*" \ + ] \ + "apropos -v cut for 'thre" + set quoted [string_to_regexp $binfile] gdb_test "file $binfile" \ "Reading symbols from [style $quoted file]..." \ diff --git a/gdb/testsuite/gdb.guile/scm-cmd.exp b/gdb/testsuite/gdb.guile/scm-cmd.exp index 3f24df3c9e..518da660c2 100644 --- a/gdb/testsuite/gdb.guile/scm-cmd.exp +++ b/gdb/testsuite/gdb.guile/scm-cmd.exp @@ -130,9 +130,7 @@ gdb_test "test-help ugh" "test-cmd output, arg = ugh" \ "call simple user-defined command" # Make sure the command shows up in `help user-defined`. -gdb_test "help user-defined" \ - "User-defined commands.\[\r\n\]+The commands in this class are those defined by the user.\[\r\n\]+Use the \"define\" command to define a command.\[\r\n\]+List of commands:\[\r\n\]+test-help -- Docstring\[\r\n\]+Type \"help\" followed by command name for full documentation.\[\r\n\]+Type \"apropos word\" to search for commands related to \"word\".\[\r\n\]+Command name abbreviations are allowed if unambiguous.\[\r\n\]+" \ - "see user-defined command in `help user-defined`" +test_user_defined_class_help {"test-help -- Docstring[\r\n]"} # Make sure the command does not show up in `show user`. gdb_test "show user test-help" "Not a user command\." \ diff --git a/gdb/testsuite/gdb.python/py-cmd.exp b/gdb/testsuite/gdb.python/py-cmd.exp index 9abdb0f39e..c7c7b8c899 100644 --- a/gdb/testsuite/gdb.python/py-cmd.exp +++ b/gdb/testsuite/gdb.python/py-cmd.exp @@ -159,7 +159,7 @@ gdb_py_test_multiple "input simple user-defined command" \ gdb_test "test_help ugh" "test_cmd output, arg = ugh" "call simple user-defined command" # Make sure the command shows up in `help user-defined`. -gdb_test "help user-defined" "User-defined commands.\[\r\n\]+The commands in this class are those defined by the user.\[\r\n\]+Use the \"define\" command to define a command.\[\r\n\]+\[\r\n\]+List of commands:\[\r\n\]+\[\r\n\]+test_help -- Docstring\[\r\n\]+\[\r\n\]+Type \"help\" followed by command name for full documentation.\[\r\n\]+Type \"apropos word\" to search for commands related to \"word\".\[\r\n\]+Command name abbreviations are allowed if unambiguous.\[\r\n\]+" "see user-defined command in `help user-defined`" +test_user_defined_class_help {"test_help -- Docstring[\r\n]"} # Make sure the command does not show up in `show user`. gdb_test "show user test_help" "Not a user command\." \ diff --git a/gdb/testsuite/gdb.trace/tracecmd.exp b/gdb/testsuite/gdb.trace/tracecmd.exp index 6aa3eb18a4..05350665db 100644 --- a/gdb/testsuite/gdb.trace/tracecmd.exp +++ b/gdb/testsuite/gdb.trace/tracecmd.exp @@ -55,7 +55,7 @@ set testline2 [expr $baseline + 3] set helpcnt 0 test_class_help "tracepoints" { "Tracing of program execution without stopping the program\.[\r\n\]+" -} "1.0: help tracepoints" +} {} "1.0: help tracepoints" # # test trace command: diff --git a/gdb/testsuite/lib/gdb-utils.exp b/gdb/testsuite/lib/gdb-utils.exp index a656788442..89767dc51c 100644 --- a/gdb/testsuite/lib/gdb-utils.exp +++ b/gdb/testsuite/lib/gdb-utils.exp @@ -48,8 +48,10 @@ proc string_to_regexp {str} { proc style {str style} { switch -exact -- $style { + title { set style 1 } file { set style 32 } function { set style 33 } + highlight { set style 31 } variable { set style 36 } address { set style 34 } } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index c703a7e633..da36ec0d4a 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -5550,35 +5550,64 @@ proc gdb_gnu_strip_debug { dest args } { # Test the output of GDB_COMMAND matches the pattern obtained # by concatenating all elements of EXPECTED_LINES. This makes # it possible to split otherwise very long string into pieces. -# If third argument is not empty, it's used as the name of the +# If third argument TESTNAME is not empty, it's used as the name of the # test to be printed on pass/fail. -proc help_test_raw { gdb_command expected_lines args } { - set message $gdb_command - if [llength $args]>0 then { - set message [lindex $args 0] - } +proc help_test_raw { gdb_command expected_lines {testname {}} } { + if {$testname == {}} { + set message $gdb_command + } else { + set message $testname + } set expected_output [join $expected_lines ""] gdb_test "${gdb_command}" "${expected_output}" $message } -# Test the output of "help COMMAND_CLASS". EXPECTED_INITIAL_LINES +# A regexp that matches the end of help CLASS|PREFIX_COMMAND +set help_list_trailer { + "Type \"apropos word\" to search for commands related to \"word\"\.[\r\n]+" + "Type \"apropos -v word\" for full documentation of commands related to \"word\"\.[\r\n]+" + "Command name abbreviations are allowed if unambiguous\." +} + +# Test the output of "help COMMAND_CLASS". EXPECTED_INITIAL_LINES # are regular expressions that should match the beginning of output, -# before the list of commands in that class. The presence of -# command list and standard epilogue will be tested automatically. +# before the list of commands in that class. +# LIST_OF_COMMANDS are regular expressions that should match the +# list of commands in that class. If empty, the command list will be +# matched automatically. The presence of standard epilogue will be tested +# automatically. +# If last argument TESTNAME is not empty, it's used as the name of the +# test to be printed on pass/fail. # Notice that the '[' and ']' characters don't need to be escaped for strings # wrapped in {} braces. -proc test_class_help { command_class expected_initial_lines args } { +proc test_class_help { command_class expected_initial_lines {list_of_commands {}} {testname {}} } { + global help_list_trailer + if {[llength $list_of_commands]>0} { + set l_list_of_commands {"List of commands:[\r\n]+[\r\n]+"} + set l_list_of_commands [concat $l_list_of_commands $list_of_commands] + set l_list_of_commands [concat $l_list_of_commands {"[\r\n]+[\r\n]+"}] + } else { + set l_list_of_commands {"List of commands\:.*[\r\n]+"} + } set l_stock_body { - "List of commands\:.*[\r\n]+" "Type \"help\" followed by command name for full documentation\.[\r\n]+" - "Type \"apropos word\" to search for commands related to \"word\"\.[\r\n]+" - "Command name abbreviations are allowed if unambiguous\." } - set l_entire_body [concat $expected_initial_lines $l_stock_body] + set l_entire_body [concat $expected_initial_lines $l_list_of_commands \ + $l_stock_body $help_list_trailer] - eval [list help_test_raw "help ${command_class}" $l_entire_body] $args + help_test_raw "help ${command_class}" $l_entire_body $testname } +# Like test_class_help but specialised to test "help user-defined". +proc test_user_defined_class_help { {list_of_commands {}} {testname {}} } { + test_class_help "user-defined" { + "User-defined commands\.[\r\n]+" + "The commands in this class are those defined by the user\.[\r\n]+" + "Use the \"define\" command to define a command\.[\r\n]+" + } $list_of_commands $testname +} + + # COMMAND_LIST should have either one element -- command to test, or # two elements -- abbreviated command to test, and full command the first # element is abbreviation of. @@ -5587,6 +5616,7 @@ proc test_class_help { command_class expected_initial_lines args } { # before the list of subcommands. The presence of # subcommand list and standard epilogue will be tested automatically. proc test_prefix_command_help { command_list expected_initial_lines args } { + global help_list_trailer set command [lindex $command_list 0] if {[llength $command_list]>1} { set full_command [lindex $command_list 1] @@ -5597,10 +5627,8 @@ proc test_prefix_command_help { command_list expected_initial_lines args } { # be expanded in this list. set l_stock_body [list\ "List of $full_command subcommands\:.*\[\r\n\]+"\ - "Type \"help $full_command\" followed by $full_command subcommand name for full documentation\.\[\r\n\]+"\ - "Type \"apropos word\" to search for commands related to \"word\"\.\[\r\n\]+"\ - "Command name abbreviations are allowed if unambiguous\."] - set l_entire_body [concat $expected_initial_lines $l_stock_body] + "Type \"help $full_command\" followed by $full_command subcommand name for full documentation\.\[\r\n\]+"] + set l_entire_body [concat $expected_initial_lines $l_stock_body $help_list_trailer] if {[llength $args]>0} { help_test_raw "help ${command}" $l_entire_body [lindex $args 0] } else {