gdb/testsuite: Reduce test name duplication in gdb.python tests
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.python / py-parameter.exp
index 63f4ff2f4df41e298050ee955ea5d0959578b954..b2f78777338a072e2e92aeb0e4d877b82e972096 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2010-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
 # This file is part of the GDB testsuite.
 # It tests gdb.parameter and gdb.Parameter.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
 # Start with a fresh gdb.
@@ -31,147 +27,251 @@ gdb_reinitialize_dir $srcdir/$subdir
 if { [skip_python_tests] } { continue }
 
 # We use "." here instead of ":" so that this works on win32 too.
-gdb_test "python print gdb.parameter ('directories')" "$srcdir/$subdir.\\\$cdir.\\\$cwd"
+if { [is_remote host] } {
+    # Don't match $srcdir/$subdir because proc gdb_reinitialize_dir
+    # doesn't set search directories on remote host.
+    set directories ".*\\\$cdir.\\\$cwd"
+} else {
+    set escaped_directory [string_to_regexp "$srcdir/$subdir"]
+    set directories "$escaped_directory.\\\$cdir.\\\$cwd"
+}
+gdb_test "python print (gdb.parameter ('directories'))" $directories
 
 # Test a simple boolean parameter.
-gdb_py_test_multiple "Simple gdb booleanparameter" \
-   "python" "" \
-   "class TestParam (gdb.Parameter):" "" \
-   "   \"\"\"When enabled, test param does something useful. When disabled, does nothing.\"\"\"" "" \
-   "   show_doc = \"Show the state of the boolean test-param\"" ""\
-   "   set_doc = \"Set the state of the boolean test-param\"" "" \
-   "   def get_show_string (self, pvalue):" ""\
-   "      return \"The state of the Test Parameter is \" + pvalue" ""\
-   "   def get_set_string (self):" ""\
-   "      val = \"on\"" ""\
-   "      if (self.value == False):" ""\
-   "         val = \"off\"" ""\
-   "      return \"Test Parameter has been set to \" + val" ""\
-   "   def __init__ (self, name):" "" \
-   "      super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
-   "      self.value = True" "" \
-   "test_param = TestParam ('print test-param')" ""\
-   "end"
-
-gdb_test "python print test_param.value" "True" "Test parameter value"
-gdb_test "show print test-param" "The state of the Test Parameter is on.*" "Show parameter on"
-gdb_test "set print test-param off" "Test Parameter has been set to off" "Turn off parameter"
-gdb_test "show print test-param" "The state of the Test Parameter is off.*" "Show parameter off"
-gdb_test "python print test_param.value" "False" "Test parameter value"
-gdb_test "help show print test-param" "Show the state of the boolean test-param.*" "Test show help"
-gdb_test "help set print test-param" "Set the state of the boolean test-param.*" "Test set help"
-gdb_test "help set print" "set print test-param -- Set the state of the boolean test-param.*" "Test general help"
+with_test_prefix "boolean parameter" {
+    gdb_py_test_multiple "Simple gdb booleanparameter" \
+       "python" "" \
+       "class TestParam (gdb.Parameter):" "" \
+       "   \"\"\"When enabled, test param does something useful. When disabled, does nothing.\"\"\"" "" \
+       "   show_doc = \"Show the state of the boolean test-param\"" ""\
+       "   set_doc = \"Set the state of the boolean test-param\"" "" \
+       "   def get_show_string (self, pvalue):" ""\
+       "      return \"The state of the Test Parameter is \" + pvalue" ""\
+       "   def get_set_string (self):" ""\
+       "      val = \"on\"" ""\
+       "      if (self.value == False):" ""\
+       "         val = \"off\"" ""\
+       "      return \"Test Parameter has been set to \" + val" ""\
+       "   def __init__ (self, name):" "" \
+       "      super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
+       "      self.value = True" "" \
+       "test_param = TestParam ('print test-param')" ""\
+       "end"
 
+    gdb_test "python print (test_param.value)" "True" \
+       "test boolean parameter value is True"
+    gdb_test "show print test-param" \
+       "The state of the Test Parameter is on.*" "show parameter on"
+    gdb_test "set print test-param off" \
+       "Test Parameter has been set to off" "turn off parameter"
+    gdb_test "show print test-param" \
+       "The state of the Test Parameter is off.*" "show parameter off"
+    gdb_test "python print (test_param.value)" "False" \
+       "test boolean parameter value is False"
+    gdb_test "help show print test-param" \
+       "Show the state of the boolean test-param.*" "test show help"
+    gdb_test "help set print test-param" \
+       "Set the state of the boolean test-param.*" "test set help"
+    gdb_test "help set print" \
+       "set print test-param -- Set the state of the boolean test-param.*" \
+       "test general help"
+}
 
 # Test an enum parameter.
