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

# Verify GDB/MI -complete in various scenarios. This test only tests
# -complete command, not the correctness of completions.

load_lib mi-support.exp
set MIFLAGS "-i=mi"

standard_testfile .cc

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
     untested "failed to compile"
     return -1
}

mi_clean_restart $binfile

mi_runto_main

mi_gdb_test "1-complete br" \
            "1\\^done,completion=\"break\",matches=\\\[.*\"break\",.*\"break-range\".*\\\],max_completions_reached=\"0\"" \
            "-complete br"

# Check empty completion list.
mi_gdb_test "5-complete bogus" \
            "5\\^done,matches=\\\[\\\],max_completions_reached=\"0\"" \
            "-complete bogus"

# Check completions for commands with space.
mi_gdb_test "4-complete \"b mai\"" \
            "4\\^done,completion=\"b main\",matches=\\\[.*\"b main\".*\\\],max_completions_reached=\"0\"" \
            "-complete \"b mai\""

# Check wildmatching.
mi_gdb_test "5-complete \"b push_ba\"" \
            "5\\^done,completion=\"b push_back\\(\",matches=\\\[.*\"b A::push_back\\(void\\*\\)\".*\\\],max_completions_reached=\"0\"" \
            "-complete \"b push_ba\", wildmatching"

mi_gdb_test "-info-gdb-mi-command complete" \
            "\\^done,command=\{exists=\"true\"\}" \
            "-info-gdb-mi-command complete"

# Limit max completions and check that max_completions_reached=\"0\" is set
# to 1.
mi_gdb_test "set max-completions 1" ".*=cmd-param-changed.*\\^done" \
    "set max-completions 1"

mi_gdb_test "2-complete br" \
            ".*2\\^done,completion=\"br\[A-Za-z0-9-\]+\",matches=\\\[\"br\[A-Za-z0-9-\]+\"\\\],max_completions_reached=\"1\"" \
            "-complete br, max-completions 1"

# Disable completions and check an error is returned
mi_gdb_test "set max-completions 0" ".*=cmd-param-changed.*\\^done" \
    "set max-completions 0"

mi_gdb_test "3-complete br" \
            ".*3\\^error,msg=\".*" \
            "-complete br, max-completions 0"
