# Test the alias command.
# Copyright 2011-2025 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/>.

clean_restart

# Helper to test the -a option to alias.
# Aliases that are abbreviations of commands (e.g. r -> run)
# do not appear in help output.

proc test_abbrev_not_present { alias_name } {
    global gdb_prompt
    set alias_present 0
    set test_name "abbrev $alias_name not present in help command list"
    gdb_test_multiple "help aliases" $test_name {
	-re "\[\r\n\]$alias_name \[^\r\n\]*" {
	    set alias_present 1
	    exp_continue
	}
	-re ".*$gdb_prompt $" {
	    if {!$alias_present} {
		pass $test_name
	    } else {
		fail $test_name
	    }
	}
    }
}

proc test_abbrev_alias { name gdb_command test_value } {
    gdb_test_no_output $gdb_command
    gdb_test_no_output "$name print elements $test_value"
    gdb_test "show print elements" "Limit .* is $test_value\[.\]" "verify $name"
    test_abbrev_not_present $name
}

test_abbrev_alias set2 "alias -a set2=set" 42
test_abbrev_alias set3 "alias -a set3= set" 43
test_abbrev_alias set4 "alias -a set4 =set" 44
test_abbrev_alias set5 "alias -a set5 = set" 45
test_abbrev_alias set6 "alias -a -- set6 = set" 46
test_abbrev_alias -a "alias -a -- -a = set" 47

gdb_test "alias set2=set" "already exists: set2"
gdb_test "alias foo=bar" "Undefined command: \"bar\".  Try \"help\"."

gdb_test_no_output "alias spe = set p elem"
gdb_test_no_output "spe 50"
gdb_test "show print elements" "Limit .* is 50\[.\]" "verify spe"

gdb_test_no_output "alias set pr elms = set p elem"
gdb_test_no_output "set pr elms 51"
gdb_test "show print elements" "Limit .* is 51\[.\]" "verify set pr elms"
gdb_test "help set print" "set print elements, set print elms, spe .*"

# Verify alias command detects a non existing prefix.
gdb_test "alias assigne imprime limite-elements = set print elements" \
    "ALIAS and COMMAND prefixes do not match\." \
    "assigne imprime prefix not defined"

gdb_test "alias set imprime limite-elements = set print elements" \
    "ALIAS and COMMAND prefixes do not match\." \
    "set imprime prefix not defined"

# Verify alias command detects a non matching prefix.
gdb_test "alias set ada limite-elements = set print elements" \
    "ALIAS and COMMAND prefixes do not match\." \
    "mismatched prefix"

# Verify alias command detects a non matching prefix due to length.
gdb_test "alias set imprime-limite-elements = set print elements" \
    "Mismatched command length between ALIAS and COMMAND\." \
    "mismatched length"


# Gradually define the prefixes and the limite-elements command.
gdb_test_no_output "alias assigne = set" "alias assigne"
gdb_test_no_output "alias assigne imprime = set print" "alias assigne imprime"
gdb_test_no_output "alias assigne imprime limite-elements = set print elements" \
    "alias assigne imprime limite-elements"

# Define an alias using the command prefix with a command using an alias prefix.
gdb_test_no_output "alias set print max-elements = assigne imprime elements" \
    "alias set print max-elements using assigne imprime"


# Tests the resulting prefixes and commands.
gdb_test_no_output "assigne print elements 52"
gdb_test "show print elements" "Limit .* is 52\[.\]" "verify 52"

gdb_test_no_output "assigne imprime elements 53"
gdb_test "show print elements" "Limit .* is 53\[.\]" "verify 53"

gdb_test_no_output "assigne imprime limite-elements 54"
gdb_test "show print elements" "Limit .* is 54\[.\]" "verify 54"

gdb_test_no_output "set imprime elements 55"
gdb_test "show print elements" "Limit .* is 55\[.\]" "verify 55"

gdb_test_no_output "set print limite-elements 56"
gdb_test "show print elements" "Limit .* is 56\[.\]" "verify 56"

gdb_test_no_output "set print max-elements 57"
gdb_test "show print elements" "Limit .* is 57\[.\]" "verify 57"

# Test aliases having a common prefix.
gdb_test_no_output "alias abcd  = backtrace"
gdb_test_no_output "alias abcde = backtrace"
gdb_test_no_output "alias fghij = backtrace"
gdb_test_no_output "alias fghi  = backtrace"

# Verify help aliases shows the user defined aliases
gdb_test "help aliases" ".*abcd --.*.*abcde --.*"
