# Copyright 1998-1999, 2002-2004, 2007-2012 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 ${binfile}] {
    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, 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, 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, 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"
			    }
			}
		    }
		}
	    }
	}
    }
}


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

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


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

return 0
