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

# This file was written by Elena Zannoni (ezannoni@cygnus.com)

# This file is part of the gdb testsuite.

#
# tests for command completion
#
# Here are some useful test cases for completion.  
# They should be tested with both M-? and TAB.
#
#   "show output-" "radix"
#   "show output" "-radix"
#   "p" ambiguous (commands starting with p--path, print, printf, etc.)
#   "p "  ambiguous (all symbols)
#   "info t foo" no completions
#   "info t " no completions
#   "info t" ambiguous ("info target", "info terminal", etc.)
#   "info ajksdlfk" no completions
#   "info ajksdlfk " no completions
#   "info" " "
#   "info " ambiguous (all info commands)
#   "p \"break1" unambiguous (completes to filename "break1.c")
#   "p \"break1." unambiguous (should complete to "break1.c" but does not,
#	due to readline limitations)
#   "p 'arg" ambiguous (all symbols starting with arg)
#   "p b-arg" ambiguous (all symbols starting with arg)
#   "p b-" ambiguous (all symbols)
#   "file Make" "file" (word break hard to screw up here)
#   "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
#



#
# test running programs
#

standard_testfile break.c break1.c

if [get_compiler_info] {
    return -1
}

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

if ![runto_main] then {
        perror "tests suppressed"
}

set timeout 30
gdb_test_no_output "set max-completions unlimited"

gdb_test_no_output "complete print values\[0\].x." \
    "field completion with invalid field"

# If there is a non-deprecated completion, it should be returned.
gdb_test "complete sav" "save" "test non-deprecated completion"
# If there is only a deprecated completion, then it should be returned.
gdb_test "complete save-t" "save-tracepoints" "test deprecated completion"


#
# Tag name completion.
#

gdb_test "complete ptype struct some_" "ptype struct some_struct"
gdb_test "complete ptype enum some_" "ptype enum some_enum"
gdb_test "complete ptype union some_" "ptype union some_union"


gdb_test "complete set gnutarget aut" "set gnutarget auto"


gdb_test "complete set cp-abi aut" "set cp-abi auto"

# Test that completion of commands 'target FOO' works well.
set targets [list "core" "tfile" "exec"]

# Test that completion of command 'target ctf' if GDB supports ctf
# target.
gdb_test_multiple "target ctf" "" {
    -re "Undefined target command: \"ctf\"\.  Try \"help target\"\.\r\n$gdb_prompt $" {
    }
    -re "No CTF directory specified.*\r\n$gdb_prompt $" {
	lappend targets "ctf"
    }
}

# Test artifacts are put in different locations depending on test
# is a parallel run or not.  Firstly check file exists, and then
# do the test on file completion.

foreach dir1 [ list "./gdb.base" "./outputs/gdb.base/completion" ] {
    if { [remote_file host exists ${dir1}/completion]
	 && [remote_file host exists ${dir1}/completion0.o]
	 && [remote_file host exists ${dir1}/completion1.o] } {
	foreach target_name ${targets} {
	    gdb_test "complete target ${target_name} ${dir1}/completion" \
		"target ${target_name} ${dir1}/completion.*${dir1}/completion0\\.o.*${dir1}/completion1\\.o.*" \
		"complete target ${target_name}"
	}
	break
    }
}

#
# "set foo unlimited" completion.
#

# A var_uinteger command.
gdb_test "complete set height " "set height unlimited"
gdb_test "complete set height u" "set height unlimited"

# A var_integer command.
gdb_test "complete set listsize " "set listsize unlimited"
gdb_test "complete set listsize unl" "set listsize unlimited"

# A var_zuinteger_unlimited command.
gdb_test "complete set trace-buffer-size " "set trace-buffer-size unlimited"
gdb_test "complete set trace-buffer-size unl" "set trace-buffer-size unlimited"

# Test "info registers" completion: First determine this
# architecture's registers and reggroups...

set regs_output [capture_command_output "mt print registers" \
		     ".*Name.*Nr.*Rel.*Offset.*Size.*Type.\[^\n\]*\n"]
append regs_output "\n"
append regs_output [capture_command_output "mt print reggroups" \
			".*Group.*Type\[^\n]*\n"]
append regs_output "\n"
append regs_output [capture_command_output "mt print user-registers" \
		     ".*Name.*Nr\[^\n]*\n"]
set all_regs {}
foreach {- reg} [regexp -all -inline -line {^\s+(\w+)} $regs_output] {
    lappend all_regs $reg
}

set all_regs [join [lsort -unique $all_regs]]

# ... and then compare them to the completion of "info registers".

