# Copyright (C) 2010-2026 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

require allow_python_tests

# Start with a fresh gdb.
clean_restart

proc py_param_test_maybe_no_output { command pattern args } {
    if {[string length $pattern]} {
	gdb_test $command $pattern $args
    } else {
	gdb_test_no_output $command $args
    }
}

proc_with_prefix test_directories { } {
    # 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 directory [host_file_normalize "$::srcdir/$::subdir"]
	set escaped_directory [string_to_regexp $directory]
	set directories "$escaped_directory.\\\$cdir.\\\$cwd"
    }
    gdb_test "python print (gdb.parameter ('directories'))" $directories
}

proc_with_prefix test_data_directory { } {
    # Proc assumes local host.
    require {!is_remote host}

    clean_restart

    # Check we can correctly read the data-directory parameter.  First,
    # grab the value as read directly from the GDB CLI.
    set dd ""
    gdb_test_multiple "show data-directory" \
	"find the initial data-directory value" {
	    -re -wrap "GDB's data directory is \"(\[^\r\n\]+)\"\\." {
		set dd $expect_out(1,string)
		pass $gdb_test_name
	    }
	}

    # Now print the data-directory from Python.
    gdb_test "python print (gdb.parameter ('data-directory'))" $dd

    # Next change the data-directory to a relative path.  Internally GDB
    # will resolve this to an absolute path, which Python should then see.
    #
    # GDB is currently running in '...../build/gdb/testsuite/' and the
    # test output is being written to:
    #   ...../build/gdb/testsuite/outputs/gdb.python/py-parameter/
    #
    # So create the relative path './outputs/gdb.python/py-parameter/' and
    # set the data-directory to that, we should then see the absolute path.

    set abs_path_to_output_dir [standard_output_file ""]
    set abs_path_to_cwd $::objdir
    set rel_path_to_output_dir \
	[file join "." [string replace ${abs_path_to_output_dir} 0 \
			    [string length ${abs_path_to_cwd}] ""]]
    gdb_test_no_output "set data-directory ${rel_path_to_output_dir}" \
	"set data-directory to relative path"

    gdb_test "python print (gdb.parameter ('data-directory'))" \
	${abs_path_to_output_dir} \
	"python sees absolute version of data-directory path"

    # While we're here, check we see the correct path at GDB's CLI.
    gdb_test "show data-directory" \
	"GDB's data directory is \"${abs_path_to_output_dir}\"\\." \
	"check modified data-directory at the CLI"

    # Now lets set the data-directory back to what it was initially.
    gdb_test_no_output "set data-directory ${dd}" \
	"set data-directory back to its original value"

    # And check we see the restored value at CLI and from Python.
    gdb_test "show data-directory" \
	"GDB's data directory is \"${dd}\"\\." \
	"check original data-directory was restored at the CLI"

    gdb_test "python print (gdb.parameter ('data-directory'))" ${dd} \
	"python sees restored data-directory value"
}

