public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Bruno Larsen <blarsen@redhat.com>
To: Tom de Vries <tdevries@suse.de>, gdb-patches@sourceware.org
Subject: Re: [PATCH] gdb/testsuite: Improve testing of GDB's completion functions
Date: Tue, 25 Jul 2023 17:40:23 +0200	[thread overview]
Message-ID: <b5b4a33a-5fd3-eeb1-9774-629122b8a626@redhat.com> (raw)
In-Reply-To: <b7a33389-eb3e-f0e6-2a1a-ab73cf7265ad@suse.de>

On 15/07/2023 14:13, Tom de Vries wrote:
> On 2/22/23 10:11, Bruno Larsen via Gdb-patches wrote:
>> When looking at some failures of gdb.linespec/cp-completion-aliases.exp,
>> I noticed that when a completion test will fail, it always fails with a
>> timeout.  This is because most completion tests use gdb_test_multiple
>> and only add a check for the correct output.  This commit adds new
>> options for both, tab and command completion.
>>
>> For command completion, the new option will check if the prompt was
>> printed, and fail in this case. This is enough to know that the test has
>> failed because the check comes after the PASS path. For tab completion,
>> we have to check if GDB outputted more than just the input line, because
>> sometimes GDB would have printed a partial line before finishing with
>> the correct completion.
>
> This causes quite a few regressions with check-read1.
>
> For instance:
> ...
> (gdb) break baz(int, FAIL: gdb.cp/cpcompletion.exp: tab complete 
> "break baz(int"
> double) Quit^M
> (gdb)
> ...
Hi! Sorry for taking so long to respond. I'd appreciate some help in 
solving, if you have the time.
>
> Thanks,
> - Tom
>
>> ---
>>   gdb/testsuite/lib/completion-support.exp | 16 ++++++++++++++++
>>   1 file changed, 16 insertions(+)
>>
>> diff --git a/gdb/testsuite/lib/completion-support.exp 
>> b/gdb/testsuite/lib/completion-support.exp
>> index bf9c5ad352c..275f8874f15 100644
>> --- a/gdb/testsuite/lib/completion-support.exp
>> +++ b/gdb/testsuite/lib/completion-support.exp
>> @@ -94,6 +94,9 @@ proc test_gdb_complete_tab_none { line } {
>>       -re "^$line_re$completion::bell_re$" {
>>           pass "$test"
>>       }
>> +    -re "$line_re\[^ \]+ $" {
>> +        fail "$test"
>> +    }
>>       }
>>         clear_input_line $test
>> @@ -108,11 +111,15 @@ proc test_gdb_complete_tab_unique { input_line 
>> complete_line_re append_char_re }
>>         set test "tab complete \"$input_line\""
>>       send_gdb "$input_line\t"
>> +    set partial_complete [string_to_regexp $input_line]
>>       set res 1
>>       gdb_test_multiple "" "$test" {
>>       -re "^$complete_line_re$append_char_re$" {
>>           pass "$test"
>>       }
>> +    -re "$partial_complete\[^ \]+ $" {
>> +        fail "$test"
>> +    }

This is the specific change that causes the failures. The thinking 
behind it was that if we receive more characters, but not the whole 
complete_line, we got a failure. Something like this could detect if we 
have a unique - but wrong - suggestion or multiple options. This way it 
doesn't have to go to timeout every time, because it was making clang 
testing take too long.

Is there any other way to detect if GDB is done with the suggestion? Or 
can we detect that read1 is being used, so this gets special cased?

-- 
Cheers,
Bruno

>>       timeout {
>>           fail "$test (timeout)"
>>           set res -1
>> @@ -164,6 +171,9 @@ proc test_gdb_complete_tab_multiple { input_line 
>> add_completed_line \
>>               }
>>               }
>>           }
>> +        -re "${maybe_bell}\r\n.+\r\n$gdb_prompt $" {
>> +            fail "$test"
>> +        }
>>           }
>>       }
>>       }
>> @@ -191,6 +201,9 @@ proc test_gdb_complete_cmd_unique { input_line 
>> complete_line_re } {
>>       -re "^$cmd_re\r\n$complete_line_re\r\n$gdb_prompt $" {
>>           pass $test
>>       }
>> +    -re "$gdb_prompt $" {
>> +        fail "$test"
>> +    }
>>       }
>>   }
>>   @@ -217,6 +230,9 @@ proc test_gdb_complete_cmd_multiple { 
>> cmd_prefix completion_word completion_list
>>       -re "^$cmd_re\r\n$expected_re$gdb_prompt $" {
>>           pass $test
>>       }
>> +    -re "$gdb_prompt $" {
>> +        fail "$test"
>> +    }
>>       }
>>   }
>


  reply	other threads:[~2023-07-25 15:40 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-22  9:11 Bruno Larsen
2023-02-24 19:06 ` Tom Tromey
2023-02-27 10:03   ` Bruno Larsen
2023-07-15 12:13 ` Tom de Vries
2023-07-25 15:40   ` Bruno Larsen [this message]
2023-08-15  5:45     ` Tom de Vries
2023-08-15  7:05       ` Guinevere Larsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b5b4a33a-5fd3-eeb1-9774-629122b8a626@redhat.com \
    --to=blarsen@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tdevries@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).