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

# 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.*$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.*$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.

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