# Copyright 1998, 1999, 2002, 2003, 2004 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# 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 'a" ambiguous (all symbols starting with a)
#   "p b-a" ambiguous (all symbols starting with a)
#   "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)
#


if $tracelevel then {
        strace $tracelevel
        }


global usestubs

#
# test running programs
#
set prms_id 0
set bug_id 0

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 additional_flags=-w}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug additional_flags=-w}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug additional_flags=-w}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

if [get_compiler_info ${binfile}] {
    return -1;
}

gdb_exit

# Don't let a .inputrc file or an existing setting of INPUTRC mess up
# the test results.  Even if /dev/null doesn't exist on the particular
# platform, the readline library will use the default setting just by
# failing to open the file.  OTOH, opening /dev/null successfully will
# also result in the default settings being used since nothing will be
# read from this file.
global env
if [info exists env(INPUTRC)] {
    set old_inputrc $env(INPUTRC)
}
set env(INPUTRC) "/dev/null"

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

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

set oldtimeout1 $timeout
set timeout 30


send_gdb "hfgfh\t"
sleep 1
gdb_expect  {
        -re "^hfgfh\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Undefined command: \"hfgfh\"\\.  Try \"help\"\\..*$gdb_prompt $"\
                                        { pass "complete 'hfgfh'"}
                      -re ".*$gdb_prompt $" { fail "complete 'hfgfh'"}
                      timeout           {fail "(timeout) complete 'hfgfh'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'hfgfh'" }
        timeout         { fail "(timeout) complete 'hfgfh'" }
        }

#exp_internal 0

send_gdb "show output\t"
sleep 1
gdb_expect  {
        -re "^show output-radix $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
                                        { pass "complete 'show output'"}
                      -re ".*$gdb_prompt $" { fail "complete 'show output'"}
                      timeout           {fail "(timeout) complete 'show output'"}
                     }
            }
        -re "^show output$"\
            { send_gdb "\n"
               gdb_expect {
                      -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
                                        { fail "complete 'show output'"}
                      -re ".*$gdb_prompt $" { fail "complete 'show output'"}
                      timeout           { fail "(timeout) complete 'show output'"}
                     }

             }

        -re ".*$gdb_prompt $"       { fail "complete 'show output'" }
        timeout         { fail "(timeout) complete 'show output'" }
        }


send_gdb "show output-\t"
sleep 1
gdb_expect  {
        -re "^show output-radix $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
                                        { pass "complete 'show output-'"}
                      -re ".*$gdb_prompt $" { fail "complete 'show output-'"}
                      timeout           {fail "(timeout) complete 'show output-'"}
                     }
            }
        -re "^show output-$"\
            { send_gdb "\n"
               gdb_expect {
                      -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
                                        { fail "complete 'show output-'"}
                      -re ".*$gdb_prompt $" { fail "complete 'show output-'"}
                      timeout           { fail "(timeout) complete 'show output-'"}
                     }

             }

        -re ".*$gdb_prompt $"       { fail "complete 'show output-'" }
        timeout         { fail "(timeout) complete 'show output-'" }
        }

