# Copyright 2019-2021 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 tests GDB's ability to remove symbol aliases from the
# completion list in C++.

load_lib completion-support.exp

standard_testfile .cc

if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug}]} {
    return -1
}

# Disable the completion limit for the whole testcase.
gdb_test_no_output "set max-completions unlimited"

test_gdb_complete_unique \
    "break get_v" \
    "break get_value(object_p)"

test_gdb_complete_unique \
    "break gr" \
    "break grab_it(int_magic_t*)"

test_gdb_complete_multiple "break " "get_som" "ething(" {
    "get_something(my_string_t)"
    "get_something(object_p)"
}