set regs_output [capture_command_output "complete info registers " ""]
set completed_regs {}
foreach {-> reg} [regexp -all -inline -line {^info registers (\w+\S*)} $regs_output] {
    lappend completed_regs $reg
}
set completed_regs [join [lsort $completed_regs]]
gdb_assert {{$all_regs eq $completed_regs}} "complete 'info registers '"

# Tests below are about tab-completion, which doesn't work if readline
# library isn't used.  Check it first.

if { ![readline_is_used] } {
    return -1
}

set test "complete 'hfgfh'"
send_gdb "hfgfh\t"
gdb_test_multiple "" "$test" {
    -re "^hfgfh\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" $test {
	    -re "Undefined command: \"hfgfh\"\\.  Try \"help\"\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

#exp_internal 0

set test "complete 'show output'"
send_gdb "show output\t"
gdb_test_multiple "" "$test" {
    -re "^show output-radix $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Default output radix for printing of values is 10\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'show output-'"
send_gdb "show output-\t"
gdb_test_multiple "" "$test" {
    -re "^show output-radix $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Default output radix for printing of values is 10\\..*$gdb_prompt $" {
		pass "$test"
	    }
        }
    }
}

set test "complete 'p'"
send_gdb "p\t"
gdb_test_multiple "" "$test" {
    -re "^p\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "The history is empty\\..*$gdb_prompt $" {
		pass "$test"
	    }
        }
    }
}