send_gdb "p\t"
sleep 1
gdb_expect  {
        -re "^p\\\x07$"\
            { send_gdb "\n"
	      sleep 1
              gdb_expect {
                      -re "The history is empty\\..*$gdb_prompt $"\
                                        { pass "complete 'p'"}
                      -re ".*$gdb_prompt $" { fail "complete 'p'"}
                      timeout           {fail "(timeout) complete 'p' 2"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'p'" }
        timeout         { fail "(timeout) complete 'p' 1" }
        }

send_gdb "p \t"
sleep 3
gdb_expect  {
        -re "^p \\\x07$"\
            { send_gdb "\n"
	      sleep 1
              gdb_expect {
                      -re "The history is empty\\..*$gdb_prompt $"\
                                        { pass "complete 'p '"}
                      -re ".*$gdb_prompt $" { fail "complete 'p '"}
                      timeout           {fail "(timeout) complete 'p ' 1"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'p '" }
        timeout         { fail "(timeout) complete 'p ' 2" }
        }


# APPLE LOCAL
# our completions include additional cmds - 'task', 'thread', 'trampoline'
#
send_gdb "info t foo\t"
sleep 1
gdb_expect  {
        -re "^info t foo\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Ambiguous info command \"t foo\": target, task, terminal, thread, threads, tp, tracepoints, trampoline, types\\..*$gdb_prompt $"\
                                        { pass "complete 'info t foo'"}
                      -re ".*$gdb_prompt $" { fail "complete 'info t foo'"}
                      timeout           {fail "(timeout) complete 'info t foo'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info t foo'" }
        timeout         { fail "(timeout) complete 'info t foo'" }
        }

# APPLE LOCAL
# our completions include additional cmds - 'task', 'thread', 'trampoline'
#
send_gdb "info t\t"
sleep 1
gdb_expect  {
        -re "^info t\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Ambiguous info command \"t\": target, task, terminal, thread, threads, tp, tracepoints, trampoline, types\\..
*$gdb_prompt $"\
                                        { pass "complete 'info t'"}
                      -re ".*$gdb_prompt $" { fail "complete 'info t'"}
                      timeout           {fail "(timeout) complete 'info t'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info t'" }
        timeout         { fail "(timeout) complete 'info t'" }
        }

# APPLE LOCAL
# our completions include additional cmds - 'task', 'thread', 'trampoline'
#
send_gdb "info t \t"
sleep 1
gdb_expect  {
        -re "^info t \\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Ambiguous info command \"t \": target, task, terminal, thread, threads, tp, tracepoints, trampoline, types\\..
*$gdb_prompt $"\
                                        { pass "complete 'info t '"}
                      -re ".*$gdb_prompt $" { fail "complete 'info t '"}
                      timeout           {fail "(timeout) complete 'info t '"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info t '" }
        timeout         { fail "(timeout) complete 'info t '" }
        }


send_gdb "info asdfgh\t"
sleep 1
gdb_expect  {
        -re "^info asdfgh\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Undefined info command: \"asdfgh\".  Try \"help info\"\\..
*$gdb_prompt $"\
                                        { pass "complete 'info asdfgh'"}
                      -re ".*$gdb_prompt $" { fail "complete 'info asdfgh'"}
                      timeout           {fail "(timeout) complete 'info asdfgh'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info asdfgh'" }
        timeout         { fail "(timeout) complete 'info asdfgh'" }
        }


send_gdb "info asdfgh \t"
sleep 1
gdb_expect  {
        -re "^info asdfgh \\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Undefined info command: \"asdfgh \".  Try \"help info\"\\..
*$gdb_prompt $"\
                                        { pass "complete 'info asdfgh '"}
                      -re ".*$gdb_prompt $" { fail "complete 'info asdfgh '"}
                      timeout           {fail "(timeout) complete 'info asdfgh '"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info asdfgh '" }
        timeout         { fail "(timeout) complete 'info asdfgh '" }
        }

send_gdb "info\t"
sleep 1
gdb_expect  {
        -re "^info $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*info address.*info watchpoints.*\r\n\r\nType \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
                                        { pass "complete 'info'"}
                      -re ".*$gdb_prompt $" { fail "complete 'info'"}
                      timeout           {fail "(timeout) complete 'info'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info'" }
        timeout         { fail "(timeout) complete 'info'" }
        }

send_gdb "info \t"
sleep 1
gdb_expect  {
        -re "^info \\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*info address.*Type \"help info\" followed by info subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous\\..*$gdb_prompt $"\
                                        { pass "complete 'info '"}
                      -re ".*$gdb_prompt $" { fail "complete 'info '"}
                      timeout           {fail "(timeout) complete 'info '"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info '" }
        timeout         { fail "(timeout) complete 'info '" }
        }


send_gdb "info \t"
sleep 1
gdb_expect  {
        -re "^info \\\x07$"\
            { send_gdb "\t"
              gdb_expect {
                      -re "address.*types.*$gdb_prompt info $"\
                          { send_gdb "\n"
                            gdb_expect {
                                     -re "\"info\".*unambiguous\\..*$gdb_prompt $"\
                                        { pass "complete (2) 'info '"}
                                     -re ".*$gdb_prompt $" { fail "complete (2) 'info '"}
                                     timeout           {fail "(timeout) complete (2) 'info '"}
                                    }
                           }
                      -re ".*$gdb_prompt $" { fail "complete (2) 'info '"}
                      timeout           {fail "(timeout) complete (2) 'info '"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete (2) 'info '" }
        timeout         { fail "(timeout) complete (2) 'info '" }
        }


send_gdb "p \"break1\t"
sleep 1
gdb_expect  {
        -re "^p \"break1\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re ".*$gdb_prompt $" { fail "complete 'p \"break1'"}
                      timeout           {fail "(timeout) complete 'p \"break1'"}
                     }
            }
	-re "^p \"break1\\.c\"$"\
	    {	send_gdb "\n"
		gdb_expect {
		    -re ".*$gdb_prompt $" { pass "complete 'p \"break1'"}
		    timeout           {fail "(timeout) complete 'p \"break1'"}
		}
	    }
	-re "^p \"break1.*$"
	    {	send_gdb "\n"
		gdb_expect {
		    -re ".*$gdb_prompt $" { fail "complete 'p \"break1'"}
		    timeout           {fail "(timeout) complete 'p \"break1'"}
		}
	    }
        -re ".*$gdb_prompt $"       { fail "complete 'p \"break1'" }
        timeout         { fail "(timeout) complete 'p \"break1'" }
        }

setup_xfail "*-*-*"
send_gdb "p \"break1.\t"
sleep 1
gdb_expect  {
        -re "^p \"break1\\.\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re ".*$gdb_prompt $" { fail "complete 'p \"break1.'"}
                      timeout           {fail "(timeout) complete 'p \"break1.'"}
                     }
            }
	-re "^p \"break1\\.c\"$"\
	    {	send_gdb "\n"
		gdb_expect {
		    -re ".*$gdb_prompt $" { pass "complete 'p \"break1.'"}
		    timeout           {fail "(timeout) complete 'p \"break1.'"}
		}
	    }
	-re "^p \"break1\\..*$"
	    {	send_gdb "\n"
		gdb_expect {
		    -re ".*$gdb_prompt $" { fail "complete 'p \"break1.'"}
		    timeout           {fail "(timeout) complete 'p \"break1.'"}
		}
	    }
        -re ".*$gdb_prompt $"       { fail "complete 'p \"break1.'" }
        timeout         { fail "(timeout) complete 'p \"break1.'" }
        }

send_gdb "p 'a\t"
sleep 1
gdb_expect  {
        -re "^p 'a\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $"\
                                        { pass "complete 'p \'a'"}
                      -re ".*$gdb_prompt $" { fail "complete 'p \'a'"}
                      timeout           {fail "(timeout) complete 'p \'a'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'p \'a'" }
        timeout         { fail "(timeout) complete 'p \'a'" }
        }

send_gdb "p 'a\t"
sleep 1
gdb_expect {
    -re "^p 'a\\\x07$" {
	send_gdb "\t"
	gdb_expect {
	    -re ".*argv.*$gdb_prompt p .a$" {
		send_gdb "\n"
		gdb_expect {
		    -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $" {
			pass "complete (2) 'p \'a'"
		    }
		    -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
		    timeout { fail "(timeout) complete (2) 'p \'a'" }
		}
	    }
	    -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_expect {
		    -re "\\(gdb\\) p 'a$" {
			send_gdb "\n"
			gdb_expect {
			    -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $" {
				pass "complete (2) 'p \'a'"
			    }
			    -re ".*$gdb_prompt $" { 
				fail "complete (2) 'p \'a'"
			    }
			    timeout { fail "(timeout) complete (2) 'p \'a'" }
			}
		    }
		    -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
		    timeout { fail "(timeout) complete (2) 'p \'a'" }
		}
	    }
	    -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
	    timeout { fail "(timeout) complete (2) 'p \'a'" }
	}
    }
    -re ".*$gdb_prompt $" { fail "complete (2) 'p \'a'" }
    timeout { fail "(timeout) complete (2) 'p \'a'" }
}


# 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'.
send_gdb "p no_var_named_this-a\t"
sleep 1
gdb_expect {
    -re "^p no_var_named_this-a\\\x07$" {
        send_gdb "\n"
        gdb_expect {
            -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
                pass "complete 'p no_var_named_this-a'"
            }
            -re ".*$gdb_prompt $" {
                fail "complete 'p no_var_named_this-a'"
            }
            timeout {
                fail "(timeout) complete 'p no_var_named_this-a'"
            }
        }
    }
    -re ".*$gdb_prompt $" {
        fail "complete 'p no_var_named_this-a'"
    }
    timeout {
        fail "(timeout) complete 'p no_var_named_this-a'"
    }
}

send_gdb "p no_var_named_this-a\t"
sleep 1
gdb_expect {
    -re "^p no_var_named_this-a\\\x07$" {
	send_gdb "\t"
	gdb_expect {
	    -re ".*argv.*$gdb_prompt p no_var_named_this-a$" {
		send_gdb "\n"
		gdb_expect {
		    -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
			pass "complete (2) 'p no_var_named_this-a'"
		    }
		    -re ".*$gdb_prompt $" {
                        fail "complete (2) 'p no_var_named_this-a'"
                    }
		    timeout {
                        fail "(timeout) complete (2) 'p no_var_named_this-a'"
                    }
		}
	    }
	    -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_expect {
		    -re "\\(gdb\\) p no_var_named_this-a$" {
			send_gdb "\n"
			gdb_expect {
			    -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
				pass "complete (2) 'p no_var_named_this-a'"
			    }
			    -re ".*$gdb_prompt $" {
				fail "complete (2) 'p no_var_named_this-a'"
			    }
			    timeout {
                                fail "(timeout) complete (2) 'p no_var_named_this-a'"
                            }
			}
		    }
		    -re ".*$gdb_prompt $" {
                        fail "complete (2) 'p no_var_named_this-a'"
                    }
		    timeout {
                        fail "(timeout) complete (2) 'p no_var_named_this-a'"
                    }
		}
	    }
	    -re ".*$gdb_prompt $" {
                fail "complete (2) 'p no_var_named_this-a'"
            }
	    timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" }
        }
    }
    -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-a'" }
    timeout { fail "(timeout) complete (2) 'p no_var_named_this-a'" }
}

send_gdb "p no_var_named_this-\t"
sleep 1
gdb_expect  {
    -re "^p no_var_named_this-\\\x07$" {
	send_gdb "\t"
	gdb_expect {
	    -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_expect {
		    -re "\\(gdb\\) p no_var_named_this-$" {
			send_gdb "\n"
			gdb_expect {
			    -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
				pass "complete (2) 'p no_var_named_this-'"
			    }
			    -re ".*$gdb_prompt $" {
				fail "complete (2) 'p no_var_named_this-'"
			    }
			    timeout {
                                fail "(timeout) complete (2) 'p no_var_named_this-'"
                            }
			}
		    }
		    -re ".*$gdb_prompt $" {
                        fail "complete (2) 'p no_var_named_this-'"
                    }
		    timeout {
                        fail "(timeout) complete (2) 'p no_var_named_this-'"
                    }
		}
	    }
	    -re ".*$gdb_prompt $" {
                fail "complete (2) 'p no_var_named_this-'"
            }
	    timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }
	}
    }
    -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-'" }
    timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }
}


