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