-gdb_py_test_multiple "enum gdb parameter" \
-   "python" "" \
-   "class TestEnumParam (gdb.Parameter):" "" \
-   "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
-   "   show_doc = \"Show the state of the enum\"" ""\
-   "   set_doc = \"Set the state of the enum\"" "" \
-   "   def get_show_string (self, pvalue):" ""\
-   "      return \"The state of the enum is \" + pvalue" ""\
-   "   def get_set_string (self):" ""\
-   "      return \"The state of the enum has been set to \" + self.value" ""\
-   "   def __init__ (self, name):" "" \
-   "      super (TestEnumParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_ENUM, \[\"one\", \"two\"\])" "" \
-   "      self.value = \"one\"" "" \
-   "test_enum_param = TestEnumParam ('print test-enum-param')" ""\
-   "end"
-
-gdb_test "python print test_enum_param.value" "one" "Test enum parameter value"
-gdb_test "show print test-enum-param" "The state of the enum is one.*" "Show parameter is initial value"
-gdb_test "set print test-enum-param two" "The state of the enum has been set to two" "Set enum to two"
-gdb_test "show print test-enum-param" "The state of the enum is two.*" "Show parameter is new value"
-gdb_test "python print test_enum_param.value" "two" "Test enum parameter value"
-gdb_test "set print test-enum-param three" "Undefined item: \"three\".*" "Set invalid enum parameter" 
+with_test_prefix "enum parameter" {
+    gdb_py_test_multiple "enum gdb parameter" \
+       "python" "" \
+       "class TestEnumParam (gdb.Parameter):" "" \
+       "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
+       "   show_doc = \"Show the state of the enum\"" ""\
+       "   set_doc = \"Set the state of the enum\"" "" \
+       "   def get_show_string (self, pvalue):" ""\
+       "      return \"The state of the enum is \" + pvalue" ""\
+       "   def get_set_string (self):" ""\
+       "      return \"The state of the enum has been set to \" + self.value" ""\
+       "   def __init__ (self, name):" "" \
+       "      super (TestEnumParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_ENUM, \[\"one\", \"two\"\])" "" \
+       "      self.value = \"one\"" "" \
+       "test_enum_param = TestEnumParam ('print test-enum-param')" ""\
+       "end"
+
+    gdb_test "python print (test_enum_param.value)" "one" \
+       "test enum parameter value is one"
+    gdb_test "show print test-enum-param" \
+       "The state of the enum is one.*" \
+       "show parameter is initial value"
+    gdb_test "set print test-enum-param two" \
+       "The state of the enum has been set to two" "set enum to two"
+    gdb_test "show print test-enum-param" \
+       "The state of the enum is two.*" "show parameter is new value"
+    gdb_test "python print (test_enum_param.value)" "two" \
+       "test enum parameter value is two"
+    gdb_test "set print test-enum-param three" \
+       "Undefined item: \"three\".*" "set invalid enum parameter"
+}
 
 # Test a file parameter.