# 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.
#
# Note that if we are building in the source tree, then there will be
# more than one completion for ./Make, so we need to handle that also.
# A better long term solution might be to create a temporary directory,
# populate it with a set of known names, and use that directory to
# test completions.

gdb_test "cd ${objdir}" "Working directory ${objdir}.*" "cd to \${objdir}"

send_gdb "file ./Make\t"
sleep 1
gdb_expect  {
        -re "^file ./Make(\\\x07|)file.*$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "\r\nA program is being debugged already\\.  Kill it\\? \\(y or n\\) $"\
                      { send_gdb "n\n"
                        gdb_expect {
                                -re "\r\nProgram not killed\\.\r\n$gdb_prompt $"\
                                        { pass "complete 'file ./Make'"}
                                -re ".*$gdb_prompt $" { fail "complete 'file ./Make'"}
                                timeout           {fail "(timeout) complete 'file ./Make'"}
                               }
                      }
                      -re ".*$gdb_prompt $" { fail "complete 'file ./Make'"}
                      timeout           {fail "(timeout) complete 'file ./Make'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'file ./Make'" }
        timeout         { fail "(timeout) complete 'file ./Make'" }
        }


# ${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}"

send_gdb "complete file ./gdb.base/compl\n"
sleep 1
gdb_expect  {
    -re "file ./gdb.base/completion\\.exp.*$gdb_prompt $"
	{ pass "complete-command 'file ./gdb.base/compl'"}
    -re ".*$gdb_prompt $"       { fail "complete-command 'file ./gdb.base/compl'" }
    timeout         { fail "(timeout) complete-command 'file ./gdb.base/compl'" }
}

