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

gdb_test "complete p &values\[0\]->z" \
    "p &values.0.->z_field" \
    "copmletion of field in anonymous union"

# The following tests used to simply try to complete `${objdir}/file',
# and so on.  The problem is that ${objdir} can be very long; the
# completed filename may be more than eighty characters wide.  When
# this happens, readline tries to manage things, producing output that
# may make sense on the screen, but is rather hard for our script to
# recognize.
#
# In the case that motivated this change, the (gdb) prompt occupied
# the leftmost six columns, and `${objdir}/' was seventy-four
# characters long --- eighty in all.  After printing the slash,
# readline emitted a space, a carriage return, and then `Makefile'
# (the tab character being received as input after `Make'.
#
# Basically, you have to let readline do whatever it's going to do to
# make the screen look right.  If it happens to use a different
# strategy on Tuesdays to get the cursor in the right place, that's
# not something the testsuite should care about.
#
# So, we avoid long lines.  We `cd' to ${objdir} first, and then do
# the completion relative to the current directory.

# ${srcdir} may be a relative path.  We want to make sure we end up
# in the right directory - so make sure we know where it is.
set mydir [pwd]
cd ${srcdir}
set fullsrcdir [pwd]
cd ${mydir}

# If the directory name contains a '+' we must escape it, adding a backslash.
# If not, the test below will fail because it will interpret the '+' as a 
# regexp operator. We use string_to_regexp for this purpose.

gdb_test "cd ${fullsrcdir}" \
         "Working directory [string_to_regexp ${fullsrcdir}].*" \
         "cd to \${srcdir}"


# GDB used to fail adding / on directories, on the first try only.
set uniquedir ../testsuite/gdb.base/comp-dir
set escapeduniquedir [string_to_regexp ${uniquedir}]
set uniquesu subdi
set uniquesub ${uniquesu}r
set escapeuniquesub [string_to_regexp ${uniquesub}]
send_gdb "dir ${uniquedir}\t"
gdb_expect {
	-re "${escapeduniquedir}/" {
	    pass "directory completion"
	    send_gdb "${uniquesu}\t"
	}
	-re "${escapeduniquedir} $" {
	    fail "directory completion (old gdb bug)"
	    send_gdb "\b/${uniquesu}\t"
	}
	default {
	    fail "directory completion (timeout)"
	    send_gdb "\ndir ${uniquedir}/${uniquesu}\t"
	}
}

gdb_expect {
	-re "${escapeuniquesub}/$" {
	    pass "directory completion 2"
	}
	timeout {
	    fail "directory completion 2"
	}
}

# Empty COMMAND sends no newline while " " sends the newline we need.
gdb_test " " "Source directories searched: .*" "Glob remaining of directory test"


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

gdb_test_no_output "complete print values\[0\].x." \
    "field completion with invalid field"

# If there is a non-deprecated completion, it should be returned.
gdb_test "complete sav" "save" "test non-deprecated completion"
# If there is only a deprecated completion, then it should be returned.
gdb_test "complete save-t" "save-tracepoints" "test deprecated completion"


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

return 0
