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

gdb_exit
gdb_start

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

gdb_test_no_output "source ${srcdir}/${subdir}/${testfile}.py"

# 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.
set discard 0
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 ${srcdir}/${subdir}/${testfile}.py"

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