# 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
# 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 <http://www.gnu.org/licenses/>.

# This file is part of the GDB testsuite.
# It tests gdb.parameter and gdb.Parameter.

load_lib gdb-python.exp

# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

# We use "." here instead of ":" so that this works on win32 too.
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"


# 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"

# 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.*" 

# 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"

# 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_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 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"

# 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_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 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"

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"
