# Copyright 1998, 1999, 2002, 2003, 2004, 2007, 2008, 2009, 2010
# 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)
#


if $tracelevel then {
        strace $tracelevel
        }


global usestubs

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


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, tasks, terminal, threads, tp, tracepoints, tvariables, 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, tasks, terminal, threads, tp, tracepoints, tvariables, 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, tasks, terminal, threads, tp, tracepoints, tvariables, 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 "help info wat\t"
gdb_expect  {
        -re "^help info watchpoints $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "Status of watchpoints, .*\r\n.*$gdb_prompt $"\
                          { pass "complete help info wat" }
                      -re ".*$gdb_prompt $" { fail "complete help info wat"}
                      timeout   {fail "(timeout) complete help info wat"}
                     }
            }
	-re "^help info wat\\\x07$" { fail "complete (2) help info wat" }
        -re ".*$gdb_prompt $" { fail "complete (3) help info wat" }
        timeout         { fail "(timeout) complete (3) help info wat" }
        }


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

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


# 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-arg\t"
sleep 1
gdb_expect {
    -re "^p no_var_named_this-arg\\\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-arg'"
            }
            -re ".*$gdb_prompt $" {
                fail "complete 'p no_var_named_this-arg'"
            }
            timeout {
                fail "(timeout) complete 'p no_var_named_this-arg'"
            }
        }
    }
    -re ".*$gdb_prompt $" {
        fail "complete 'p no_var_named_this-arg'"
    }
    timeout {
        fail "(timeout) complete 'p no_var_named_this-arg'"
    }
}

send_gdb "p no_var_named_this-arg\t"
sleep 1
gdb_expect {
    -re "^p no_var_named_this-arg\\\x07$" {
	send_gdb "\t"
	gdb_expect {
	    -re ".*argv.*$gdb_prompt p no_var_named_this-arg$" {
		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-arg'"
		    }
		    -re ".*$gdb_prompt $" {
                        fail "complete (2) 'p no_var_named_this-arg'"
                    }
		    timeout {
                        fail "(timeout) complete (2) 'p no_var_named_this-arg'"
                    }
		}
	    }
	    -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-arg$" {
			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-arg'"
			    }
			    -re ".*$gdb_prompt $" {
				fail "complete (2) 'p no_var_named_this-arg'"
			    }
			    timeout {
                                fail "(timeout) complete (2) 'p no_var_named_this-arg'"
                            }
			}
		    }
		    -re ".*$gdb_prompt $" {
                        fail "complete (2) 'p no_var_named_this-arg'"
                    }
		    timeout {
                        fail "(timeout) complete (2) 'p no_var_named_this-arg'"
                    }
		}
	    }
	    -re ".*$gdb_prompt $" {
                fail "complete (2) 'p no_var_named_this-arg'"
            }
	    timeout { fail "(timeout) complete (2) 'p no_var_named_this-arg'" }
        }
    }
    -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-arg'" }
    timeout { fail "(timeout) complete (2) 'p no_var_named_this-arg'" }
}

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 ".*argv.*$gdb_prompt 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-'" }
}

send_gdb "p values\[0\].a\t"
sleep 3
gdb_expect  {
        -re "^p values.0..a_field $"\
            { send_gdb "\n"
	      sleep 1
              gdb_expect {
                      -re "^.* = 0.*$gdb_prompt $"\
                                        { pass "complete 'p values\[0\].a'"}
                      -re ".*$gdb_prompt $" { fail "complete 'p values\[0\].a'"}
                      timeout           {fail "(timeout) complete 'p values\[0\].a'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'p values\[0\].a'" }
        timeout         { fail "(timeout) complete 'p values\[0\].a' 2" }
        }

send_gdb "p values\[0\] . a\t"
gdb_expect  {
        -re "^p values.0. . a_field $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "^.* = 0.*$gdb_prompt $"\
                                        { pass "complete 'p values\[0\] . a'"}
                      -re ".*$gdb_prompt $" { fail "complete 'p values\[0\] . a'"}
                      timeout           {fail "(timeout) complete 'p values\[0\] . a'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'p values\[0\] . a'" }
        timeout         { fail "(timeout) complete 'p values\[0\] . a' 2" }
        }

send_gdb "p &values\[0\] -> a\t"
gdb_expect  {
        -re "^p &values.0. -> a_field $"\
            { send_gdb "\n"
              gdb_expect {
                      -re "^.* = .*0x\[0-9a-fA-F\]*.*$gdb_prompt $"\
                                        { pass "complete 'p &values\[0\] -> a'"}
                      -re ".*$gdb_prompt $" { fail "complete 'p &values\[0\] -> a'"}
                      timeout           {fail "(timeout) complete 'p &values\[0\] -> a'"}
                     }
            }
        -re ".*$gdb_prompt $"       { fail "complete 'p &values\[0\] -> a'" }
        timeout         { fail "(timeout) complete 'p &values\[0\] -> a' 2" }
        }

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


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'" }
        }

send_gdb "p values\[0\].nonex.\t"
gdb_expect  {
        -re "Type struct some_struct has no component named nonex.\r\n$gdb_prompt $"\
            { pass "Completing non-existing component" }
        -re ".*$gdb_prompt $"       { fail "Completing non-existing component" }
        timeout         { fail "(timeout) Completing non-existing component" }
        eof             { fail "(eof) Completing non-existing component #2" }
        }
# Double memory freeing gets found only on the second run:
send_gdb "p values\[0\].nonex.\t"
gdb_expect  {
        -re "Type struct some_struct has no component named nonex.\r\n$gdb_prompt $"\
            { pass "Completing non-existing component #2" }
        -re ".*$gdb_prompt $"       { fail "Completing non-existing component #2" }
        timeout         { fail "(timeout) Completing non-existing component #2" }
        eof             { fail "(eof) Completing non-existing component #2" }
        }

# 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
