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