Comprehensive C++ linespec/completer tests
authorPedro Alves <palves@redhat.com>
Fri, 24 Nov 2017 23:41:12 +0000 (23:41 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 24 Nov 2017 23:41:12 +0000 (23:41 +0000)
commit8955eb2da31d78690c762748fab3a16832ef1f81
treee03fa77940af9eba7e83e8111eb960c599a8d017
parent0662b6a7c1b3b04a4ca31a09af703c91c7aa9646
Comprehensive C++ linespec/completer tests

Exercises all sorts of aspects fixed by previous patches, going back a
few months.

 - Exercises label completion, linespecs and explicit locations.

 - Exercises both quoting vs non-quoting, source filenames, function
   names, labels, with both linespecs and explicit locations.

 - Tests corner cases around not-quoting function names, and
   whitespace and/and completing inside a parameter or template
   argument list, anonymous namespace awareness, etc.

   E.g.,

     "break foo<[TAB]"          -> "break foo<int>()"
     "break bar ( int[TAB]"     -> "break bar ( int)
     "break ( anon"             -> "break ( anonymous namespace)::func()"
     "b cfunc() [tab]"          -> "b cfunc() const"
     "b rettype templfunc[tab]" -> "b rettype templfunc<bar>()"

   ... and others.

 - Tests the "b source.c[TAB] -> b source.cc:" feature.  I.e., colon
   auto-appending.

 - Exercises corner cases around C++ "operator<" / "operator<<".
   (Much more extensive C++ operator completion/linespec handling in a
   separate patch.)

 - Exercises both tab completion and "complete" command completion,
   using routines that handle it automatically, to ensure no test
   forgets either mode.

 - Many of the completion tests test completion at at prefix of a
   given tricky name, to make sure all corner cases are covered.
   E.g., completing before, at and after ":", "(", "<".

 - Exercises "keyword" completion.  I.e., "b function() [TAB]"
   displaying "if task thread" as completion match list.  Likewise for
   display explicit location options matches at the appropriate
   points.

 - Ensures that the completer finds the same breakpoint locations that
   setting a breakpoint finds.

 - Tests that linespec/location completion doesn't find data symbols.

 - Tests that expression completion still kicks in after a
   linespec/location keyword.  I.e., this:

     "b function () if global1 + global[TAB]"

   knows that after "if", you're completing on an expression, and thus
   breaks words after "if" as an expression and matches on "global" as
   a data symbol.

 - Adds common routines to help with all the above, to be used by
   multiple completion and linespec/location test cases.

 - More...

Grows the gdb.linespec/ tests like this:

  -# of expected passes           573
  +# of expected passes           3464

gdb/testsuite/ChangeLog:
2017-11-24  Pedro Alves  <palves@redhat.com>

* gdb.linespec/cpcompletion.exp: New file.
* gdb.linespec/cpls-hyphen.cc: New file.
* gdb.linespec/cpls.cc: New file.
* gdb.linespec/cpls2.cc: New file.
* gdb.linespec/explicit.exp: Load completion-support.exp.  Adjust
test to use test_gdb_complete_unique.  Add label completion,
keyword completion and explicit location completion tests.
* lib/completion-support.exp: New file.
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.linespec/cpcompletion.exp [new file with mode: 0644]
gdb/testsuite/gdb.linespec/cpls-hyphen.cc [new file with mode: 0644]
gdb/testsuite/gdb.linespec/cpls.cc [new file with mode: 0644]
gdb/testsuite/gdb.linespec/cpls2.cc [new file with mode: 0644]
gdb/testsuite/gdb.linespec/explicit.exp
gdb/testsuite/lib/completion-support.exp [new file with mode: 0644]