From 746ebfe8dd7aa7d9ec8e9651871f6e11fbf14537 Mon Sep 17 00:00:00 2001 From: Philippe Waroquiers Date: Sun, 23 Jun 2019 23:13:57 +0200 Subject: [PATCH] Add tests for new alias default-args related commands and arguments. Test the new default-args behaviour and completion for the alias command. Note that gdb.base/default-args.exp is somewhat copied from with.exp (the test of the with command), while default-exp.c is a plain copy of with.c. gdb/testsuite/ChangeLog 2020-06-22 Philippe Waroquiers * gdb.base/default-args.exp: New test. * gdb.base/default-args.c: New file. * gdb.base/alias.exp: Update expected error msg for alias foo=bar. * gdb.base/default.exp: Update to new help text. * gdb.base/help.exp: Likewise. * gdb.base/page.exp: Likewise. * gdb.base/style.exp: Likewise. * gdb.guile/guile.exp: Likewise. * gdb.python/python.exp: Likewise. --- gdb/testsuite/ChangeLog | 12 +++ gdb/testsuite/gdb.base/alias.exp | 2 +- gdb/testsuite/gdb.base/default-args.c | 39 ++++++++ gdb/testsuite/gdb.base/default-args.exp | 123 ++++++++++++++++++++++++ gdb/testsuite/gdb.base/default.exp | 4 +- gdb/testsuite/gdb.base/help.exp | 2 +- gdb/testsuite/gdb.base/page.exp | 4 +- gdb/testsuite/gdb.base/style.exp | 8 +- gdb/testsuite/gdb.guile/guile.exp | 2 +- gdb/testsuite/gdb.python/python.exp | 2 +- 10 files changed, 187 insertions(+), 11 deletions(-) create mode 100644 gdb/testsuite/gdb.base/default-args.c create mode 100644 gdb/testsuite/gdb.base/default-args.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 1d3c764de05..d6c43e65f06 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2020-06-22 Philippe Waroquiers + + * gdb.base/default-args.exp: New test. + * gdb.base/default-args.c: New file. + * gdb.base/alias.exp: Update expected error msg for alias foo=bar. + * gdb.base/default.exp: Update to new help text. + * gdb.base/help.exp: Likewise. + * gdb.base/page.exp: Likewise. + * gdb.base/style.exp: Likewise. + * gdb.guile/guile.exp: Likewise. + * gdb.python/python.exp: Likewise. + 2020-06-22 Sandra Loosemore * gdb.base/source-dir.exp (test_truncated_comp_dir): Skip on diff --git a/gdb/testsuite/gdb.base/alias.exp b/gdb/testsuite/gdb.base/alias.exp index 6993d426484..03c440dfd7b 100644 --- a/gdb/testsuite/gdb.base/alias.exp +++ b/gdb/testsuite/gdb.base/alias.exp @@ -56,7 +56,7 @@ test_abbrev_alias set6 "alias -a -- set6 = set" 46 test_abbrev_alias -a "alias -a -- -a = set" 47 gdb_test "alias set2=set" "already exists: set2" -gdb_test "alias foo=bar" "Invalid command to alias to: bar" +gdb_test "alias foo=bar" "Undefined command: \"bar\". Try \"help\"." gdb_test_no_output "alias spe = set p elem" gdb_test_no_output "spe 50" diff --git a/gdb/testsuite/gdb.base/default-args.c b/gdb/testsuite/gdb.base/default-args.c new file mode 100644 index 00000000000..23f159f7008 --- /dev/null +++ b/gdb/testsuite/gdb.base/default-args.c @@ -0,0 +1,39 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2020 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 . */ + +struct S +{ + int a; + int b; + int c; +}; + +struct S g_s = {1, 2, 3}; + +static void +inc (void) +{ + g_s.a++;; +} + +int +main (void) +{ + inc (); + + return 0; +} diff --git a/gdb/testsuite/gdb.base/default-args.exp b/gdb/testsuite/gdb.base/default-args.exp new file mode 100644 index 00000000000..9cb3ef8def9 --- /dev/null +++ b/gdb/testsuite/gdb.base/default-args.exp @@ -0,0 +1,123 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2019 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 . + +# Test the "default-args" arguments and completion of alias command. + +load_lib completion-support.exp + +standard_testfile .c + +if {[build_executable "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +clean_restart $binfile + +# Basic/core tests using user-visible commands. +with_test_prefix "basics" { + # Define an alias to pretty print something. + gdb_test "print g_s" " = {a = 1, b = 2, c = 3}" "simple print" + gdb_test_no_output "alias PP = print -pretty --" "alias PP" + gdb_test "help PP" "print, PP, inspect, p\r\n alias PP = print -pretty --\r\n.*" + gdb_test "PP g_s" \ + [multi_line \ + " = {" \ + " a = 1," \ + " b = 2," \ + " c = 3" \ + "}"] + + # Define an alias of frame apply all with some default args. + gdb_test_no_output "alias frame apply tout = frame apply all -past-entry -past-main" \ + "alias frame apply tout" + gdb_test "help frame apply tout" \ + "frame apply all, frame apply tout\r\n alias frame apply tout = frame apply all -past-entry -past-main\r\n.*" + + # Show all aliases. + gdb_test "help aliases" \ + [multi_line \ + "User-defined aliases of other commands." \ + "" \ + "List of commands:" \ + "" \ + "PP -- Print value of expression EXP." \ + " alias PP = print -pretty --" \ + "frame apply tout -- Apply a command to all frames." \ + " alias frame apply tout = frame apply all -past-entry -past-main" \ + ".*" ] \ + "help aliases" +} + +# Check errors. +with_test_prefix "errors" { + # Try an unknown root setting. + gdb_test "alias wrong = xxxx yyyy -someoption" \ + "Undefined command: \"xxxx\". Try \"help\"\\." + + # Try ambiguous command. + gdb_test "alias wrong = a" \ + "Ambiguous command \"a\":.*" "ambiguous a" + gdb_test "alias wrong = frame a" \ + "Ambiguous frame command \"a\":.*" "ambiguous frame a" +} + + +# Check completion. +with_test_prefix "completion" { + test_gdb_complete_unique \ + "alias set pri" \ + "alias set print" + + test_gdb_complete_unique \ + "alias set print items = set pri" \ + "alias set print items = set print" + + test_gdb_complete_unique \ + "alias set print items = set print ele" \ + "alias set print items = set print elements" + + test_gdb_complete_unique \ + "alias btfu = backt" \ + "alias btfu = backtrace" + + test_gdb_complete_unique \ + "alias btfu = backtrace -fu" \ + "alias btfu = backtrace -full" + + test_gdb_complete_unique \ + "alias btfu = backtrace -full -past-e" \ + "alias btfu = backtrace -full -past-entry" + + gdb_test_no_output "alias btfu = backtrace -full -past-entry" \ + "alias btfu" + +} + +# Check alias of alias. +with_test_prefix "alias_of_alias" { + # Verify we can alias an alias that has no default args. + # We allow an alias of an alias, to be backward compatible with + # GDB 9.1 . + gdb_test_no_output "alias aaa = backtrace" + gdb_test_no_output "alias bbb = backtrace" + + # Verify that we cannot define an alias of an alias that has default args. + gdb_test_no_output "alias ccc = backtrace -full" + gdb_test "alias ddd = ccc" \ + "Cannot define an alias of an alias that has default args" + +} diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp index c34bb9a92a9..ac1a0f5b6e6 100644 --- a/gdb/testsuite/gdb.base/default.exp +++ b/gdb/testsuite/gdb.base/default.exp @@ -247,9 +247,9 @@ gdb_test_multiple "generate-core-file" "generate-core-file" { } #test help "h" abbreviation -gdb_test "h" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- Aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "help \"h\" abbreviation" +gdb_test "h" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- User-defined aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "help \"h\" abbreviation" #test help -gdb_test "help" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- Aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." +gdb_test "help" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- User-defined aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test handle gdb_test "handle" "Argument required .signal to handle.*" #test info "i" abbreviation diff --git a/gdb/testsuite/gdb.base/help.exp b/gdb/testsuite/gdb.base/help.exp index 8ed0be45dbc..0b6893cf79a 100644 --- a/gdb/testsuite/gdb.base/help.exp +++ b/gdb/testsuite/gdb.base/help.exp @@ -25,7 +25,7 @@ gdb_start gdb_test_no_output "set height 0" "disable pagination" # Test all the help classes. -test_class_help "aliases" {"Aliases of other commands\.\[\r\n\]+"} +test_class_help "aliases" {"User-defined aliases of other commands\.\[\r\n\]+"} test_class_help "breakpoints" { "Making program stop at certain points\.\[\r\n\]+" } diff --git a/gdb/testsuite/gdb.base/page.exp b/gdb/testsuite/gdb.base/page.exp index c34c886c644..59368458855 100644 --- a/gdb/testsuite/gdb.base/page.exp +++ b/gdb/testsuite/gdb.base/page.exp @@ -23,7 +23,7 @@ gdb_test "show pagination" "State of pagination is off.*" "pagination is off" gdb_test_sequence "help" "unpaged help" { "List of classes of commands:" "" - "aliases -- Aliases of other commands" + "aliases -- User-defined aliases of other commands" "breakpoints -- Making program stop at certain points" "data -- Examining data" "files -- Specifying and examining files" @@ -50,7 +50,7 @@ gdb_expect_list "paged help" \ ".*$pagination_prompt" { "List of classes of commands:" "" - "aliases -- Aliases of other commands" + "aliases -- User-defined aliases of other commands" "breakpoints -- Making program stop at certain points" "data -- Examining data" "files -- Specifying and examining files" diff --git a/gdb/testsuite/gdb.base/style.exp b/gdb/testsuite/gdb.base/style.exp index 129f1746a39..bfd26144fa4 100644 --- a/gdb/testsuite/gdb.base/style.exp +++ b/gdb/testsuite/gdb.base/style.exp @@ -120,7 +120,7 @@ save_vars { env(TERM) } { [multi_line \ "List of classes of commands:" \ "" \ - "${aliases_expr} -- Aliases of other commands\." \ + "${aliases_expr} -- User-defined aliases of other commands\." \ "${breakpoints_expr} -- Making program stop at certain points\." \ ".*" \ ] \ @@ -132,11 +132,13 @@ save_vars { env(TERM) } { gdb_test "apropos -v cut for 'thre" \ [multi_line \ "" \ - "${taas_expr} --.*" \ + "${taas_expr}" \ + "Apply a command to all .*" \ "Usage:.*" \ "short${cut_for_thre_expr}ad apply.*" \ "" \ - "${tfaas_expr} --.*" \ + "${tfaas_expr}" \ + "Apply a command to all .*" \ "Usage:.*" \ "short${cut_for_thre_expr}ad apply.*" \ ] diff --git a/gdb/testsuite/gdb.guile/guile.exp b/gdb/testsuite/gdb.guile/guile.exp index 2b0c0ba1d41..1f80c8a2384 100644 --- a/gdb/testsuite/gdb.guile/guile.exp +++ b/gdb/testsuite/gdb.guile/guile.exp @@ -80,5 +80,5 @@ gdb_test "guile (print x)" "= 23" gdb_test_no_output "guile (define a (execute \"help\" #:to-string #t))" \ "collect help from uiout" -gdb_test "guile (print a)" "= .*aliases -- Aliases of other commands.*" \ +gdb_test "guile (print a)" "= .*aliases -- User-defined aliases of other commands.*" \ "verify help to uiout" diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp index a50a7b43e2c..a751787b262 100644 --- a/gdb/testsuite/gdb.python/python.exp +++ b/gdb/testsuite/gdb.python/python.exp @@ -187,7 +187,7 @@ gdb_test_no_output "set height 0" gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect help from uiout" -gdb_test "python print (a)" ".*aliases -- Aliases of other commands.*" "verify help to uiout" +gdb_test "python print (a)" ".*aliases -- User-defined aliases of other commands.*" "verify help to uiout" # Test PR 12212, using InfThread.selected_thread() when no inferior is # loaded. -- 2.30.2