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

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

# 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 } then {
		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" "Invalid command to alias to: bar"

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 elms .*"

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