# Copyright 1998, 1999, 2002, 2003 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 \"break" unambiguous (completes to filename "break.c")
#   "p \"break." unambiguous (should complete to "break.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 binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${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" }
        }


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, terminal, threads, tp, tracepoints, 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'" }
        }

send_gdb "info t\t"
sleep 1
gdb_expect  {
        -re "^info t\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Ambiguous info command \"t\": target, terminal, threads, tp, tracepoints, 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 t \t"
sleep 1
gdb_expect  {
        -re "^info t \\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Ambiguous info command \"t \": target, terminal, threads, tp, tracepoints, 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 \"break\t"
sleep 1
gdb_expect  {
        -re "^p \"break\\\x07$"\
            { send_gdb "\n"
              gdb_expect {
                      -re ".*$gdb_prompt $" { fail "complete 'p \"break'"}
                      timeout           {fail "(timeout) complete 'p \"break'"}
                     }
            }
	-re "^p \"break\\.c\"$"\
	    {	send_gdb "\n"
		gdb_expect {
		    -re ".*$gdb_prompt $" { pass "complete 'p \"break'"}
		    timeout           {fail "(timeout) complete 'p \"break'"}
		}
	    }
	-re "^p \"break.*$"
	    {	send_gdb "\n"
		gdb_expect {
		    -re ".*$gdb_prompt $" { fail "complete 'p \"break'"}
		    timeout           {fail "(timeout) complete 'p \"break'"}
		}
	    }
        -re ".*$gdb_prompt $"       { fail "complete 'p \"break'" }
        timeout         { fail "(timeout) complete 'p \"break'" }
        }

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

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}/Make',
# 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 `${objdump}/' 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 "file ./gdb.base/compl\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/compl'"}
                                -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'"}
                                timeout           {fail "(timeout) complete 'file ./gdb.base/compl'"}
                               }
                      }
                      -re ".*$gdb_prompt $" { fail "complete 'file ./gdb.base/compl'"}
                      timeout           {fail "(timeout) complete 'file ./gdb.base/compl'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'file ./gdb.base/compl'" }
        timeout         { fail "(timeout) complete 'file ./gdb.base/compl'" }
        }

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.*break.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 "ask.*child.*parent.*$gdb_prompt set follow-fork-mode $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Requires an argument.*ask.*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
