# Copyright (C) 2014-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/>.

set testfile "py-completion"

load_lib gdb-python.exp

set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
set discard 0
gdb_exit
gdb_start

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

# Tab completion tests require readline support, and this set of tests
# doesn't work on a remote host either.
if { [readline_is_used] && ![is_remote host] } {
    gdb_test_no_output "source ${pyfile}" "load python file"

    # Create a temporary directory
    set testdir "[standard_output_file "py-completion-testdir"]/"
    set testdir_regex [string_to_regexp $testdir]
    set testdir_complete [standard_output_file "py-completion-test"]
    file mkdir $testdir

    # This one should always pass.
    send_gdb "completefileinit ${testdir_complete}\t"
    gdb_test_multiple "" "completefileinit completion" {
	-re "^completefileinit ${testdir_regex}$" {
	    pass "completefileinit completion"
	}
    }

    # Just discarding whatever we typed.
    gdb_test " " ".*" "discard #[incr discard]"

    # This is the problematic one.
    send_gdb "completefilemethod ${testdir_complete}\t"
    gdb_test_multiple "" "completefilemethod completion" {
	-re "^completefilemethod ${testdir_regex} $" {
	    fail "completefilemethod completion (completed filename as wrong command arg)"
	}
	-re "^completefilemethod ${testdir_regex}$" {
	    pass "completefilemethod completion"
	}
    }

    # Discarding again
    gdb_test " " ".*" "discard #[incr discard]"

    # Another problematic
    set completion_regex "[string_to_regexp [standard_output_file "py-completion-t"]]"
    send_gdb "completefilecommandcond [standard_output_file "py-completion-t\t"]"
    gdb_test_multiple "" "completefilecommandcond completion" {
	-re "^completefilecommandcond ${testdir}$" {
	    fail "completefilecommandcond completion (completed filename instead of command)"
	}
	-re "^completefilecommandcond ${completion_regex}\007$" {
	    pass "completefilecommandcond completion"
	}
    }

}

# Start gdb over again to clear out current state.  This can interfere
# with the expected output of the below tests in a buggy gdb.
gdb_exit
gdb_start
gdb_test_no_output "source ${pyfile}" "load python file again"

gdb_test_sequence "complete completel" \
    "list all completions of 'complete completel'" {
	"completelimit1"
	"completelimit2"
	"completelimit3"
	"completelimit4"
	"completelimit5"
	"completelimit6"
	"completelimit7"
    }

# Discarding again
gdb_test " " ".*" "discard #[incr discard]"

gdb_test_sequence "complete completelimit1 c" \
    "list all completions of 'complete completelimit1 c'" {
	"completelimit1 cl11"
	"completelimit1 cl12"
	"completelimit1 cl13"
    }

# Discarding again
gdb_test " " ".*" "discard #[incr discard]"

# If using readline, we can TAB-complete.  This used to trigger a bug
# because the cached result from the completer was being reused for
# a different python command.
if {[readline_is_used]} {
    set testname "tab-complete 'completelimit1 c'"
    send_gdb "completelimit1 c\t"
    gdb_test_multiple "" $testname {
	-re "^completelimit1 c\\\x07l1$" {
	    pass $testname

	    # Discard the command line
	    gdb_test " " ".*" "discard #[incr discard]"
	}
    }

    gdb_test_sequence "complete completelimit2 c" \
	"list all completions of 'complete completelimit2 c'" {
	    "completelimit2 cl21"
	    "completelimit2 cl210"
	    "completelimit2 cl22"
	    "completelimit2 cl23"
	    "completelimit2 cl24"
	    "completelimit2 cl25"
	    "completelimit2 cl26"
	    "completelimit2 cl27"
	    "completelimit2 cl28"
	    "completelimit2 cl29"
	}
}
