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