gdb
[external/binutils.git] / gdb / testsuite / gdb.base / completion.exp
1 # Copyright 1998, 1999, 2002, 2003, 2004, 2007, 2008
2 # Free Software Foundation, Inc.
3
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 # Please email any bugs, comments, and/or additions to this file to:
18 # bug-gdb@prep.ai.mit.edu
19
20 # This file was written by Elena Zannoni (ezannoni@cygnus.com)
21
22 # This file is part of the gdb testsuite.
23
24 #
25 # tests for command completion
26 #
27 # Here are some useful test cases for completion.  
28 # They should be tested with both M-? and TAB.
29 #
30 #   "show output-" "radix"
31 #   "show output" "-radix"
32 #   "p" ambiguous (commands starting with p--path, print, printf, etc.)
33 #   "p "  ambiguous (all symbols)
34 #   "info t foo" no completions
35 #   "info t " no completions
36 #   "info t" ambiguous ("info target", "info terminal", etc.)
37 #   "info ajksdlfk" no completions
38 #   "info ajksdlfk " no completions
39 #   "info" " "
40 #   "info " ambiguous (all info commands)
41 #   "p \"break1" unambiguous (completes to filename "break1.c")
42 #   "p \"break1." unambiguous (should complete to "break1.c" but does not,
43 #       due to readline limitations)
44 #   "p 'arg" ambiguous (all symbols starting with arg)
45 #   "p b-arg" ambiguous (all symbols starting with arg)
46 #   "p b-" ambiguous (all symbols)
47 #   "file Make" "file" (word break hard to screw up here)
48 #   "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
49 #
50
51
52 if $tracelevel then {
53         strace $tracelevel
54         }
55
56
57 global usestubs
58
59 #
60 # test running programs
61 #
62 set prms_id 0
63 set bug_id 0
64
65 set testfile "break"
66 set srcfile ${testfile}.c
67 set srcfile1 ${testfile}1.c
68 set binfile ${objdir}/${subdir}/${testfile}
69
70 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug nowarnings}] != "" } {
71      untested completion.exp
72      return -1
73 }
74
75 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug nowarnings}] != "" } {
76      untested completion.exp
77      return -1
78 }
79
80 if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug nowarnings}] != "" } {
81      untested completion.exp
82      return -1
83 }
84
85 if [get_compiler_info ${binfile}] {
86     return -1;
87 }
88
89 gdb_exit
90
91 # Don't let a .inputrc file or an existing setting of INPUTRC mess up
92 # the test results.  Even if /dev/null doesn't exist on the particular
93 # platform, the readline library will use the default setting just by
94 # failing to open the file.  OTOH, opening /dev/null successfully will
95 # also result in the default settings being used since nothing will be
96 # read from this file.
97 global env
98 if [info exists env(INPUTRC)] {
99     set old_inputrc $env(INPUTRC)
100 }
101 set env(INPUTRC) "/dev/null"
102
103 gdb_start
104 gdb_reinitialize_dir $srcdir/$subdir
105 gdb_load ${binfile}
106
107 if ![runto_main] then {
108         perror "tests suppressed"
109 }
110
111 set oldtimeout1 $timeout
112 set timeout 30
113
114
115 send_gdb "hfgfh\t"
116 sleep 1
117 gdb_expect  {
118         -re "^hfgfh\\\x07$"\
119             { send_gdb "\n"
120               gdb_expect {
121                       -re "Undefined command: \"hfgfh\"\\.  Try \"help\"\\..*$gdb_prompt $"\
122                                         { pass "complete 'hfgfh'"}
123                       -re ".*$gdb_prompt $" { fail "complete 'hfgfh'"}
124                       timeout           {fail "(timeout) complete 'hfgfh'"}
125                      }
126             }
127         -re ".*$gdb_prompt $"       { fail "complete 'hfgfh'" }
128         timeout         { fail "(timeout) complete 'hfgfh'" }
129         }
130
131 #exp_internal 0
132
133 send_gdb "show output\t"
134 sleep 1
135 gdb_expect  {
136         -re "^show output-radix $"\
137             { send_gdb "\n"
138               gdb_expect {
139                       -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
140                                         { pass "complete 'show output'"}
141                       -re ".*$gdb_prompt $" { fail "complete 'show output'"}
142                       timeout           {fail "(timeout) complete 'show output'"}
143                      }
144             }
145         -re "^show output$"\
146             { send_gdb "\n"
147                gdb_expect {
148                       -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
149                                         { fail "complete 'show output'"}
150                       -re ".*$gdb_prompt $" { fail "complete 'show output'"}
151                       timeout           { fail "(timeout) complete 'show output'"}
152                      }
153
154              }
155
156         -re ".*$gdb_prompt $"       { fail "complete 'show output'" }
157         timeout         { fail "(timeout) complete 'show output'" }
158         }
159
160
161 send_gdb "show output-\t"
162 sleep 1
163 gdb_expect  {
164         -re "^show output-radix $"\
165             { send_gdb "\n"
166               gdb_expect {
167                       -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
168                                         { pass "complete 'show output-'"}
169                       -re ".*$gdb_prompt $" { fail "complete 'show output-'"}
170                       timeout           {fail "(timeout) complete 'show output-'"}
171                      }
172             }
173         -re "^show output-$"\
174             { send_gdb "\n"
175                gdb_expect {
176                       -re "Default output radix for printing of values is 10\\..*$gdb_prompt $"\
177                                         { fail "complete 'show output-'"}
178                       -re ".*$gdb_prompt $" { fail "complete 'show output-'"}
179                       timeout           { fail "(timeout) complete 'show output-'"}
180                      }
181
182              }
183
184         -re ".*$gdb_prompt $"       { fail "complete 'show output-'" }
185         timeout         { fail "(timeout) complete 'show output-'" }
186         }
187
188 send_gdb "p\t"
189 sleep 1
190 gdb_expect  {
191         -re "^p\\\x07$"\
192             { send_gdb "\n"
193               sleep 1
194               gdb_expect {
195                       -re "The history is empty\\..*$gdb_prompt $"\
196                                         { pass "complete 'p'"}
197                       -re ".*$gdb_prompt $" { fail "complete 'p'"}
198                       timeout           {fail "(timeout) complete 'p' 2"}
199                      }
200             }
201         -re ".*$gdb_prompt $"       { fail "complete 'p'" }
202         timeout         { fail "(timeout) complete 'p' 1" }
203         }
204
205 send_gdb "p \t"
206 sleep 3
207 gdb_expect  {
208         -re "^p \\\x07$"\
209             { send_gdb "\n"
210               sleep 1
211               gdb_expect {
212                       -re "The history is empty\\..*$gdb_prompt $"\
213                                         { pass "complete 'p '"}
214                       -re ".*$gdb_prompt $" { fail "complete 'p '"}
215                       timeout           {fail "(timeout) complete 'p ' 1"}
216                      }
217             }
218         -re ".*$gdb_prompt $"       { fail "complete 'p '" }
219         timeout         { fail "(timeout) complete 'p ' 2" }
220         }
221
222
223 send_gdb "info t foo\t"
224 sleep 1
225 gdb_expect  {
226         -re "^info t foo\\\x07$"\
227             { send_gdb "\n"
228               gdb_expect {
229                       -re "Ambiguous info command \"t foo\": target, terminal, threads, tp, tracepoints, types\\..*$gdb_prompt $"\
230                                         { pass "complete 'info t foo'"}
231                       -re ".*$gdb_prompt $" { fail "complete 'info t foo'"}
232                       timeout           {fail "(timeout) complete 'info t foo'"}
233                      }
234             }
235         -re ".*$gdb_prompt $"       { fail "complete 'info t foo'" }
236         timeout         { fail "(timeout) complete 'info t foo'" }
237         }
238
239 send_gdb "info t\t"
240 sleep 1
241 gdb_expect  {
242         -re "^info t\\\x07$"\
243             { send_gdb "\n"
244               gdb_expect {
245                       -re "Ambiguous info command \"t\": target, terminal, threads, tp, tracepoints, types\\..
246 *$gdb_prompt $"\
247                                         { pass "complete 'info t'"}
248                       -re ".*$gdb_prompt $" { fail "complete 'info t'"}
249                       timeout           {fail "(timeout) complete 'info t'"}
250                      }
251             }
252         -re ".*$gdb_prompt $"       { fail "complete 'info t'" }
253         timeout         { fail "(timeout) complete 'info t'" }
254         }
255
256
257 send_gdb "info t \t"
258 sleep 1
259 gdb_expect  {
260         -re "^info t \\\x07$"\
261             { send_gdb "\n"
262               gdb_expect {
263                       -re "Ambiguous info command \"t \": target, terminal, threads, tp, tracepoints, types\\..
264 *$gdb_prompt $"\
265                                         { pass "complete 'info t '"}
266                       -re ".*$gdb_prompt $" { fail "complete 'info t '"}
267                       timeout           {fail "(timeout) complete 'info t '"}
268                      }
269             }
270         -re ".*$gdb_prompt $"       { fail "complete 'info t '" }
271         timeout         { fail "(timeout) complete 'info t '" }
272         }
273
274
275 send_gdb "info asdfgh\t"
276 sleep 1
277 gdb_expect  {
278         -re "^info asdfgh\\\x07$"\
279             { send_gdb "\n"
280               gdb_expect {
281                       -re "Undefined info command: \"asdfgh\".  Try \"help info\"\\..
282 *$gdb_prompt $"\
283                                         { pass "complete 'info asdfgh'"}
284                       -re ".*$gdb_prompt $" { fail "complete 'info asdfgh'"}
285                       timeout           {fail "(timeout) complete 'info asdfgh'"}
286                      }
287             }
288         -re ".*$gdb_prompt $"       { fail "complete 'info asdfgh'" }
289         timeout         { fail "(timeout) complete 'info asdfgh'" }
290         }
291
292
293 send_gdb "info asdfgh \t"
294 sleep 1
295 gdb_expect  {
296         -re "^info asdfgh \\\x07$"\
297             { send_gdb "\n"
298               gdb_expect {
299                       -re "Undefined info command: \"asdfgh \".  Try \"help info\"\\..
300 *$gdb_prompt $"\
301                                         { pass "complete 'info asdfgh '"}
302                       -re ".*$gdb_prompt $" { fail "complete 'info asdfgh '"}
303                       timeout           {fail "(timeout) complete 'info asdfgh '"}
304                      }
305             }
306         -re ".*$gdb_prompt $"       { fail "complete 'info asdfgh '" }
307         timeout         { fail "(timeout) complete 'info asdfgh '" }
308         }
309
310 send_gdb "info\t"
311 sleep 1
312 gdb_expect  {
313         -re "^info $"\
314             { send_gdb "\n"
315               gdb_expect {
316                       -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands.*$gdb_prompt $"\
317                                         { pass "complete 'info'"}
318                       -re ".*$gdb_prompt $" { fail "complete 'info'"}
319                       timeout           {fail "(timeout) complete 'info'"}
320                      }
321             }
322         -re ".*$gdb_prompt $"       { fail "complete 'info'" }
323         timeout         { fail "(timeout) complete 'info'" }
324         }
325
326 send_gdb "info \t"
327 sleep 1
328 gdb_expect  {
329         -re "^info \\\x07$"\
330             { send_gdb "\n"
331               gdb_expect {
332                       -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*$gdb_prompt $"\
333                                         { pass "complete 'info '"}
334                       -re ".*$gdb_prompt $" { fail "complete 'info '"}
335                       timeout           {fail "(timeout) complete 'info '"}
336                      }
337             }
338         -re ".*$gdb_prompt $"       { fail "complete 'info '" }
339         timeout         { fail "(timeout) complete 'info '" }
340         }
341
342
343 send_gdb "info \t"
344 sleep 1
345 gdb_expect  {
346         -re "^info \\\x07$"\
347             { send_gdb "\t"
348               gdb_expect {
349                       -re "address.*types.*$gdb_prompt info $"\
350                           { send_gdb "\n"
351                             gdb_expect {
352                                      -re "\"info\".*unambiguous\\..*$gdb_prompt $"\
353                                         { pass "complete (2) 'info '"}
354                                      -re ".*$gdb_prompt $" { fail "complete (2) 'info '"}
355                                      timeout           {fail "(timeout) complete (2) 'info '"}
356                                     }
357                            }
358                       -re ".*$gdb_prompt $" { fail "complete (2) 'info '"}
359                       timeout           {fail "(timeout) complete (2) 'info '"}
360                      }
361             }
362         -re ".*$gdb_prompt $"       { fail "complete (2) 'info '" }
363         timeout         { fail "(timeout) complete (2) 'info '" }
364         }
365
366
367 send_gdb "help info wat\t"
368 gdb_expect  {
369         -re "^help info watchpoints $"\
370             { send_gdb "\n"
371               gdb_expect {
372                       -re "Synonym for .*\r\n.*$gdb_prompt $"\
373                           { pass "complete help info wat" }
374                       -re ".*$gdb_prompt $" { fail "complete help info wat"}
375                       timeout   {fail "(timeout) complete help info wat"}
376                      }
377             }
378         -re "^help info wat\\\x07$" { fail "complete (2) help info wat" }
379         -re ".*$gdb_prompt $" { fail "complete (3) help info wat" }
380         timeout         { fail "(timeout) complete (3) help info wat" }
381         }
382
383
384 send_gdb "p \"break1\t"
385 sleep 1
386 gdb_expect  {
387         -re "^p \"break1\\\x07$"\
388             { send_gdb "\n"
389               gdb_expect {
390                       -re ".*$gdb_prompt $" { fail "complete 'p \"break1'"}
391                       timeout           {fail "(timeout) complete 'p \"break1'"}
392                      }
393             }
394         -re "^p \"break1\\.c\"$"\
395             {   send_gdb "\n"
396                 gdb_expect {
397                     -re ".*$gdb_prompt $" { pass "complete 'p \"break1'"}
398                     timeout           {fail "(timeout) complete 'p \"break1'"}
399                 }
400             }
401         -re "^p \"break1.*$"
402             {   send_gdb "\n"
403                 gdb_expect {
404                     -re ".*$gdb_prompt $" { fail "complete 'p \"break1'"}
405                     timeout           {fail "(timeout) complete 'p \"break1'"}
406                 }
407             }
408         -re ".*$gdb_prompt $"       { fail "complete 'p \"break1'" }
409         timeout         { fail "(timeout) complete 'p \"break1'" }
410         }
411
412 setup_xfail "*-*-*"
413 send_gdb "p \"break1.\t"
414 sleep 1
415 gdb_expect  {
416         -re "^p \"break1\\.\\\x07$"\
417             { send_gdb "\n"
418               gdb_expect {
419                       -re ".*$gdb_prompt $" { fail "complete 'p \"break1.'"}
420                       timeout           {fail "(timeout) complete 'p \"break1.'"}
421                      }
422             }
423         -re "^p \"break1\\.c\"$"\
424             {   send_gdb "\n"
425                 gdb_expect {
426                     -re ".*$gdb_prompt $" { pass "complete 'p \"break1.'"}
427                     timeout           {fail "(timeout) complete 'p \"break1.'"}
428                 }
429             }
430         -re "^p \"break1\\..*$"
431             {   send_gdb "\n"
432                 gdb_expect {
433                     -re ".*$gdb_prompt $" { fail "complete 'p \"break1.'"}
434                     timeout           {fail "(timeout) complete 'p \"break1.'"}
435                 }
436             }
437         -re ".*$gdb_prompt $"       { fail "complete 'p \"break1.'" }
438         timeout         { fail "(timeout) complete 'p \"break1.'" }
439         }
440
441 send_gdb "p 'arg\t"
442 sleep 1
443 gdb_expect  {
444         -re "^p 'arg\\\x07$"\
445             { send_gdb "\n"
446               gdb_expect {
447                       -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $"\
448                                         { pass "complete 'p \'arg'"}
449                       -re ".*$gdb_prompt $" { fail "complete 'p \'arg'"}
450                       timeout           {fail "(timeout) complete 'p \'arg'"}
451                      }
452             }
453         -re ".*$gdb_prompt $"       { fail "complete 'p \'arg'" }
454         timeout         { fail "(timeout) complete 'p \'arg'" }
455         }
456
457 send_gdb "p 'arg\t"
458 sleep 1
459 gdb_expect {
460     -re "^p 'arg\\\x07$" {
461         send_gdb "\t"
462         gdb_expect {
463             -re ".*argv.*$gdb_prompt p 'arg$" {
464                 send_gdb "\n"
465                 gdb_expect {
466                     -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $" {
467                         pass "complete (2) 'p \'arg'"
468                     }
469                     -re ".*$gdb_prompt $" { fail "complete (2) 'p \'arg'" }
470                     timeout { fail "(timeout) complete (2) 'p \'arg'" }
471                 }
472             }
473             -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
474                 send_gdb "n"
475                 gdb_expect {
476                     -re "\\(gdb\\) p 'arg$" {
477                         send_gdb "\n"
478                         gdb_expect {
479                             -re "(Invalid character constant\\.|Unmatched single quote\\.).*$gdb_prompt $" {
480                                 pass "complete (2) 'p \'arg'"
481                             }
482                             -re ".*$gdb_prompt $" { 
483                                 fail "complete (2) 'p \'arg'"
484                             }
485                             timeout { fail "(timeout) complete (2) 'p \'arg'" }
486                         }
487                     }
488                     -re ".*$gdb_prompt $" { fail "complete (2) 'p \'arg'" }
489                     timeout { fail "(timeout) complete (2) 'p \'arg'" }
490                 }
491             }
492             -re ".*$gdb_prompt $" { fail "complete (2) 'p \'arg'" }
493             timeout { fail "(timeout) complete (2) 'p \'arg'" }
494         }
495     }
496     -re ".*$gdb_prompt $" { fail "complete (2) 'p \'arg'" }
497     timeout { fail "(timeout) complete (2) 'p \'arg'" }
498 }
499
500
501 # These tests used to try completing the shorter "p b-a".
502 # Unfortunately, on some systems, there are .o files in system
503 # libraries which declare static variables named `b'.  Of course,
504 # those variables aren't really in scope, as far as the compiler is
505 # concerned.  But GDB deliberately tries to be more liberal: if you
506 # enter an identifier that doesn't have any binding in scope, GDB will
507 # search all the program's compilation units for a static variable of
508 # the given name.
509 #
510 # This behavior can help avoid a lot of pedantry, so it's usually a
511 # good thing.  But in this test case, it causes GDB to print the value
512 # of some random variable, instead of giving us the "No symbol..."
513 # error we were expecting.
514 #
515 # For example, on S/390 linux, the file s_atan.c in libm.a declares a
516 # `b', which is a structure containing an int and a float, so GDB says
517 # ``Argument to arithmetic operation not a number or boolean'' instead
518 # of ``No symbol ...''.
519 #
520 # So, I'm hoping that there is no system with a static library variable named
521 # `no_var_by_this_name'.
522 send_gdb "p no_var_named_this-arg\t"
523 sleep 1
524 gdb_expect {
525     -re "^p no_var_named_this-arg\\\x07$" {
526         send_gdb "\n"
527         gdb_expect {
528             -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
529                 pass "complete 'p no_var_named_this-arg'"
530             }
531             -re ".*$gdb_prompt $" {
532                 fail "complete 'p no_var_named_this-arg'"
533             }
534             timeout {
535                 fail "(timeout) complete 'p no_var_named_this-arg'"
536             }
537         }
538     }
539     -re ".*$gdb_prompt $" {
540         fail "complete 'p no_var_named_this-arg'"
541     }
542     timeout {
543         fail "(timeout) complete 'p no_var_named_this-arg'"
544     }
545 }
546
547 send_gdb "p no_var_named_this-arg\t"
548 sleep 1
549 gdb_expect {
550     -re "^p no_var_named_this-arg\\\x07$" {
551         send_gdb "\t"
552         gdb_expect {
553             -re ".*argv.*$gdb_prompt p no_var_named_this-arg$" {
554                 send_gdb "\n"
555                 gdb_expect {
556                     -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
557                         pass "complete (2) 'p no_var_named_this-arg'"
558                     }
559                     -re ".*$gdb_prompt $" {
560                         fail "complete (2) 'p no_var_named_this-arg'"
561                     }
562                     timeout {
563                         fail "(timeout) complete (2) 'p no_var_named_this-arg'"
564                     }
565                 }
566             }
567             -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
568                 send_gdb "n"
569                 gdb_expect {
570                     -re "\\(gdb\\) p no_var_named_this-arg$" {
571                         send_gdb "\n"
572                         gdb_expect {
573                             -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
574                                 pass "complete (2) 'p no_var_named_this-arg'"
575                             }
576                             -re ".*$gdb_prompt $" {
577                                 fail "complete (2) 'p no_var_named_this-arg'"
578                             }
579                             timeout {
580                                 fail "(timeout) complete (2) 'p no_var_named_this-arg'"
581                             }
582                         }
583                     }
584                     -re ".*$gdb_prompt $" {
585                         fail "complete (2) 'p no_var_named_this-arg'"
586                     }
587                     timeout {
588                         fail "(timeout) complete (2) 'p no_var_named_this-arg'"
589                     }
590                 }
591             }
592             -re ".*$gdb_prompt $" {
593                 fail "complete (2) 'p no_var_named_this-arg'"
594             }
595             timeout { fail "(timeout) complete (2) 'p no_var_named_this-arg'" }
596         }
597     }
598     -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-arg'" }
599     timeout { fail "(timeout) complete (2) 'p no_var_named_this-arg'" }
600 }
601
602 send_gdb "p no_var_named_this-\t"
603 sleep 1
604 gdb_expect  {
605     -re "^p no_var_named_this-\\\x07$" {
606         send_gdb "\t"
607         gdb_expect {
608             -re "(There are $decimal possibilities\\.  Do you really\r\nwish to see them all.|Display all $decimal possibilities.) \\(y or n\\)$" {
609                 send_gdb "n"
610                 gdb_expect {
611                     -re "\\(gdb\\) p no_var_named_this-$" {
612                         send_gdb "\n"
613                         gdb_expect {
614                             -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
615                                 pass "complete (2) 'p no_var_named_this-'"
616                             }
617                             -re ".*$gdb_prompt $" {
618                                 fail "complete (2) 'p no_var_named_this-'"
619                             }
620                             timeout {
621                                 fail "(timeout) complete (2) 'p no_var_named_this-'"
622                             }
623                         }
624                     }
625                     -re ".*$gdb_prompt $" {
626                         fail "complete (2) 'p no_var_named_this-'"
627                     }
628                     timeout {
629                         fail "(timeout) complete (2) 'p no_var_named_this-'"
630                     }
631                 }
632             }
633             -re ".*argv.*$gdb_prompt p no_var_named_this-$" {
634                 send_gdb "\n"
635                 gdb_expect {
636                     -re "No symbol \"no_var_named_this\" in current context\\..*$gdb_prompt $" {
637                         pass "complete (2) 'p no_var_named_this-'"
638                     }
639                     -re ".*$gdb_prompt $" {
640                         fail "complete (2) 'p no_var_named_this-'"
641                     }
642                     timeout {
643                         fail "(timeout) complete (2) 'p no_var_named_this-'"
644                     }
645                 }
646             }
647             -re ".*$gdb_prompt $" {
648                 fail "complete (2) 'p no_var_named_this-'"
649             }
650             timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }
651         }
652     }
653     -re ".*$gdb_prompt $" { fail "complete (2) 'p no_var_named_this-'" }
654     timeout { fail "(timeout) complete (2) 'p no_var_named_this-'" }
655 }
656
657 send_gdb "p values\[0\].a\t"
658 sleep 3
659 gdb_expect  {
660         -re "^p values.0..a_field $"\
661             { send_gdb "\n"
662               sleep 1
663               gdb_expect {
664                       -re "^.* = 0.*$gdb_prompt $"\
665                                         { pass "complete 'p values\[0\].a'"}
666                       -re ".*$gdb_prompt $" { fail "complete 'p values\[0\].a'"}
667                       timeout           {fail "(timeout) complete 'p values\[0\].a'"}
668                      }
669             }
670         -re ".*$gdb_prompt $"       { fail "complete 'p values\[0\].a'" }
671         timeout         { fail "(timeout) complete 'p values\[0\].a' 2" }
672         }
673
674 send_gdb "p values\[0\] . a\t"
675 gdb_expect  {
676         -re "^p values.0. . a_field $"\
677             { send_gdb "\n"
678               gdb_expect {
679                       -re "^.* = 0.*$gdb_prompt $"\
680                                         { pass "complete 'p values\[0\] . a'"}
681                       -re ".*$gdb_prompt $" { fail "complete 'p values\[0\] . a'"}
682                       timeout           {fail "(timeout) complete 'p values\[0\] . a'"}
683                      }
684             }
685         -re ".*$gdb_prompt $"       { fail "complete 'p values\[0\] . a'" }
686         timeout         { fail "(timeout) complete 'p values\[0\] . a' 2" }
687         }
688
689 send_gdb "p &values\[0\] -> a\t"
690 gdb_expect  {
691         -re "^p &values.0. -> a_field $"\
692             { send_gdb "\n"
693               gdb_expect {
694                       -re "^.* = .*0x\[0-9a-fA-F\]*.*$gdb_prompt $"\
695                                         { pass "complete 'p &values\[0\] -> a'"}
696                       -re ".*$gdb_prompt $" { fail "complete 'p &values\[0\] -> a'"}
697                       timeout           {fail "(timeout) complete 'p &values\[0\] -> a'"}
698                      }
699             }
700         -re ".*$gdb_prompt $"       { fail "complete 'p &values\[0\] -> a'" }
701         timeout         { fail "(timeout) complete 'p &values\[0\] -> a' 2" }
702         }
703
704 # The following tests used to simply try to complete `${objdir}/file',
705 # and so on.  The problem is that ${objdir} can be very long; the
706 # completed filename may be more than eighty characters wide.  When
707 # this happens, readline tries to manage things, producing output that
708 # may make sense on the screen, but is rather hard for our script to
709 # recognize.
710 #
711 # In the case that motivated this change, the (gdb) prompt occupied
712 # the leftmost six columns, and `${objdir}/' was seventy-four
713 # characters long --- eighty in all.  After printing the slash,
714 # readline emitted a space, a carriage return, and then `Makefile'
715 # (the tab character being received as input after `Make'.
716 #
717 # Basically, you have to let readline do whatever it's going to do to
718 # make the screen look right.  If it happens to use a different
719 # strategy on Tuesdays to get the cursor in the right place, that's
720 # not something the testsuite should care about.
721 #
722 # So, we avoid long lines.  We `cd' to ${objdir} first, and then do
723 # the completion relative to the current directory.
724
725 # ${srcdir} may be a relative path.  We want to make sure we end up
726 # in the right directory - so make sure we know where it is.
727 set mydir [pwd]
728 cd ${srcdir}
729 set fullsrcdir [pwd]
730 cd ${mydir}
731
732 # If the directory name contains a '+' we must escape it, adding a backslash.
733 # If not, the test below will fail because it will interpret the '+' as a 
734 # regexp operator. We use string_to_regexp for this purpose.
735
736 gdb_test "cd ${fullsrcdir}" \
737          "Working directory [string_to_regexp ${fullsrcdir}].*" \
738          "cd to \${srcdir}"
739
740 send_gdb "complete file ./gdb.base/compl\n"
741 sleep 1
742 gdb_expect  {
743     -re "file ./gdb.base/completion\\.exp.*$gdb_prompt $"
744         { pass "complete-command 'file ./gdb.base/compl'"}
745     -re ".*$gdb_prompt $"       { fail "complete-command 'file ./gdb.base/compl'" }
746     timeout         { fail "(timeout) complete-command 'file ./gdb.base/compl'" }
747 }
748
749 send_gdb "file ./gdb.base/complet\t"
750 sleep 1
751 gdb_expect  {
752         -re "^file ./gdb.base/completion\\.exp $"\
753             { send_gdb "\n"
754               # Ignore the exact error message.
755               gdb_test_multiple "" "complete 'file ./gdb.base/complet'" {
756                   -re "\r\nA program is being debugged already\\.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\) $" {
757                       send_gdb "n\n"
758                       exp_continue
759                   }
760                   -re ".*$gdb_prompt $" { pass "complete 'file ./gdb.base/complet'" }
761               }
762             }
763         -re ".*$gdb_prompt $"       { fail "complete 'file ./gdb.base/complet'" }
764         timeout         { fail "(timeout) complete 'file ./gdb.base/complet'" }
765         }
766
767 send_gdb "info func marke\t"
768 sleep 1
769 gdb_expect  {
770         -re "^info func marke.*r$"\
771             {
772               send_gdb "\t\t"
773               sleep 3
774               gdb_expect {
775                       -re "marker1.*$gdb_prompt info func marker$"\
776                       { send_gdb "\n"
777                         gdb_expect {
778                                 -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 $"\
779                                                   { pass "complete 'info func marke'"}
780                                 -re ".*$gdb_prompt $" { fail "complete 'info func marke'"}
781                                 timeout           {fail "(timeout) complete 'info func marke'"}
782                                }
783                       }
784                       -re ".*$gdb_prompt $" { fail "complete 'info func marke'"}
785                       timeout           {fail "(timeout) complete 'info func marke'"}
786                      }
787             }
788         -re ".*$gdb_prompt $"       { fail "complete 'info func marke'" }
789         timeout         { fail "(timeout) complete 'info func marke'" }
790         }
791
792
793 send_gdb "set follow-fork-mode \t\t"
794 sleep 1
795 gdb_expect  {
796         -re "child.*parent.*$gdb_prompt set follow-fork-mode $"\
797             { send_gdb "\n"
798               gdb_expect {
799                       -re "Requires an argument.*child.*parent.*$gdb_prompt $"\
800                                         { pass "complete 'set follow-fork-mode'"}
801                       -re "Ambiguous item \"\"\\..*$gdb_prompt $"\
802                                         { pass "complete 'set follow-fork-mode'"}
803                       -re ".*$gdb_prompt $" { fail "complete 'set follow-fork-mode'"}
804                       timeout           {fail "(timeout) complete 'set follow-fork-mode'"}
805                      }
806             }
807         -re ".*$gdb_prompt $"       { fail "complete 'set follow-fork-mode'" }
808         timeout         { fail "(timeout) complete 'set follow-fork-mode'" }
809         }
810
811 # Restore globals modified in this test...
812 if [info exists old_inputrc] {
813     set env(INPUTRC) $old_inputrc
814 } else {
815     unset env(INPUTRC)
816 }
817 set timeout $oldtimeout1
818
819 return 0