* gdb.cp/cpcompletion.exp (test_class_complete): New procedure.
authorKeith Seitz <keiths@redhat.com>
Mon, 24 Aug 2009 22:01:30 +0000 (22:01 +0000)
committerKeith Seitz <keiths@redhat.com>
Mon, 24 Aug 2009 22:01:30 +0000 (22:01 +0000)
Add two new C++ completer tests which limit the output to a
given class.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/cpcompletion.exp

index 4a7454a..7f2c839 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-24  Keith Seitz  <keiths@redhat.com>
+
+       * gdb.cp/cpcompletion.exp (test_class_complete): New procedure.
+       Add two new C++ completer tests which limit the output to a
+       given class. 
+
 2009-08-24  Michael Snyder  <msnyder@vmware.com>
 
        * gdb.base/del.exp: Fix typo in comment.
index bccf051..5aaae03 100644 (file)
 
 # This file is part of the gdb testsuite.
 
+# A helper procedure to test location completions restricted by
+# class.
+proc test_class_complete {class expr name matches} {
+    global gdb_prompt
+
+    set matches [lsort $matches]
+    set cmd "complete break ${class}::$expr"
+    set seen {}
+    gdb_test_multiple $cmd $name {
+       "break ${class}::main" { fail "$name (saw global symbol)" }
+       $cmd { exp_continue }
+       -re "break ${class}::\[A-Za-z0-9_~\]+" {
+           set str $expect_out(0,string)
+           scan $str "break ${class}::%\[^(\]" method
+           lappend seen $method
+           exp_continue
+       }
+       -re "$gdb_prompt $" {
+           set failed ""
+           foreach got [lsort $seen] have $matches {
+               if {![string equal $got $have]} {
+                   set failed $have
+                   break
+               }
+           }
+           if {[string length $failed] != 0} {
+               fail "$name ($failed not found)"
+           } else {
+               pass $name
+           }
+       }
+    }
+}
+
 if $tracelevel then {
        strace $tracelevel
 }
@@ -58,3 +92,11 @@ gdb_test "complete p foo1.Fo" "p foo1\\.Foofoo"
 
 # Test completion with an anonymous struct.
 gdb_test "complete p a.g" "p a\\.get"
+
+# Test that completion is restricted by class name (all methods)
+test_class_complete Foo "" "complete class methods" \
+    [list Foo Foofoo get_foo set_foo ~Foo]
+
+test_class_complete Foo F "complete class methods beginning with F" \
+    [list Foo Foofoo]
+