-gdb_py_test_multiple "file gdb parameter" \
-   "python" "" \
-   "class TestFileParam (gdb.Parameter):" "" \
-   "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
-   "   show_doc = \"Show the name of the file\"" ""\
-   "   set_doc = \"Set the name of the file\"" "" \
-   "   def get_show_string (self, pvalue):" ""\
-   "      return \"The name of the file is \" + pvalue" ""\
-   "   def get_set_string (self):" ""\
-   "      return \"The name of the file has been changed to \" + self.value" ""\
-   "   def __init__ (self, name):" "" \
-   "      super (TestFileParam, self).__init__ (name, gdb.COMMAND_FILES, gdb.PARAM_FILENAME)" "" \
-   "      self.value = \"foo.txt\"" "" \
-   "test_file_param = TestFileParam ('test-file-param')" ""\
-   "end"
-
-gdb_test "python print test_file_param.value" "foo.txt" "Test file parameter value"
-gdb_test "show test-file-param" "The name of the file is foo.txt.*" "Show initial file value"
-gdb_test "set test-file-param bar.txt" "The name of the file has been changed to bar.txt" "Set new file parameter" 1
-gdb_test "show test-file-param" "The name of the file is bar.txt.*" "Show new file value"
-gdb_test "python print test_file_param.value" "bar.txt" "Test new file parameter value"
-gdb_test "set test-file-param" "Argument required.*" 
+with_test_prefix "file parameter" {
+    gdb_py_test_multiple "file gdb parameter" \
+       "python" "" \
+       "class TestFileParam (gdb.Parameter):" "" \
+       "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
+       "   show_doc = \"Show the name of the file\"" ""\
+       "   set_doc = \"Set the name of the file\"" "" \
+       "   def get_show_string (self, pvalue):" ""\
+       "      return \"The name of the file is \" + pvalue" ""\
+       "   def get_set_string (self):" ""\
+       "      return \"The name of the file has been changed to \" + self.value" ""\
+       "   def __init__ (self, name):" "" \
+       "      super (TestFileParam, self).__init__ (name, gdb.COMMAND_FILES, gdb.PARAM_FILENAME)" "" \
+       "      self.value = \"foo.txt\"" "" \
+       "test_file_param = TestFileParam ('test-file-param')" ""\
+       "end"
+
+    gdb_test "python print (test_file_param.value)" "foo.txt" \
+       "test file parameter value"
+    gdb_test "show test-file-param" \
+       "The name of the file is foo.txt.*" "show initial file value"
+    gdb_test "set test-file-param bar.txt" \
+       "The name of the file has been changed to bar.txt" \
+       "set new file parameter" 1
+    gdb_test "show test-file-param" \
+       "The name of the file is bar.txt.*" "show new file value"
+    gdb_test "python print (test_file_param.value)" \
+       "bar.txt" "test new file parameter value"
+    gdb_test "set test-file-param" "Argument required.*"
+}
 
 # Test a parameter that is not documented.
-gdb_py_test_multiple "Simple gdb booleanparameter" \
-   "python" "" \
-   "class TestUndocParam (gdb.Parameter):" "" \
-   "   def get_show_string (self, pvalue):" ""\
-   "      return \"The state of the Test Parameter is \" + pvalue" ""\
-   "   def get_set_string (self):" ""\
-   "      val = \"on\"" ""\
-   "      if (self.value == False):" ""\
-   "         val = \"off\"" ""\
-   "      return \"Test Parameter has been set to \" + val" ""\
-   "   def __init__ (self, name):" "" \
-   "      super (TestUndocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
-   "      self.value = True" "" \
-   "test_undoc_param = TestUndocParam ('print test-undoc-param')" ""\
-   "end"
-
-gdb_test "show print test-undoc-param" "The state of the Test Parameter is on.*" "Show parameter on"
-gdb_test "set print test-undoc-param off" "Test Parameter has been set to off" "Turn off parameter"
-gdb_test "show print test-undoc-param" "The state of the Test Parameter is off.*" "Show parameter off"
-gdb_test "python print test_undoc_param.value" "False" "Test parameter value"
-gdb_test "help show print test-undoc-param" "This command is not documented.*" "Test show help"
-gdb_test "help set print test-undoc-param" "This command is not documented.*" "Test set help"
-gdb_test "help set print" "set print test-undoc-param -- This command is not documented.*" "Test general help"
+with_test_prefix "undocumented parameter" {
+    gdb_py_test_multiple "Simple gdb booleanparameter" \
+       "python" "" \
+       "class TestUndocParam (gdb.Parameter):" "" \
+       "   def get_show_string (self, pvalue):" ""\
+       "      return \"The state of the Test Parameter is \" + pvalue" ""\
+       "   def get_set_string (self):" ""\
+       "      val = \"on\"" ""\
+       "      if (self.value == False):" ""\
+       "         val = \"off\"" ""\
+       "      return \"Test Parameter has been set to \" + val" ""\
+       "   def __init__ (self, name):" "" \
+       "      super (TestUndocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
+       "      self.value = True" "" \
+       "test_undoc_param = TestUndocParam ('print test-undoc-param')" ""\
+       "end"
+
+    gdb_test "show print test-undoc-param" \
+       "The state of the Test Parameter is on.*" "show parameter on"
+    gdb_test "set print test-undoc-param off" \
+       "Test Parameter has been set to off" "turn off parameter"
+    gdb_test "show print test-undoc-param" \
+       "The state of the Test Parameter is off.*" "show parameter off"
+    gdb_test "python print (test_undoc_param.value)" \
+       "False" "test undocumented parameter value is False"
+    gdb_test "help show print test-undoc-param" \
+       "This command is not documented.*" "test show help"
+    gdb_test "help set print test-undoc-param" \
+       "This command is not documented.*" "test set help"
+    gdb_test "help set print" \
+       "set print test-undoc-param -- This command is not documented.*" \
+       "test general help"
+}
 
 # Test a parameter that is not documented in any way..