set test "complete 'p '"
send_gdb "p \t"
gdb_test_multiple "" "$test" {
    -re "^p \\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "The history is empty\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info t foo'"
send_gdb "info t foo\t"
gdb_test_multiple "" "$test" {
    -re "^info t foo\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Ambiguous info command \"t foo\": target, tasks, terminal, threads, tp, tracepoints, tvariables, (type-printers, )?types\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info t'"
send_gdb "info t\t"
gdb_test_multiple "" "$test" {
    -re "^info t\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Ambiguous info command \"t\": target, tasks, terminal, threads, tp, tracepoints, tvariables, (type-printers, )?types\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info t '"
send_gdb "info t \t"
gdb_test_multiple "" "$test" {
    -re "^info t \\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Ambiguous info command \"t \": target, tasks, terminal, threads, tp, tracepoints, tvariables, (type-printers, )?types\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info asdfgh'"
send_gdb "info asdfgh\t"
gdb_test_multiple "" "$test" {
    -re "^info asdfgh\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Undefined info command: \"asdfgh\".  Try \"help info\"\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info asdfgh '"
send_gdb "info asdfgh \t"
gdb_test_multiple "" "$test" {
    -re "^info asdfgh \\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Undefined info command: \"asdfgh \".  Try \"help info\"\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info'"
send_gdb "info\t"
gdb_test_multiple "" "$test" {
    -re "^info $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands.*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info '"
send_gdb "info \t"
gdb_test_multiple "" "$test" {
    -re "^info \\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete (2) 'info '"
send_gdb "info \t"
gdb_test_multiple "" "$test" {
    -re "^info \\\x07$" {
	send_gdb "\t"
	gdb_test_multiple "" "$test" {
	    -re "address.*types.*$gdb_prompt " {
		send_gdb "\n"
		gdb_test_multiple "" "$test" {
		    -re "\"info\".*unambiguous\\..*$gdb_prompt $" {
			pass "$test"
		    }
		}
	    }
	}
    }
}

set test "complete 'help info wat'"
send_gdb "help info wat\t"
gdb_test_multiple "" "$test" {
    -re "^help info watchpoints $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Status of specified watchpoints.*\r\n.*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
    -re "^help info wat\\\x07$" {
	fail "$test"
    }
}

set test "complete 'p \"break1'"
send_gdb "p \"break1\t"
gdb_test_multiple "" "$test" {
    -re "^p \"break1\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {}
    }
    -re "^p \"break1\\.c\"$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

setup_xfail "*-*-*"
set test "complete 'p \"break1.'"
send_gdb "p \"break1.\t"
gdb_test_multiple "" "$test" {
    -re "^p \"break1\\.\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {}
    }
    -re "^p \"break1\\.c\"$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
    -re "^p \"break1\\..*$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {}
    }
}

set test "complete 'p 'arg'"
send_gdb "p 'arg\t"
gdb_test_multiple "" "$test" {
    -re "^p 'arg\\\x07$" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete (2) 'p 'arg'"
send_gdb "p 'arg\t"
gdb_test_multiple "" "$test" {
    -re "^p 'arg\\\x07$" {
	send_gdb "\t"
	gdb_test_multiple "" "$test" {
	    -re "argv.*$gdb_prompt " {
		send_gdb "\n"
		gdb_test_multiple "" "$test" {
		    -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $" {
			pass "$test"
		    }
		}
	    }
	    -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
		send_gdb "n"
		gdb_test_multiple "" "$test" {
		    -re "\\(gdb\\) p 'arg$" {
			send_gdb "\n"
			gdb_test_multiple "" "$test" {
			    -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $" {
				pass "$test"
			    }
			}
		    }
		}
	    }
	}
    }
}

set test "complete 'handle signal'"
send_gdb "handle sigq\t"
gdb_test_multiple "" "$test" {
    -re "^handle sigqSIGQUIT $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "SIGQUIT.*Quit.*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'handle keyword'"
send_gdb "handle nos\t"
gdb_test_multiple "" "$test" {
    -re "^handle nostop $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete help aliases"
send_gdb "help user-define\t"
gdb_test_multiple "" "$test" {
    -re "^help user-defined $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}


# These tests used to try completing the shorter "p b-a".
# Unfortunately, on some systems, there are .o files in system
# libraries which declare static variables named `b'.  Of course,
# those variables aren't really in scope, as far as the compiler is
# concerned.  But GDB deliberately tries to be more liberal: if you
# enter an identifier that doesn't have any binding in scope, GDB will
# search all the program's compilation units for a static variable of
# the given name.
#
# This behavior can help avoid a lot of pedantry, so it's usually a
# good thing.  But in this test case, it causes GDB to print the value
# of some random variable, instead of giving us the "No symbol..."
# error we were expecting.
#
# For example, on S/390 linux, the file s_atan.c in libm.a declares a
# `b', which is a structure containing an int and a float, so GDB says
# ``Argument to arithmetic operation not a number or boolean'' instead
# of ``No symbol ...''.
#
# So, I'm hoping that there is no system with a static library variable named
# `no_var_by_this_name'.

set test "complete 'p no_var_named_this-arg'"
send_gdb "p no_var_named_this-arg\t"
gdb_test_multiple "" "$test" {
    -re "^p no_var_named_this-arg\\\x07$" {
        send_gdb "\n"
	gdb_test_multiple "" "$test" {
            -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
		pass "$test"
            }
        }
    }
}

set test "complete (2) 'p no_var_named_this-arg'"
send_gdb "p no_var_named_this-arg\t"
gdb_test_multiple "" "$test" {
    -re "^p no_var_named_this-arg\\\x07$" {
	send_gdb "\t"
	gdb_test_multiple "" "$test" {
	    -re "argv.*$gdb_prompt " {
		send_gdb "\n"
		gdb_test_multiple "" "$test" {
		    -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
			pass "$test"
		    }
		}
	    }
	    -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
		send_gdb "n\n"

		# Eat the prompt
		gdb_expect {
		    -re "$gdb_prompt " {
			pass "$test (eat prompt)"
		    }
		    timeout {
			fail "(timeout) $test (eat prompt)"
		    }
		}

		gdb_test_multiple "" "$test" {
		    -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
			pass "$test"
		    }
		}
	    }
        }
    }
}

set test "complete (2) 'p no_var_named_this-'"
send_gdb "p no_var_named_this-\t"
gdb_test_multiple "" "$test" {
    -re "^p no_var_named_this-\\\x07$" {
	send_gdb "\t"
	gdb_test_multiple "" "$test" {
	    -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
		send_gdb "n\n"

		# Eat the prompt
		gdb_expect {
		    -re "$gdb_prompt " {
			pass "$test (eat prompt)"
		    }
		    timeout {
			fail "(timeout) $test (eat prompt)"
		    }
		}

		gdb_test_multiple "" "$test" {
		    -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
			pass "$test"
		    }
		}
	    }
	    -re "argv.*$gdb_prompt $" {
		send_gdb "\n"
		gdb_test_multiple "" "$test" {
		    -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
			pass "$test"
		    }
		}
	    }
	}
    }
}

