# Copyright (C) 2025-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.ParameterPrefix.  See each of the test procs for a full
# description of what is being tested.

load_lib gdb-python.exp

require allow_python_tests

clean_restart

# Helper proc to generate the output of 'show PREFIX' commands for the
# case where the prefix command doesn't handle unknown sub-commands.
# In this case GDB will list the value of every sub-command under
# PREFIX.
proc make_show_prefix_re { prefix } {
    return "$prefix param-1:\\s+The current value of '$prefix param-1' is \"off\"\\."
}

# Helper proc to generate the help text that describes all of the sub
# commands under PREFIX.  The MODE is either 'set' or 'show'.  This
# output will appear for 'help MODE PREFIX' and also for 'set PREFIX'.
proc make_sub_cmd_help_re { mode prefix } {
    if { $mode == "set" } {
	set word "Set"
    } else {
	set word "Show"
    }

    return \
	[multi_line \
	     "List of \"$mode $prefix\" subcommands:" \
	     "" \
	     "$mode $prefix param-1 -- $word the current value of '$prefix param-1'\\." \
	     "" \
	     "Type \"help $mode $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\\."]
}

# Helper proc to generate the output of 'help MODE PREFIX', where MODE
# will be either 'set' or 'show'.  The HELP_TEXT is the expected help
# text for this prefix command, this should not be a regexp, as this
# proc converts the text to a regexp.
#
# Return a single regexp which should match the output.
proc make_help_re { mode prefix help_text } {
    set help_re [string_to_regexp $help_text]

    return \
	[multi_line \
	     "$help_re" \
	     "" \
	     [make_sub_cmd_help_re $mode $prefix]]
}

# Create gdb.ParameterPrefix without using a sub-class, both with, and
# without a doc string.  For the doc string case, test single line,
# and multi-line doc strings.
proc_with_prefix test_basic_usage {} {
    gdb_test_multiline "some basic ParameterPrefix usage" \
	"python" "" \
	"gdb.ParameterPrefix('prefix-1', gdb.COMMAND_NONE)" "" \
	"gdb.Parameter('prefix-1 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.Parameter('prefix-1 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.ParameterPrefix('prefix-2', gdb.COMMAND_NONE," "" \
	"                    \"\"\"This is prefix-2 help string.\"\"\")" "" \
	"gdb.Parameter('prefix-2 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.ParameterPrefix('prefix-3', gdb.COMMAND_NONE," "" \
	"                    \"\"\"This is prefix-3 help string." "" \
	" " "" \
	"                    This help text spans multiple lines.\"\"\")" "" \
	"gdb.Parameter('prefix-3 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"end"

    foreach mode { "set" "show" } {
	gdb_test "help $mode prefix-1" \
	    [make_help_re $mode "prefix-1" \
		 "This command is not documented."]

	gdb_test "help $mode prefix-2" \
	    [make_help_re $mode "prefix-2" \
		 "This is prefix-2 help string."]

	gdb_test "help $mode prefix-3" \
	    [make_help_re $mode "prefix-3" \
		 [multi_line \
		      "This is prefix-3 help string." \
		      "" \
		      "This help text spans multiple lines."]]

	foreach prefix { prefix-1 prefix-2 prefix-3 } {
	    gdb_test "$mode $prefix xxx" \
		"^Undefined $mode $prefix command: \"xxx\"\\.  Try \"help $mode $prefix\"\\."
	}
    }

    foreach prefix { prefix-1 prefix-2 prefix-3 } {
	gdb_test "set $prefix" \
	    [make_sub_cmd_help_re "set" $prefix]

	gdb_test "show $prefix" \
	    [make_show_prefix_re $prefix]
    }
}