send_gdb "file ./gdb.base/complet\t"
sleep 1
gdb_expect  {
        -re "^file ./gdb.base/completion\\.exp $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "\r\nA program is being debugged already\\.  Kill it\\? \\(y or n\\) $"
                      { send_gdb "n\n"
                        gdb_expect {
                                -re "\r\nProgram not killed\\.\r\n$gdb_prompt $"\
                                        { pass "complete 'file ./gdb.base/complet'"}
                                -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/complet'"}
                                timeout           {fail "(timeout) complete 'file ./gdb.base/complet'"}
                               }
                      }
                      -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/complet'"}
                      timeout           {fail "(timeout) complete 'file ./gdb.base/complet'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'file ./gdb.base/complet'" }
        timeout         { fail "(timeout) complete 'file ./gdb.base/complet'" }
        }

send_gdb "info func marke\t"
sleep 1
gdb_expect  {
        -re "^info func marke.*r$"\
            {
	      send_gdb "\t\t"
              sleep 3
              gdb_expect {
                      -re "marker1.*$gdb_prompt info func marker$"\
                      { send_gdb "\n"
                        gdb_expect {
                                -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 "complete 'info func marke'"}
                                -re ".*$gdb_prompt $" { fail "complete 'info func marke'"}
                                timeout           {fail "(timeout) complete 'info func marke'"}
                               }
                      }
                      -re ".*$gdb_prompt $" { fail "complete 'info func marke'"}
                      timeout           {fail "(timeout) complete 'info func marke'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'info func marke'" }
        timeout         { fail "(timeout) complete 'info func marke'" }
        }


send_gdb "set follow-fork-mode \t\t"
sleep 1
gdb_expect  {
        -re "child.*parent.*$gdb_prompt set follow-fork-mode $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Requires an argument.*child.*parent.*$gdb_prompt $"\
                                        { pass "complete 'set follow-fork-mode'"}
                      -re "Ambiguous item \"\"\\..*$gdb_prompt $"\
                                        { pass "complete 'set follow-fork-mode'"}
                      -re ".*$gdb_prompt $" { fail "complete 'set follow-fork-mode'"}
                      timeout           {fail "(timeout) complete 'set follow-fork-mode'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'set follow-fork-mode'" }
        timeout         { fail "(timeout) complete 'set follow-fork-mode'" }
        }

# Restore globals modified in this test...
if [info exists old_inputrc] {
    set env(INPUTRC) $old_inputrc
} else {
    unset env(INPUTRC)
}
set timeout $oldtimeout1

return 0