set test "complete 'p values\[0\].a'"
send_gdb "p values\[0\].a\t"
gdb_test_multiple "" "$test" {
    -re "^p values.0..a_field $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re " = 0.*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'p values\[0\] . a'"
send_gdb "p values\[0\] . a\t"
gdb_test_multiple "" "$test" {
    -re "^p values.0. . a_field $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re " = 0.*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'p &values\[0\] -> a'"
send_gdb "p &values\[0\] -> a\t"
gdb_test_multiple "" "$test" {
    -re "^p &values.0. -> a_field $" {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re " = .*0x\[0-9a-fA-F\]*.*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

gdb_test "complete p &values\[0\]->z" \
    "p &values.0.->z_field" \
    "completion of field in anonymous union"

gdb_test "complete ptype &values\[0\]->z" \
    "ptype &values.0.->z_field" \
    "ptype completion of field in anonymous union"

gdb_test "complete whatis &values\[0\]->z" \
    "whatis &values.0.->z_field" \
    "whatis completion of field in anonymous union"

# The following tests used to simply try to complete `${objdir}/file',
# and so on.  The problem is that ${objdir} can be very long; the
# completed filename may be more than eighty characters wide.  When
# this happens, readline tries to manage things, producing output that
# may make sense on the screen, but is rather hard for our script to
# recognize.
#
# In the case that motivated this change, the (gdb) prompt occupied
# the leftmost six columns, and `${objdir}/' was seventy-four
# characters long --- eighty in all.  After printing the slash,
# readline emitted a space, a carriage return, and then `Makefile'
# (the tab character being received as input after `Make'.
#
# Basically, you have to let readline do whatever it's going to do to
# make the screen look right.  If it happens to use a different
# strategy on Tuesdays to get the cursor in the right place, that's
# not something the testsuite should care about.
#
# So, we avoid long lines.  We `cd' to ${srcdir} first, and then do
# the completion relative to the current directory.

# ${srcdir} may be a relative path.  We want to make sure we end up
# in the right directory - so make sure we know where it is.
set mydir [pwd]
cd ${srcdir}
set fullsrcdir [pwd]
cd ${mydir}

# If the directory name contains a '+' we must escape it, adding a backslash.
# If not, the test below will fail because it will interpret the '+' as a 
# regexp operator. We use string_to_regexp for this purpose.

gdb_test "cd ${fullsrcdir}" \
         "Working directory [string_to_regexp ${fullsrcdir}].*" \
         "cd to \${srcdir}"


# GDB used to fail adding / on directories, on the first try only.
set uniquedir ../testsuite/gdb.base/comp-dir
set escapeduniquedir [string_to_regexp ${uniquedir}]
set uniquesu subdi
set uniquesub ${uniquesu}r
set escapeuniquesub [string_to_regexp ${uniquesub}]
send_gdb "dir ${uniquedir}\t"
gdb_expect {
	-re "${escapeduniquedir}/" {
	    pass "directory completion"
	    send_gdb "${uniquesu}\t"
	}
	-re "${escapeduniquedir} $" {
	    fail "directory completion (old gdb bug)"
	    send_gdb "\b/${uniquesu}\t"
	}
	default {
	    fail "directory completion (timeout)"
	    send_gdb "\ndir ${uniquedir}/${uniquesu}\t"
	}
}

gdb_expect {
	-re "${escapeuniquesub}/$" {
	    pass "directory completion 2"
	}
	timeout {
	    fail "directory completion 2"
	}
}

# Empty COMMAND sends no newline while " " sends the newline we need.
gdb_test " " "Source directories searched: .*" "glob remaining of directory test"

gdb_test "complete file ./gdb.base/compl" \
    "file ./gdb.base/completion\\.exp.*" \
    "complete-command 'file ./gdb.base/compl'"

set test "complete 'file ./gdb.base/completi'"
send_gdb "file ./gdb.base/completi\t"
gdb_test_multiple "" "$test" {
    -re "^file ./gdb.base/completion\\.exp $" {
	send_gdb "\n"
	# Ignore the exact error message.
	gdb_test_multiple "" "complete 'file ./gdb.base/completi'" {
	    -re "\r\nA program is being debugged already\\.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\) $" {
		send_gdb "n\n"
		exp_continue
	    }
	    -re "$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

set test "complete 'info func marke'"
send_gdb "info func marke\t"
gdb_test_multiple "" "$test" {
    -re "^info func marke.*r$" {
	send_gdb "\t\t"
	gdb_test_multiple "" "$test" {
	    -re "marker1.*$gdb_prompt " {
		send_gdb "\n"
		gdb_test_multiple "" "$test" {
		    -re "All functions matching regular expression \"marker\":.*File.*break1.c:.*\tint marker1\\((void|)\\);\r\n.*:\tint marker2\\(int\\).*marker3\\(char.*char.*\\).*marker4\\(long( int)?\\);.*$gdb_prompt $" {
			pass "$test"
		    }
		}
	    }
	}
    }
}


set test "complete 'set follow-fork-mode'"
send_gdb "set follow-fork-mode \t\t"
gdb_test_multiple "" "$test" {
    -re "child.*parent.*$gdb_prompt " {
	send_gdb "\n"
	gdb_test_multiple "" "$test" {
	    -re "Requires an argument.*child.*parent.*$gdb_prompt $" {
		pass "$test"
	    }
	    -re "Ambiguous item \"\"\\..*$gdb_prompt $" {
		pass "$test"
	    }
	}
    }
}

#
# Tests for the location completer
#

# Turn off pending breakpoint support so that we don't get queried
# all the time.
gdb_test_no_output "set breakpoint pending off"

set subsrc [string range $srcfile 0 [expr {[string length $srcfile] - 3}]]
set test "tab complete break $subsrc"
send_gdb "break $subsrc\t\t"
gdb_test_multiple "" $test {
    -re "break\.c.*break1\.c.*$gdb_prompt " {
	send_gdb "1\t\n"
	gdb_test_multiple "" $test {
	    -re "malformed linespec error: unexpected end of input\r\n$gdb_prompt " {
		pass $test
	    }
	    -re "$gdb_prompt p$" {
		fail $test
	    }
	}
    }

    -re "$gdb_prompt p$" {
	fail $test
    }
}

gdb_test "complete break $subsrc" "break\.c.*break1\.c"

set test "tab complete break need"
send_gdb "break need\t"
gdb_test_multiple "" $test {
    -re "break need_malloc " {
	send_gdb "\n"
	gdb_test_multiple "" $test {
	    -re ".*Breakpoint.*at .*/$srcfile, line .*$gdb_prompt " {
		pass $test
		gdb_test_no_output "delete breakpoint \$bpnum" \
		    "delete breakpoint for $test"
	    }
	    -re "$gdb_prompt p$" {
		fail $test
	    }
	}
    }
    -re "$gdb_prompt p$" {
	fail $test
    }
}

gdb_test "complete break need" "need_malloc"

# gdb/17960
# Enabling max-completions is necessary to trigger the bug.
gdb_test_no_output "set max-completions 10"
set test "tab complete break $srcfile:ma"
send_gdb "break $srcfile:ma\t"
gdb_test_multiple "" $test {
    -re "break $srcfile:main " {
	send_gdb "\n"
	gdb_test_multiple "" $test {
	    -re ".*Breakpoint.*at .*/$srcfile, line .*$gdb_prompt " {
		pass $test
		gdb_test_no_output "delete breakpoint \$bpnum" \
		    "delete breakpoint for $test"
	    }
	    -re "$gdb_prompt p$" {
		fail $test
	    }
	}
    }
    -re "$gdb_prompt p$" {
	fail $test
    }
}

gdb_test "complete break $srcfile:ma" "break\.c:main"

# End of gdb/17960 testing.

#
# Completion limiting.
#

gdb_test_no_output "set max-completions 5"

proc ignore_and_resync {cmd result test} {
    global gdb_prompt

    gdb_test_multiple "" "$test" {
	-re "^${cmd}$" {
	    # Complete the command and ignore the output
	    # to resync gdb for the next test.
	    send_gdb "\n"
	    gdb_test_multiple "" "$test" {
		-re "$gdb_prompt $" {
		    $result $test
		}
	    }
	}
    }
}

proc test_tab_complete {cmd test} {
    global gdb_prompt

    send_gdb "${cmd}\t"
    gdb_test_multiple "" "$test" {
	-re "^${cmd}\\\x07$" {
	    send_gdb "\t"
	    gdb_test_multiple "" "$test" {
		-re "List may be truncated, max-completions reached.*\r\n$gdb_prompt " {
		    ignore_and_resync $cmd pass $test
		}
		-re "$gdb_prompt " {
		    ignore_and_resync $cmd fail $test
		}
	    }
	}
    }
}

test_tab_complete "p" \
    "command-name completion limiting using tab character"

set test "command-name completion limiting using complete command"
send_gdb "complete p\n"
gdb_test_multiple "" "$test" {
    -re "List may be truncated, max-completions reached.*\r\n$gdb_prompt $" {
	pass "$test"
    }
}

gdb_test_no_output "set max-completions 3"

test_tab_complete "p marker" \
    "symbol-name completion limiting using tab character"

set test "symbol-name completion limiting using complete command"
send_gdb "complete p mark\n"
gdb_test_multiple "" "$test" {
    -re "List may be truncated, max-completions reached.*\r\n$gdb_prompt $" {
	pass "$test"
    }
}
