# Copyright 1998-2013 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
#

set testfile "break"
set srcfile ${testfile}.c
set srcfile1 ${testfile}1.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug nowarnings}] != "" } {
     untested completion.exp
     return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug nowarnings}] != "" } {
     untested completion.exp
     return -1
}

if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug nowarnings}] != "" } {
     untested completion.exp
     return -1
}

if [get_compiler_info] {
    return -1;
}

gdb_exit

gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

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

set oldtimeout1 $timeout
set timeout 30

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 ${objdir} 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/complet'"
send_gdb "file ./gdb.base/complet\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/complet'" {
	    -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:\r\nint marker1\\((void|)\\);\r\nint 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"
	    }
	}
    }
}

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"

# Restore globals modified in this test...
set timeout $oldtimeout1

return 0