-gdb_py_test_multiple "Simple gdb booleanparameter" \
-   "python" "" \
-   "class TestNodocParam (gdb.Parameter):" "" \
-   "   def __init__ (self, name):" "" \
-   "      super (TestNodocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
-   "      self.value = True" "" \
-   "test_nodoc_param = TestNodocParam ('print test-nodoc-param')" ""\
-   "end"
-
-gdb_test "show print test-nodoc-param" "This command is not documented.*" "Show parameter on"
-gdb_test "set print test-nodoc-param off" "This command is not documented.*" "Turn off parameter"
-gdb_test "show print test-nodoc-param" "This command is not documented.*.*" "Show parameter off"
-gdb_test "python print test_nodoc_param.value" "False" "Test parameter value"
-gdb_test "help show print test-nodoc-param" "This command is not documented.*" "Test show help"
-gdb_test "help set print test-nodoc-param" "This command is not documented.*" "Test set help"
-gdb_test "help set print" "set print test-nodoc-param -- This command is not documented.*" "Test general help"
+with_test_prefix "really undocumented parameter" {
+    gdb_py_test_multiple "Simple gdb booleanparameter" \
+       "python" "" \
+       "class TestNodocParam (gdb.Parameter):" "" \
+       "   def __init__ (self, name):" "" \
+       "      super (TestNodocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
+       "      self.value = True" "" \
+       "test_nodoc_param = TestNodocParam ('print test-nodoc-param')" ""\
+       "end"
+
+    gdb_test "show print test-nodoc-param" \
+       "This command is not documented.*" "show parameter on"
+    gdb_test_no_output "set print test-nodoc-param off" \
+       "turn off parameter"
+    gdb_test "show print test-nodoc-param" \
+       "This command is not documented.*.*" "show parameter off"
+    gdb_test "python print (test_nodoc_param.value)" \
+       "False" "test really undocumented parameter value is False"
+    gdb_test "help show print test-nodoc-param" \
+       "This command is not documented.*" "test show help"
+    gdb_test "help set print test-nodoc-param" \
+       "This command is not documented.*" "test set help"
+    gdb_test "help set print" \
+       "set print test-nodoc-param -- This command is not documented.*" \
+       "test general help"
+}
 
 # Test deprecated API. Do not use in your own implementations.
