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

# Test that completion of commands 'target FOO' works well.

foreach target_name { "core" "tfile" "exec" } {
    gdb_test "complete target ${target_name} ./gdb.base/completion" \
	"target ${target_name} ./gdb.base/completion\\.exp.*"
}

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

return 0
