cpcompletion.exp revision 1.7
1# Copyright 2009-2017 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# This file is part of the gdb testsuite. 17 18# A helper procedure to test location completions restricted by 19# class. 20proc test_class_complete {class expr name matches} { 21 global gdb_prompt 22 23 set matches [lsort $matches] 24 set cmd "complete break ${class}::$expr" 25 set seen {} 26 gdb_test_multiple $cmd $name { 27 "break ${class}::main" { fail "$name (saw global symbol)" } 28 $cmd { exp_continue } 29 -re "break ${class}::\[A-Za-z0-9_~\]+" { 30 set str $expect_out(0,string) 31 scan $str "break ${class}::%\[^(\]" method 32 lappend seen $method 33 exp_continue 34 } 35 -re "$gdb_prompt $" { 36 set failed "" 37 foreach got [lsort $seen] have $matches { 38 if {![string equal $got $have]} { 39 set failed $have 40 break 41 } 42 } 43 if {[string length $failed] != 0} { 44 fail "$name ($failed not found)" 45 } else { 46 pass $name 47 } 48 } 49 } 50} 51 52if { [skip_cplus_tests] } { continue } 53 54standard_testfile pr9594.cc 55 56if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { 57 return -1 58} 59 60# Test that completion is restricted by class name (all methods) 61test_class_complete Foo "" "complete class methods" \ 62 [list Foo Foofoo get_foo set_foo ~Foo] 63 64test_class_complete Foo F "complete class methods beginning with F" \ 65 [list Foo Foofoo] 66 67# The tests below depend on the current code scope. 68 69set bp_location [gdb_get_line_number "Set breakpoint here" ${srcfile}] 70 71if {![runto "${srcfile}:$bp_location"]} { 72 perror "test suppressed" 73 return 74} 75 76# This also tests inheritance -- completion should only see a single 77# "get_foo". 78gdb_test "complete p foo1.g" "p foo1\\.get_foo" 79 80# Test inheritance without overriding. 81gdb_test "complete p foo1.base" "p foo1\\.base_function_only" 82 83# Test non-completion of constructor names. 84gdb_test "complete p foo1.Fo" "p foo1\\.Foofoo" 85 86# Test completion with an anonymous struct. 87gdb_test "complete p a.g" "p a\\.get" 88