# Create a sub-class of gdb.ParameterPrefix, but don't do anything
# particularly interesting.  Again test the with and without
# documentation string cases.
proc_with_prefix test_simple_sub_class {} {
    gdb_test_multiline "some basic ParameterPrefix usage" \
	"python" "" \
	"class BasicParamPrefix(gdb.ParameterPrefix):" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"BasicParamPrefix('prefix-4')" "" \
	"gdb.Parameter('prefix-4 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"class BasicParamPrefixWithSingleLineDoc(gdb.ParameterPrefix):" "" \
	"  \"\"\"This is a single line doc string.\"\"\"" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"BasicParamPrefixWithSingleLineDoc('prefix-5')" "" \
	"gdb.Parameter('prefix-5 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"class BasicParamPrefixWithMultiLineDoc(gdb.ParameterPrefix):" "" \
	"  \"\"\"This is a multi line doc string." "" \
	" " "" \
	"  The rest of the doc string is here.\"\"\"" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"BasicParamPrefixWithMultiLineDoc('prefix-6')" "" \
	"gdb.Parameter('prefix-6 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"class BasicParamPrefixWithDocParameter(gdb.ParameterPrefix):" "" \
	"  \"\"\"This is an unsused doc string.\"\"\"" "" \
	"  def __init__(self, name, doc):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE, doc)" "" \
	"BasicParamPrefixWithDocParameter('prefix-7'," "" \
	"                    \"\"\"The doc string text is here.\"\"\")" "" \
	"gdb.Parameter('prefix-7 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"end"

    foreach mode { "set" "show" } {
	gdb_test "help $mode prefix-4" \
	    [make_help_re $mode "prefix-4" \
		 "This command is not documented."]

	gdb_test "help $mode prefix-5" \
	    [make_help_re $mode "prefix-5" \
		 "This is a single line doc string."]

	gdb_test "help $mode prefix-6" \
	    [make_help_re $mode "prefix-6" \
		 [multi_line \
		      "This is a multi line doc string." \
		      "" \
		      "The rest of the doc string is here."]]

	gdb_test "help $mode prefix-7" \
	    [make_help_re $mode "prefix-7" \
		 "The doc string text is here."]

	foreach prefix { prefix-4 prefix-5 prefix-6 prefix-7 } {
	    gdb_test "$mode $prefix xxx" \
		"^Undefined $mode $prefix command: \"xxx\"\\.  Try \"help $mode $prefix\"\\."
	}
    }

    foreach prefix { prefix-4 prefix-5 prefix-6 prefix-7 } {
	gdb_test "set $prefix" \
	    [make_sub_cmd_help_re "set" $prefix]

	gdb_test "show $prefix" \
	    [make_show_prefix_re $prefix]
    }
}

