# Copyright 2021-2023 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/>.

# Test tab-completion for the 'show user' command.

load_lib completion-support.exp

# This test does not require any file to be loaded.
clean_restart

# Define the 'foo' and 'bar' commands so we have something to complete.
set re [multi_line "Type commands for definition of \"foo\"." \
		   "End with a line saying just \"end\"." \
		   ">$" ]
gdb_test_multiple "define foo" "define user command: foo" {
    -re $re {
	gdb_test "print \"foo\"\nend" "" $gdb_test_name
    }
}

set re [multi_line "Type commands for definition of \"bar\"." \
		   "End with a line saying just \"end\"." \
		   ">$"]
gdb_test_multiple "define bar" "define user command: bar" {
    -re  $re {
	gdb_test "print \"bar\"\nend" "" $gdb_test_name
    }
}

# The completer should show both options.
test_gdb_complete_multiple "show user " "" "" "bar foo"

# If we give the beginning of one of the commands, it should complete it.
test_gdb_complete_unique "show user f" "show user foo"
test_gdb_complete_unique "show user b" "show user bar"

# Define a user prefix.
gdb_test "define-prefix mygroup"

# Add a user defined command in the user defined prefix.
set re [multi_line  "Type commands for definition of \"mygroup mycommand\"." \
		    "End with a line saying just \"end\"." \
		    ">$"]
set test_name "define user command: mygroup mycommand"
gdb_test_multiple "define mygroup mycommand" $test_name {
    -re  $re {
	gdb_test "print \"42\"\nend" "" $gdb_test_name
    }
}

with_test_prefix "with user-prefix" {
    # We now expect the completion to yield only 3 results.  As the 'mycommand'
    # is within the 'mygroup' prefix, it should not be reachable without
    # traversing 'mygroup' first.
    test_gdb_complete_multiple "show user " "" "" "bar foo mygroup"
}

# Check that we can complete commands defined under a prefix.
test_gdb_complete_unique "show user m" "show user mygroup"
test_gdb_complete_unique "show user mygroup " "show user mygroup mycommand"
