From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id A73863858CDB for ; Tue, 24 Oct 2023 15:58:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A73863858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A73863858CDB Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698163100; cv=none; b=vHQBYzAe+uBT7UI3YeqY+SOueaDqt+xjg8wMR0MT1f6YY/x6W/FF5DsdoUGqg5CIbMv7zt4fAuBzZLPDF6vHHlcCZ4nN4X4HrG7wY+A18us9JwW4HQQGCRecmuJu8boOZNeunHFc/6bgV1IhMzFaP6KhlqQW/TjKvtCrCQ0bbhw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698163100; c=relaxed/simple; bh=VcCrZ71rWZY/Bk7APLjbjeqHc57heugG9E+u9yq6rPo=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=Ie3CTiRqjJb1dZo6L2HcJhDUs5nY7l+R/9Vl8RjFsndg/X7wWd+0B9Hc8+GZc+zaRM4ecuiU20ErvkMZ2NHTDgnTA3O0RtH9wU6NSCaOQgqLhJeTdW074BjezYaQNhRQAWohrKgbFK6hl+h3ofZfXUn8Bd9GcYcz9VUEviMcwjA= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1698163098; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AyFsvidBhvt/ASVxHII2Xa07oxZAHX8Xa9iNfj6DPPg=; b=N0Iv6Aaskvpzu4Y7FMm1xV3xaw9R7WjcowIKO7T7vA3zBUhNGIXRUlHGgZm6Cgzsf+kvKC ygEgWK5KaehNOHoXmyWnFN7Ea9S0+mMZQLz1UW1Vg6Y+P+LNlaePjD0hHWS+pGONBFa51D kzTyngR6yUW2Lk0NwhlLNtrSj2j/kh8= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-311-3OIMG-CFOF-01wrGJgkeQw-1; Tue, 24 Oct 2023 11:58:16 -0400 X-MC-Unique: 3OIMG-CFOF-01wrGJgkeQw-1 Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-9c75b999aaaso290290266b.2 for ; Tue, 24 Oct 2023 08:58:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698163095; x=1698767895; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AyFsvidBhvt/ASVxHII2Xa07oxZAHX8Xa9iNfj6DPPg=; b=Mms7gMTy4YNaTe0cHNhyetUt/PXxOlrGYfk92tj+4iB9cUCI794vs3xTtsbMyPBKl0 HJ1h3NXsXRCx72D+8qNz4Nk77rGGBDyGW4bwvDAYqojv2IpemXbkRxM5FUEz2cWZog+G 1lUAdr6mA9PTqg0nKK3fYcv5OMhP7Cc0hzrEMlXsv1J4vZOHJ+fZT+qsjqBMC+4jryi9 Hvgg+fRqpJtwAIGmHewsULmLGlwE+/QDksMnjMfvHFmBz+1mU39iIzeMYHKSTX12S0ks GdelaG8n/E5E6gXa7cBk1f40aUGI7O/8nHCXO21MqZNKO0juTGNR1zwoe7LsIXrYyvut QaIg== X-Gm-Message-State: AOJu0YyF/BJhDLdLO9ujWFvMZY5T/eSyfuqyzaXuPuZ+ta2fBkZ5O6Lg hjkRh26L52zqS9LV6HDZ/oxXrDS2vLVtylnGbz5LdAJ4Vd36KDmnAoCduDKfjwwqzqPL9vb5DYN Jlbele9Xz87Ev5Nxus12k6HdML+C9RS8elm1NBs8H1Vq+6TvPerVtmS7rCzTo5ufNUwjU1u1HKM xBzTYl X-Received: by 2002:a17:906:4fc4:b0:9c7:5a01:ffea with SMTP id i4-20020a1709064fc400b009c75a01ffeamr11467854ejw.30.1698163095231; Tue, 24 Oct 2023 08:58:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFai3rHduV1C2pOXKhvTCEpx8Yklm9ygWdT7mmZLdJUaieHWny/urbBuf6NDGrOXJ8p3fTuvg== X-Received: by 2002:a17:906:4fc4:b0:9c7:5a01:ffea with SMTP id i4-20020a1709064fc400b009c75a01ffeamr11467838ejw.30.1698163094784; Tue, 24 Oct 2023 08:58:14 -0700 (PDT) Received: from [192.168.0.129] (ip-94-112-227-180.bb.vodafone.cz. [94.112.227.180]) by smtp.gmail.com with ESMTPSA id ss17-20020a170907039100b009ad875d12d7sm8554442ejb.210.2023.10.24.08.58.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 24 Oct 2023 08:58:14 -0700 (PDT) Message-ID: Date: Tue, 24 Oct 2023 17:58:13 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: [Pingv3] [PATCH v3] gdb/testsuite: fix completion tests when using READ1 To: Gdb-patches , Guinevere Larsen References: <20230828113026.76323-1-blarsen@redhat.com> From: Guinevere Larsen In-Reply-To: <20230828113026.76323-1-blarsen@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_NUMSUBJECT,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Ping! -- Cheers, Guinevere Larsen She/Her/Hers On 28/08/2023 13:30, Guinevere Larsen wrote: > The commit a3da2e7e550c4fe79128b5e532dbb90df4d4f418 has introduced > regressions when testing using the READ1 mechanism. The reason for that > is the new failure path in proc test_gdb_complete_tab_unique, which > looks for GDB suggesting more than what the test inputted, but not the > correct answer, followed by a white space. Consider the following case: > > int foo(int bar, int baz); > > Sending the command "break foo" to GDB will return > > break foo(int, int) > > which easily fits the buffer in normal testing, so everything works, but > when reading one character at a time, the test will find the partial > "break foo(int, " and assume that there was a mistake, so we get a > spurious FAIL. > > That change was added because we wanted to avoid forcing a completion > failure to fail through timeout, which it had to do because there is no > way to verify that the output is done, mostly because when I was trying > to solve a different problem I kept getting reading errors and testing > completion was frustrating. > > This commit implements a better way to avoid that frustration, by first > testing gdb's complete command and only if that passes we will test tab > completion. The difference is that when testing with the complete > command, we can tell when the output is over when we receive the GDB > prompt again, so we don't need to rely on timeouts. With this, the > change to test_gdb_complete_tab_unique has been removed as that test > will only be run and fail in the very unlikely scenario that tab > completion is different than command completion. > --- > gdb/testsuite/lib/completion-support.exp | 31 +++++++++++++++--------- > 1 file changed, 20 insertions(+), 11 deletions(-) > > diff --git a/gdb/testsuite/lib/completion-support.exp b/gdb/testsuite/lib/completion-support.exp > index fdc512838c3..56c0eee8e1d 100644 > --- a/gdb/testsuite/lib/completion-support.exp > +++ b/gdb/testsuite/lib/completion-support.exp > @@ -111,15 +111,11 @@ 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" > - } > timeout { > fail "$test (timeout)" > set res -1 > @@ -194,17 +190,21 @@ proc test_gdb_complete_cmd_none { line } { > proc test_gdb_complete_cmd_unique { input_line complete_line_re } { > global gdb_prompt > > + set res 0 > set cmd "complete $input_line" > set cmd_re [string_to_regexp $cmd] > set test "cmd complete \"$input_line\"" > gdb_test_multiple $cmd $test { > -re "^$cmd_re\r\n$complete_line_re\r\n$gdb_prompt $" { > pass $test > + set res 1 > } > -re "$gdb_prompt $" { > fail "$test" > + set res -1 > } > } > + return $res > } > > # Test that completing "CMD_PREFIX + COMPLETION_WORD" with the > @@ -263,12 +263,6 @@ proc test_gdb_complete_none { input_line } { > > proc test_gdb_complete_unique_re { input_line complete_line_re {append_char " "} {max_completions 0}} { > set append_char_re [string_to_regexp $append_char] > - if { [readline_is_used] } { > - if { [test_gdb_complete_tab_unique $input_line $complete_line_re \ > - $append_char_re] == -1 } { > - return -1 > - } > - } > > # Trim COMPLETE LINE, for the case we're completing a command with leading > # whitespace. Leading command whitespace is discarded by GDB. > @@ -288,7 +282,22 @@ proc test_gdb_complete_unique_re { input_line complete_line_re {append_char " "} > "\r\n$input_line_re $max_completion_reached_msg_re" > } > > - test_gdb_complete_cmd_unique $input_line $expected_output_re > + # First test completion with the command, then with tab. > + # It is done in this order because cmd_complete knows when the output > + # from GDB is over, so it can fail without requiring a timeout, which > + # speeds up testing if necessary. > + > + if { [test_gdb_complete_cmd_unique $input_line\ > + $expected_output_re] == -1 } { > + return -1 > + } > + > + if { [readline_is_used] } { > + if { [test_gdb_complete_tab_unique $input_line $complete_line_re \ > + $append_char_re] == -1 } { > + return -1 > + } > + } > return 1 > } >