-gdb_py_test_multiple "Simple gdb booleanparameter" \
-   "python" "" \
-   "class TestParam (gdb.Parameter):" "" \
-   "   \"\"\"When enabled, test param does something useful. When disabled, does nothing.\"\"\"" "" \
-   "   show_doc = \"State of the Test Parameter\"" ""\
-   "   set_doc = \"Set the state of the Test Parameter\"" "" \
-   "   def __init__ (self, name):" "" \
-   "      super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
-   "      self.value = True" "" \
-   "test_param = TestParam ('print test-param')" ""\
-   "end"
-
-gdb_test "python print test_param.value" "True" "Test parameter value"
-gdb_test "show print test-param" "State of the Test Parameter on.*" "Show parameter on"
-gdb_test "set print test-param off" "Set the state of the Test Parameter.*" "Turn off parameter"
-gdb_test "show print test-param" "State of the Test Parameter off.*" "Show parameter off"
-gdb_test "python print test_param.value" "False" "Test parameter value"
-gdb_test "help show print test-param" "State of the Test Parameter.*" "Test show help"
-gdb_test "help set print test-param" "Set the state of the Test Parameter.*" "Test set help"
-gdb_test "help set print" "set print test-param -- Set the state of the Test Parameter.*" "Test general help"
+with_test_prefix "deprecated API parameter" {
+    gdb_py_test_multiple "Simple gdb booleanparameter" \
+       "python" "" \
+       "class TestParam (gdb.Parameter):" "" \
+       "   \"\"\"When enabled, test param does something useful. When disabled, does nothing.\"\"\"" "" \
+       "   show_doc = \"State of the Test Parameter\"" ""\
+       "   set_doc = \"Set the state of the Test Parameter\"" "" \
+       "   def __init__ (self, name):" "" \
+       "      super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
+       "      self.value = True" "" \
+       "test_param = TestParam ('print test-param')" ""\
+       "end"
+
+    gdb_test "python print (test_param.value)" "True" \
+       "test deprecated API parameter value is True"
+    gdb_test "show print test-param" \
+       "State of the Test Parameter on.*" "show parameter on"
+    gdb_test_no_output "set print test-param off" "turn off parameter"
+    gdb_test "show print test-param" \
+       "State of the Test Parameter off.*" "show parameter off"
+    gdb_test "python print (test_param.value)" "False" \
+       "test deprecated API parameter value is False"
+    gdb_test "help show print test-param" \
+       "State of the Test Parameter.*" "test show help"
+    gdb_test "help set print test-param" \
+       "Set the state of the Test Parameter.*" "test set help"
+    gdb_test "help set print" \
+       "set print test-param -- Set the state of the Test Parameter.*" \
+       "test general help"
+}
+
+foreach kind {PARAM_ZUINTEGER PARAM_ZUINTEGER_UNLIMITED} {
+    gdb_py_test_multiple "Simple gdb $kind" \
+       "python" "" \
+       "class TestNodocParam (gdb.Parameter):" "" \
+       "   def __init__ (self, name):" "" \
+       "      super (TestNodocParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.$kind)" "" \
+       "      self.value = 0" "" \
+       "test_param_$kind = TestNodocParam ('test-$kind')" "" \
+       "end"
+
+    gdb_test "python print(gdb.parameter('test-$kind'))" "0"
+
+    gdb_test "python test_param_$kind.value = -5" "RuntimeError: Range exceeded.*"
+
+    if {$kind == "PARAM_ZUINTEGER"} {
+       gdb_test "python test_param_$kind.value = -1" "RuntimeError: Range exceeded.*"
+    } else {
+       gdb_test_no_output "python test_param_$kind.value = -1" \
+           "check that PARAM_ZUINTEGER value can be set to -1"
+       gdb_test "python print(gdb.parameter('test-$kind'))" "-1" \
+           "check that PARAM_ZUINTEGER value is -1 after setting"
+    }
+}
+
+gdb_py_test_multiple "Throwing gdb parameter" \
+    "python" "" \
+    "class TestThrowParam (gdb.Parameter):" "" \
+    "   def __init__ (self, name):" "" \
+    "      super (TestThrowParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_STRING)" "" \
+    "      self.value = True" "" \
+    "   def get_set_string (self):" "" \
+    "      raise gdb.GdbError('Ordinary gdb error')" "" \
+    "test_throw_param = TestThrowParam ('print test-throw-param')" ""\
+    "end"
+
+gdb_test "set print test-throw-param whoops" \
+    "Ordinary gdb error" \
+    "gdb.GdbError does not show Python stack"
This page took 0.028813 seconds and 4 git commands to generate.