# Create a sub-class of gdb.ParameterPrefix, and make use of
# 'invoke_set' and 'invoke_show'.  Test that the invoke method is
# executed when expected, and that, by default, these invoke methods
# repeat when the user issues an empty command.
proc_with_prefix test_prefix_with_invoke {} {
    gdb_test_multiline "ParameterPrefix with invoke_set" \
	"python" "" \
	"class PrefixWithInvokeSet(gdb.ParameterPrefix):" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"  def invoke_set(self, args, from_tty):" "" \
	"    print(f\"invoke_set (a): \\\"{args}\\\" {from_tty}\")" "" \
	"PrefixWithInvokeSet('prefix-8')" "" \
	"gdb.Parameter('prefix-8 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"class PrefixWithInvokeShow(gdb.ParameterPrefix):" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"  def invoke_show(self, args, from_tty):" "" \
	"    print(f\"invoke_show (b): \\\"{args}\\\" {from_tty}\")" "" \
	"PrefixWithInvokeShow('prefix-9')" "" \
	"gdb.Parameter('prefix-9 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"class PrefixWithBothInvoke(gdb.ParameterPrefix):" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"  def invoke_set(self, args, from_tty):" "" \
	"    print(f\"invoke_set (c): \\\"{args}\\\" {from_tty}\")" "" \
	"  def invoke_show(self, args, from_tty):" "" \
	"    print(f\"invoke_show (d): \\\"{args}\\\" {from_tty}\")" "" \
	"PrefixWithBothInvoke('prefix-10')" "" \
	"gdb.Parameter('prefix-10 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"end"

    gdb_test "set prefix-8 xxx yyy" \
	"^invoke_set \\(a\\): \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "^\r\ninvoke_set \\(a\\): \"xxx yyy\" True" \
	"repeat set prefix-8 xxx yyy"

    gdb_test "show prefix-8 xxx yyy" \
	"^Undefined show prefix-8 command: \"xxx yyy\"\\.  Try \"help show prefix-8\"\\."

    gdb_test "set prefix-9 xxx yyy" \
	"^Undefined set prefix-9 command: \"xxx yyy\"\\.  Try \"help set prefix-9\"\\."

    gdb_test "show prefix-9 xxx yyy" \
	"^invoke_show \\(b\\): \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "^\r\ninvoke_show \\(b\\): \"xxx yyy\" True" \
	"repeat show prefix-9 xxx yyy"

    gdb_test "set prefix-10 xxx yyy" \
	"^invoke_set \\(c\\): \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "^\r\ninvoke_set \\(c\\): \"xxx yyy\" True" \
	"repeat set prefix-10 xxx yyy"

    gdb_test "show prefix-10 xxx yyy" \
	"^invoke_show \\(d\\): \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "^\r\ninvoke_show \\(d\\): \"xxx yyy\" True" \
	"repeat show prefix-10 xxx yyy"

    gdb_test "set prefix-8" \
	"^invoke_set \\(a\\): \"\" True"

    gdb_test "show prefix-8" \
	[make_show_prefix_re "prefix-8"]

    gdb_test "set prefix-9" \
	[make_sub_cmd_help_re "set" "prefix-9"]

    gdb_test "show prefix-9" \
	"^invoke_show \\(b\\): \"\" True"

    gdb_test "set prefix-10" \
	"^invoke_set \\(c\\): \"\" True"

    gdb_test "show prefix-10" \
	"^invoke_show \\(d\\): \"\" True"
}

# Create ParameterPrefix sub-classes that make use of the
# dont_repeat() method.  Check that the relevant set/show invoke
# callback doesn't repeat when an empty command is used.
proc_with_prefix test_dont_repeat {} {
    gdb_test_multiline "ParameterPrefix with invoke_set and dont_repeat" \
	"python" "" \
	"class PrefixWithInvokeAndDoNotRepeatSet(gdb.ParameterPrefix):" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"  def invoke_set(self, args, from_tty):" "" \
	"    self.dont_repeat()" "" \
	"    print(f\"invoke_set: \\\"{args}\\\" {from_tty}\")" "" \
	"  def invoke_show(self, args, from_tty):" "" \
	"    print(f\"invoke_show: \\\"{args}\\\" {from_tty}\")" "" \
	"PrefixWithInvokeAndDoNotRepeatSet('prefix-11')" "" \
	"gdb.Parameter('prefix-11 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"class PrefixWithInvokeAndDoNotRepeatShow(gdb.ParameterPrefix):" "" \
	"  def __init__(self, name):" "" \
	"    super().__init__(name, gdb.COMMAND_NONE)" "" \
	"  def invoke_set(self, args, from_tty):" "" \
	"    print(f\"invoke_set: \\\"{args}\\\" {from_tty}\")" "" \
	"  def invoke_show(self, args, from_tty):" "" \
	"    self.dont_repeat()" "" \
	"    print(f\"invoke_show: \\\"{args}\\\" {from_tty}\")" "" \
	"PrefixWithInvokeAndDoNotRepeatShow('prefix-12')" "" \
	"gdb.Parameter('prefix-12 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"end"

    gdb_test "set prefix-11 xxx yyy" \
	"^invoke_set: \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "^" \
	"repeat set prefix-11 xxx yyy"

    gdb_test "show prefix-11 xxx yyy" \
	"^invoke_show: \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "invoke_show: \"xxx yyy\" True" \
	"repeat show prefix-11 xxx yyy"

    gdb_test "set prefix-12 xxx yyy" \
	"^invoke_set: \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "^\r\ninvoke_set: \"xxx yyy\" True" \
	"repeat set prefix-12 xxx yyy"

    gdb_test "show prefix-12 xxx yyy" \
	"^invoke_show: \"xxx yyy\" True"

    send_gdb "\n"
    gdb_test "" "^" \
	"repeat show prefix-12 xxx yyy"
}

# Create a parameter prefixm, and immediately add another prefix under
# the first.  The important thing here is that the second prefix is
# created into an otherwise empty prefix as this triggered a bug at
# one point.
proc_with_prefix test_nested {} {
    gdb_test_multiline "Create nested parameter prefixes" \
	"python" "" \
	"gdb.ParameterPrefix('prefix-13', gdb.COMMAND_NONE)" "" \
	"gdb.ParameterPrefix('prefix-13 prefix-14', gdb.COMMAND_NONE)" "" \
	"gdb.Parameter('prefix-13 param-1', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.Parameter('prefix-13 param-2', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.Parameter('prefix-13 prefix-14 param-3', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"gdb.Parameter('prefix-13 prefix-14 param-4', gdb.COMMAND_NONE, gdb.PARAM_BOOLEAN)" "" \
	"end" ""

    gdb_test "show prefix-13 prefix-14" \
	[multi_line \
	     "^prefix-13 prefix-14 param-3:  The current value of 'prefix-13 prefix-14 param-3' is \"off\"\\." \
	     "prefix-13 prefix-14 param-4:  The current value of 'prefix-13 prefix-14 param-4' is \"off\"\\."]

    gdb_test "show prefix-13" \
	[multi_line \
	     "^prefix-13 param-1:  The current value of 'prefix-13 param-1' is \"off\"\\." \
	     "prefix-13 param-2:  The current value of 'prefix-13 param-2' is \"off\"\\." \
	     "prefix-13 prefix-14 param-3:  The current value of 'prefix-13 prefix-14 param-3' is \"off\"\\." \
	     "prefix-13 prefix-14 param-4:  The current value of 'prefix-13 prefix-14 param-4' is \"off\"\\."]

    gdb_test "set prefix-13 prefix-14" \
	[multi_line \
	     "" \
	     "set prefix-13 prefix-14 param-3 -- Set the current value of 'prefix-13 prefix-14 param-3'\\." \
	     "set prefix-13 prefix-14 param-4 -- Set the current value of 'prefix-13 prefix-14 param-4'\\." \
	     "" \
	     ".*"]

    gdb_test "set prefix-13" \
	[multi_line \
	     "" \
	     "set prefix-13 param-1 -- Set the current value of 'prefix-13 param-1'\\." \
	     "set prefix-13 param-2 -- Set the current value of 'prefix-13 param-2'\\." \
	     "set prefix-13 prefix-14 -- This command is not documented\\." \
	     "" \
	     ".*"]
}

test_basic_usage
test_simple_sub_class
test_prefix_with_invoke
test_dont_repeat
test_nested