# Test a simple boolean parameter.
proc_with_prefix test_boolean_parameter { } {
    clean_restart

    gdb_test_multiline "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_no_output "python gdb.set_parameter('print test-param', True)" \
	"set boolean parameter using set_parameter"
    gdb_test "python print(gdb.parameter('print test-param'))" "True" \
	"get boolean parameter using gdb.parameter"
    gdb_test "help show print test-param" \
	[multi_line \
	     "Show the state of the boolean test-param" \
	     "When enabled, test param does something useful\\. When disabled, does nothing\\."] \
	"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.
proc_with_prefix test_enum_parameter { } {
    clean_restart

    gdb_test_multiline "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 an color parameter.
proc_with_prefix test_color_parameter { } {
    require {!is_remote host}

    global env
    with_ansi_styling_terminal {
	# This enables 256 colors support and disables colors approximation.
	setenv TERM xterm-256color
	setenv COLORTERM truecolor

	clean_restart

	gdb_test_multiline "color gdb parameter" \
	    "python" "" \
	    "class TestColorParam (gdb.Parameter):" "" \
	    "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
	    "   show_doc = \"Show the state of the color\"" ""\
	    "   set_doc = \"Set the state of the color\"" "" \
	    "   def get_show_string (self, pvalue):" ""\
	    "      return \"The state of the color is \" + str(pvalue)" ""\
	    "   def get_set_string (self):" ""\
	    "      return \"The state of the color has been set to \" + str(self.value)" ""\
	    "   def __init__ (self, name):" "" \
	    "      super (TestColorParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_COLOR)" "" \
	    "      self.value = gdb.Color(\"green\")" "" \
	    "test_color_param = TestColorParam ('print test-color-param')" ""\
	    "end"

	gdb_test "python print (test_color_param.value)" "green" \
	    "test color parameter value is green"
	gdb_test "show print test-color-param" \
	    "The state of the color is green.*" \
	    "show parameter is initial value"
	gdb_test "set print test-color-param 255" \
	    "The state of the color has been set to 255" "set color to 255"
	gdb_test "show print test-color-param" \
	    "The state of the color is 255.*" "show parameter is new value"
	gdb_test "python print (test_color_param.value)" "255" \
	    "test color parameter value is 255"
	gdb_test_no_output "python test_color_param.value = gdb.Color(254)" \
	    "assign test_color_param.value to 254"
	gdb_test "python print (test_color_param.value)" "254" \
	    "test color parameter value is integer"
	gdb_test_no_output "python test_color_param.value =  gdb.Color('#FED210')" \
	    "assign test_color_param.value to #FED210"
	gdb_test "python print (test_color_param.value.components)" "\\(254, 210, 16\\)" \
	    "test color parameter components from RGB hex tripple value"
	gdb_test "set print test-color-param 256" \
	    "integer 256 out of range.*" "set invalid color parameter"
	gdb_test "python test_color_param.value = gdb.Color(256)" \
	    ".*Error occurred in Python: Palette color index 256 is out of range.*" "set invalid color value"
    }
}

# Test a file parameter.
proc_with_prefix test_file_parameter { } {
    clean_restart

    gdb_test_multiline "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"
    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.
proc_with_prefix test_undocumented_parameter { } {
    clean_restart

    gdb_test_multiline "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" \
	[multi_line \
	     "Show the current value of '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 -- Set the current value of 'print test-undoc-param'\\..*" \
	"test general help"
}

# Test a parameter that is not documented in any way..
proc_with_prefix test_really_undocumented_parameter { } {
    clean_restart

    gdb_test_multiline "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" \
	"The current value of 'print test-nodoc-param' is \"on\"\\." \
	"show parameter on"
    gdb_test_no_output "set print test-nodoc-param off" \
	"turn off parameter"
    gdb_test "show print test-nodoc-param" \
	"The current value of 'print test-nodoc-param' is \"off\"\\." \
	"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" \
	[multi_line \
	     "Show the current value of '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 -- Set the current value of 'print test-nodoc-param'\\..*" \
	"test general help"
}

# Test a parameter in which the __doc__ string is empty or None.
proc_with_prefix test_empty_doc_parameter {} {
    gdb_test_multiline "empty __doc__ parameter" \
	"python" "" \
	"class EmptyDocParam(gdb.Parameter):" "" \
	"   __doc__ = \"\"" "" \
	"   def __init__(self, name):" "" \
	"      super ().__init__(name, gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"      self.value = True" "" \
	"test_empty_doc_param = EmptyDocParam('print test-empty-doc-param')" ""\
	"end"

    # Setting the __doc__ string to empty means GDB will completely
    # elide it from the output.
    gdb_test "help set print test-empty-doc-param" \
	"^Set the current value of 'print test-empty-doc-param'\\."

    gdb_test_multiline "None __doc__ parameter" \
	"python" "" \
	"class NoneDocParam(gdb.Parameter):" "" \
	"   __doc__ = None" "" \
	"   def __init__(self, name):" "" \
	"      super ().__init__(name, gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"      self.value = True" "" \
	"test_none_doc_param = NoneDocParam('print test-none-doc-param')" ""\
	"end"

    # Setting the __doc__ string to None, or anything else that isn't
    # a string, causes GDB to use a default string instead.
    gdb_test "help set print test-none-doc-param" \
	[multi_line \
	     "^Set the current value of 'print test-none-doc-param'\\." \
	     "This command is not documented\\."]
}

# Test a parameter in which the set_doc/show_doc strings are either
# empty, or None.
proc_with_prefix test_empty_set_show_doc_parameter {} {
    gdb_test_multiline "empty set/show doc parameter" \
	"python" "" \
	"class EmptySetShowParam(gdb.Parameter):" "" \
	"   set_doc = \"\"" "" \
	"   show_doc = \"\"" "" \
	"   def __init__(self, name):" "" \
	"      super ().__init__(name, gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"      self.value = True" "" \
	"test_empty_set_show_param = EmptySetShowParam('print test-empty-set-show-param')" ""\
	"end"

    # Setting the set_doc/show_doc string to empty means GDB will use
    # a suitable default string.
    gdb_test "help set print test-empty-set-show-param" \
	[multi_line \
	     "^Set the current value of 'print test-empty-set-show-param'\\." \
	     "This command is not documented\\."]

    gdb_test "help show print test-empty-set-show-param" \
	[multi_line \
	     "^Show the current value of 'print test-empty-set-show-param'\\." \
	     "This command is not documented\\."]

    gdb_test_multiline "None set/show doc parameter" \
	"python" "" \
	"class NoneSetShowParam(gdb.Parameter):" "" \
	"   set_doc = None" "" \
	"   show_doc = None" "" \
	"   def __init__(self, name):" "" \
	"      super ().__init__(name, gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"      self.value = True" "" \
	"test_none_set_show_param = NoneSetShowParam('print test-none-set-show-param')" ""\
	"end"

    # Setting the set_doc/show_doc string to None (or any non-string
    # value) means GDB will use a suitable default string.
    gdb_test "help set print test-none-set-show-param" \
	[multi_line \
	     "^Set the current value of 'print test-none-set-show-param'\\." \
	     "This command is not documented\\."]

    gdb_test "help show print test-none-set-show-param" \
	[multi_line \
	     "^Show the current value of 'print test-none-set-show-param'\\." \
	     "This command is not documented\\."]
}

# Test deprecated API. Do not use in your own implementations.
proc_with_prefix test_deprecated_api_parameter { } {
    clean_restart

    gdb_test_multiline "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" \
	"The current value of 'print test-param' is \"on\"\\." \
	"show parameter on"
    gdb_test_no_output "set print test-param off" "turn off parameter"
    gdb_test "show print test-param" \
	"The current value of 'print test-param' is \"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" \
	[multi_line \
	     "State of the Test Parameter" \
	     "When enabled, test param does something useful\\. When disabled, does nothing\\."] \
	"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"
}

proc_with_prefix test_gdb_parameter { } {
    foreach_with_prefix param {
	"listsize"
	"print elements"
	"max-completions"
	"print characters"
    } {
	clean_restart

	set param_range_error ".*gdb.error.*: integer -1 out of range.*"
	switch -- $param {
	    "listsize" {
		set param_get_zero None
		set param_get_minus_one -1
		set param_get_none None
		set param_get_unlimited None
		set param_set_minus_one ""
	    }
	    "print elements" -
	    "print characters" {
		set param_get_zero None
		set param_get_minus_one None
		set param_get_none None
		set param_get_unlimited None
		set param_set_minus_one $param_range_error
	    }
	    "max-completions" {
		set param_get_zero 0
		set param_get_minus_one -1
		set param_get_none -1
		set param_get_unlimited -1
		set param_set_minus_one ""
	    }
	    default {
		error "invalid param: $param"
	    }
	}

	gdb_test_no_output "python gdb.set_parameter('$param', 1)" \
	    "test set to 1"

	gdb_test "python print(gdb.parameter('$param'))" \
	    1 "test value of 1"

	gdb_test_no_output "python gdb.set_parameter('$param', 0)" \
	    "test set to 0"

	gdb_test "python print(gdb.parameter('$param'))" \
	    $param_get_zero "test value of 0"

	py_param_test_maybe_no_output \
	    "python gdb.set_parameter('$param', -1)" \
	    $param_set_minus_one "test set to -1"

	gdb_test "python print(gdb.parameter('$param'))" \
	    $param_get_minus_one "test value of -1"

	gdb_test_no_output "python gdb.set_parameter('$param', None)" \
	    "test set to None"

	gdb_test "python print(gdb.parameter('$param'))" \
	    $param_get_none "test value of None"

	gdb_test_no_output "python gdb.set_parameter('$param', 'unlimited')" \
	    "test set to 'unlimited'"

	gdb_test "python print(gdb.parameter('$param'))" \
	    $param_get_unlimited "test value of 'unlimited'"

	if {$param == "print characters"} {
	    gdb_test_no_output \
		"python gdb.set_parameter('$param', 'elements')" \
		"test set to 'elements'"

	    gdb_test "python print(gdb.parameter('$param'))" \
		elements "test value of 'elements'"
	}
    }

    clean_restart

    # This caused a gdb crash.
    gdb_test "python print(gdb.parameter('endian'))" "auto" \
	"print endian parameter"
}

proc_with_prefix test_integer_parameter { } {
    foreach_with_prefix kind {
	PARAM_UINTEGER
	PARAM_INTEGER
	PARAM_ZINTEGER
	PARAM_ZUINTEGER
	PARAM_ZUINTEGER_UNLIMITED
    } {
	clean_restart

	gdb_test_multiline "create parameter" \
	    "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"

	set param_range_error "RuntimeError.*: Range exceeded.*"
	set param_integer_error "RuntimeError.*: The value must be integer.*"
	switch -- $kind {
	    PARAM_UINTEGER {
		set param_get_zero None
		set param_get_minus_one None
		set param_get_minus_five 1
		set param_get_none None
		set param_get_unlimited None
		set param_set_minus_one $param_range_error
		set param_set_minus_five $param_range_error
		set param_set_none ""
	    }
	    PARAM_INTEGER {
		set param_get_zero None
		set param_get_minus_one -1
		set param_get_minus_five -5
		set param_get_none None
		set param_get_unlimited None
		set param_set_minus_one -1
		set param_set_minus_five -5
		set param_set_none ""
	    }
	    PARAM_ZINTEGER {
		set param_get_zero 0
		set param_get_minus_one -1
		set param_get_minus_five -5
		set param_get_none 5
		set param_get_unlimited 0
		set param_set_minus_one ""
		set param_set_minus_five ""
		set param_set_none $param_integer_error
	    }
	    PARAM_ZUINTEGER {
		set param_get_zero 0
		set param_get_minus_one 0
		set param_get_minus_five 1
		set param_get_none 5
		set param_get_unlimited 0
		set param_set_minus_one $param_range_error
		set param_set_minus_five $param_range_error
		set param_set_none $param_integer_error
	    }
	    PARAM_ZUINTEGER_UNLIMITED {
		set param_get_zero 0
		set param_get_minus_one -1
		set param_get_minus_five 1
		set param_get_none -1
		set param_get_unlimited -1
		set param_set_minus_one ""
		set param_set_minus_five $param_range_error
		set param_set_none ""
	    }
	    default {
		error "invalid kind: $kind"
	    }
	}

	gdb_test "python print(test_param_$kind.value)" \
	    $param_get_zero "test default value"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    $param_get_zero "test default value via gdb.parameter"

	py_param_test_maybe_no_output "python test_param_$kind.value = -1" \
	    $param_set_minus_one "test set to -1"

	gdb_test "python print(test_param_$kind.value)" \
	    $param_get_minus_one "test value of -1"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    $param_get_minus_one "test value of -1 via gdb.parameter"

	gdb_test_no_output "python test_param_$kind.value = 1" "test set to 1"

	gdb_test "python print(test_param_$kind.value)" 1 "test value of 1"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    1 "test value of 1 via gdb.parameter"

	py_param_test_maybe_no_output "python test_param_$kind.value = -5" \
	    $param_set_minus_five "test set to -5"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    $param_get_minus_five "test value of -5 via gdb.parameter"

	gdb_test_no_output "python test_param_$kind.value = 5" "test set to 5"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    5 "test value of 5 via gdb.parameter"

	py_param_test_maybe_no_output "python test_param_$kind.value = None" \
	    $param_set_none "test set to None"

	gdb_test "python print(test_param_$kind.value)" \
	    $param_get_none "test value of None"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    $param_get_none "test value of None via gdb.parameter"

	gdb_test_no_output "python test_param_$kind.value = 0" \
	    "test set to 0"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    $param_get_zero "test value of 0 via gdb.parameter"

	py_param_test_maybe_no_output \
	    "python test_param_$kind.value = 'unlimited'" \
	    $param_set_none "test set to 'unlimited'"

	gdb_test "python print(test_param_$kind.value)" \
	    $param_get_unlimited "test value of 'unlimited'"

	gdb_test "python print(gdb.parameter('test-$kind'))" \
	    $param_get_unlimited "test value of 'unlimited' via gdb.parameter"
    }
}

proc_with_prefix test_throwing_parameter { } {
    clean_restart

    gdb_test_multiline "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"
}

# Some parameters are per inferior.  The value returned by gdb.parameter for
# them should be dependent on which is the current inferior.
proc_with_prefix test_per_inferior_parameters { } {
    clean_restart

    # Add a second inferior.
    gdb_test "add-inferior" "Added inferior 2.*"

    # Set some parameters on each inferior.
    foreach_with_prefix inf {1 2} {
	gdb_test "inferior ${inf}" "Switching to inferior ${inf}.*" \
	    "switch to inferior ${inf} before show"
	gdb_test_no_output "set inferior-tty /inf${inf}-tty"
	gdb_test_no_output "set cwd /inf${inf}-cwd"
	gdb_test_no_output "set args /inf${inf}-args"
	gdb_test_no_output "set remote exec-file /inf${inf}-ref"
	# Outputs a warning, ignore it.
	gdb_test "set tdesc filename /inf${inf}-tf"
    }

    # Check the values on each inferior.
    foreach_with_prefix inf {1 2} {
	gdb_test "inferior ${inf}" "Switching to inferior ${inf}.*" \
	    "switch to inferior ${inf} before set"
	gdb_test "python print(gdb.parameter('inferior-tty'))" "/inf${inf}-tty"
	gdb_test "python print(gdb.parameter('cwd'))" "/inf${inf}-cwd"
	gdb_test "python print(gdb.parameter('args'))" "/inf${inf}-args"
	gdb_test "python print(gdb.parameter('remote exec-file'))" "/inf${inf}-ref"
	gdb_test "python print(gdb.parameter('tdesc filename'))" "/inf${inf}-tf"
    }
}

proc_with_prefix test_language {} {
    gdb_test "python print(gdb.parameter('language'))" "auto" \
	"print language parameter"
    gdb_test "python print(gdb.current_language())" "c" \
	"print current language"
    gdb_test_no_output "set lang rust"
    gdb_test "python print(gdb.parameter('language'))" "rust" \
	"print language parameter for rust"
    gdb_test "python print(gdb.current_language())" "rust" \
	"print current language for rust"
    gdb_test_no_output "set lang auto"
}

proc_with_prefix test_ambiguous_parameter {} {
    gdb_test_multiline "create parameter" \
	"python" "" \
	"class TestAmbiguousParam (gdb.Parameter):" "" \
	"   def __init__ (self, name, value):" "" \
	"      super (TestAmbiguousParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_INTEGER)" "" \
	"      self.value = value" "" \
	"end"

    # Create parameters.
    gdb_test "python TestAmbiguousParam('test-ambiguous-value-1', 1)" ""
    gdb_test "python TestAmbiguousParam('test-ambiguous-value-2-extra', 2)" ""
    gdb_test "python TestAmbiguousParam('test-ambiguous', 3)" ""

    # Test unambiguous matches.
    gdb_test "python print(gdb.parameter('test-ambiguous-value-1'))" "1"
    gdb_test "python print(gdb.parameter('test-ambiguous-value-2-extra'))" "2"
    gdb_test "python print(gdb.parameter('test-ambiguous-value-2'))" "2"
    gdb_test "python print(gdb.parameter('test-ambiguous'))" "3"

    # Test ambiguous names.
    gdb_test "python print(gdb.parameter('test-ambiguou'))" \
	"Parameter .* is ambiguous.*Error occurred in Python.*"
    gdb_test "python print(gdb.parameter('test-ambiguous-'))" \
	"Parameter .* is ambiguous.*Error occurred in Python.*"
    gdb_test "python print(gdb.parameter('test-ambiguous-v'))" \
	"Parameter .* is ambiguous.*Error occurred in Python.*"
    gdb_test "python print(gdb.parameter('test-ambiguous-value-1a'))" \
	"Could not find parameter.*Error occurred in Python.*"

    # Create command prefixs 'set foo1' and 'show foo1'.
    gdb_test_no_output "python gdb.Command('set foo1', gdb.COMMAND_NONE, prefix=True)"
    gdb_test_no_output "python gdb.Command('show foo1', gdb.COMMAND_NONE, prefix=True)"

    # Create a parameter under 'foo1', but use a truncated prefix.  At
    # this point though, the prefix is not ambiguous.
    gdb_test_no_output "python gdb.Parameter('foo bar', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)"
    gdb_test "python print(gdb.parameter('foo1 bar'))" "False"

    # Create another prefix command, similar in name to the first.
    gdb_test_no_output "python gdb.Command('set foo2', gdb.COMMAND_NONE, prefix=True)"
    gdb_test_no_output "python gdb.Command('show foo2', gdb.COMMAND_NONE, prefix=True)"

    # An attempt to create a parameter using an ambiguous prefix will give an error.
    gdb_test "python gdb.Parameter('foo baz', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" \
	[multi_line \
	     "Python Exception <class 'RuntimeError'>: Could not find command prefix foo\\." \
	     "Error occurred in Python: Could not find command prefix foo\\."]
}

# Check that creating a gdb.Parameter with an unknown command prefix results in an error.
proc_with_prefix test_unknown_prefix {} {
    gdb_test_multiline "create parameter" \
	"python" "" \
	"class UnknownPrefixParam(gdb.Parameter):" "" \
	"   def __init__ (self, name):" "" \
	"      super().__init__ (name, gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"      self.value = True" "" \
	"end"

    foreach prefix { "unknown-prefix" "style unknown-prefix" "style disassembler unknown-prefix"} {
	gdb_test "python UnknownPrefixParam('$prefix new-param')" \
	    [multi_line \
		 "Python Exception <class 'RuntimeError'>: Could not find command prefix $prefix\\." \
		 "Error occurred in Python: Could not find command prefix $prefix\\."]
    }
}

# Test the default behaviour of a set/show parameter prefix command.
proc_with_prefix test_set_show_parameters {} {
    # This first set/show prefix command doesn't have an invoke
    # method.  As such, GDB installs the default invoke behaviour; set
    # prints the full list of sub-commands, and show prints all the
    # sub-command values.
    gdb_test_multiline "Setup set/show parameter prefix with no invoke" \
	"python" "" \
	"class TestParamPrefix(gdb.Command):" "" \
	"   \"\"\"TestParamPrefix documentation string.\"\"\"" "" \
	"   def __init__(self, name):" "" \
	"      super().__init__(name, gdb.COMMAND_NONE, prefix = True)" "" \
	"TestParamPrefix('set test-prefix')" "" \
	"TestParamPrefix('show test-prefix')" "" \
	"gdb.Parameter('test-prefix param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.Parameter('test-prefix param-2', gdb.COMMAND_NONE, gdb.PARAM_INTEGER)" "" \
	"gdb.Parameter('test-prefix param-3', gdb.COMMAND_NONE, gdb.PARAM_STRING)" "" \
	"end"

    gdb_test "set test-prefix" \
	[multi_line \
	     "List of \"set test-prefix\" subcommands:" \
	     "" \
	     "set test-prefix param-1 -- Set the current value of 'test-prefix param-1'." \
	     "set test-prefix param-2 -- Set the current value of 'test-prefix param-2'." \
	     "set test-prefix param-3 -- Set the current value of 'test-prefix param-3'." \
	     "" \
	     "Type \"help set test-prefix\" followed by subcommand name for full documentation\\." \
	     "Type \"apropos word\" to search for commands related to \"word\"\\." \
	     "Type \"apropos -v word\" for full documentation of commands related to \"word\"\\." \
	     "Command name abbreviations are allowed if unambiguous\\."]

    gdb_test "show test-prefix" \
	[multi_line \
	     "test-prefix param-1:  The current value of 'test-prefix param-1' is \"off\"\\." \
	     "test-prefix param-2:  The current value of 'test-prefix param-2' is \"0\"\\." \
	     "test-prefix param-3:  The current value of 'test-prefix param-3' is \"\"\\."]

    # This next set/show prefix has an invoke method, which will be
    # called instead of the default behaviour tested above.
    gdb_test_multiline "Setup set/show parameter prefix with invoke" \
	"python" "" \
	"class TestParamPrefix(gdb.Command):" "" \
	"   \"\"\"TestParamPrefix documentation string.\"\"\"" "" \
	"   def __init__(self, name, mode):" "" \
	"      self._mode = mode" "" \
	"      super().__init__(self._mode + ' ' + name, gdb.COMMAND_NONE, prefix = True)" "" \
	"   def invoke(self, args, from_tty):" "" \
	"      print('invoke -- ' + self._mode)" "" \
	"TestParamPrefix('test-prefix-2', 'set')" "" \
	"TestParamPrefix('test-prefix-2', 'show')" "" \
	"gdb.Parameter('test-prefix-2 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.Parameter('test-prefix-2 param-2', gdb.COMMAND_NONE, gdb.PARAM_INTEGER)" "" \
	"gdb.Parameter('test-prefix-2 param-3', gdb.COMMAND_NONE, gdb.PARAM_STRING)" "" \
	"end"

    gdb_test "set test-prefix-2" "^invoke -- set"

    gdb_test "show test-prefix-2" "^invoke -- show"
}

test_directories
test_data_directory
test_boolean_parameter
test_enum_parameter
test_color_parameter
test_file_parameter
test_undocumented_parameter
test_really_undocumented_parameter
test_empty_doc_parameter
test_empty_set_show_doc_parameter
test_deprecated_api_parameter
test_gdb_parameter
test_integer_parameter
test_throwing_parameter
test_per_inferior_parameters
test_language
test_ambiguous_parameter
test_unknown_prefix
test_set_show_parameters

rename py_param_test_maybe_no_output ""
