From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id 83D243858CDA for ; Tue, 13 Jun 2023 10:24:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 83D243858CDA Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id BADED219EF for ; Tue, 13 Jun 2023 10:24:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1686651854; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T7R6rbvxlHZ+HYznL8mB1e6v4bOOE375247kNRGYTbw=; b=hM1HaAIXWVZpttP5QZrf9AiHUQeYjbeap5Jg0xn35/mrzVhXZXytR17gHL+0Ka5se5TG46 b1ytPCSss5Sro0fLEthaudm9oLPpnNq53WCIe+5OTouihZBNMg5y6p4dTgOu6uzFmZ9SoN ermXA0tyJo5DPB6Cae8OMbadCOLdcgY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1686651854; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T7R6rbvxlHZ+HYznL8mB1e6v4bOOE375247kNRGYTbw=; b=aeXlDv9Kd4X30VI8yZf5Lyb5rRbOJy8375mWpL4TzH5D6tjQ+8XL7psdyeYgjCaFP5RPYi S1ak/V5u34129/CA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id A934213345 for ; Tue, 13 Jun 2023 10:24:14 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id CBo9KM5DiGQncQAAMHmgww (envelope-from ) for ; Tue, 13 Jun 2023 10:24:14 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [pushed 2/2] [gdb/testsuite] Fix and add prompt anchoring in tuiterm Date: Tue, 13 Jun 2023 12:24:33 +0200 Message-Id: <20230613102433.13601-2-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230613102433.13601-1-tdevries@suse.de> References: <20230613102433.13601-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: There is a test-case that contains a unit test for tuiterm: gdb.tui/tuiterm.exp. However, this only excercises the tuiterm itself, and not the functions that interact with it, like Term::command. Add a new test-case gdb.tui/tuiterm-2.exp that: - overrides proc accept_gdb_output (to be able simulate incorrect responses while avoiding the timeout), - overrides proc send_gdb (to be able to call Term::command without a gdb instance, such that all tuiterm input is generated by the test-case). - issues Term::command calls, and - checks whether they behave correctly. This exposes a problem in Term::command. The "prompt before command" regexp starts with a bit that is supposed to anchor the prompt to the border: ... set str "(^|\|)$gdb_prompt $str" ... but that doesn't work due to insufficient escaping. Fix this by adding the missing escape: ... set str "(^|\\|)$gdb_prompt $str" ... Futhermore, the "prompt after command" regexp in Term::wait_for has no anchoring at all: ... set prompt_wait_for "$gdb_prompt \$" ... so add that as well. Tested on x86_64-linux. --- gdb/testsuite/gdb.tui/tuiterm-2.exp | 98 +++++++++++++++++++++++++++++ gdb/testsuite/lib/tuiterm.exp | 4 +- 2 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.tui/tuiterm-2.exp diff --git a/gdb/testsuite/gdb.tui/tuiterm-2.exp b/gdb/testsuite/gdb.tui/tuiterm-2.exp new file mode 100644 index 00000000000..e7a0f03e4ba --- /dev/null +++ b/gdb/testsuite/gdb.tui/tuiterm-2.exp @@ -0,0 +1,98 @@ +# Copyright 2023 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Check tuiterm procs that interact with gdb as well as tuiterm. + +tuiterm_env + +proc test_accept_gdb_output { } { + if { $::action_cnt == [llength $::actions] } { + return 0 + } + set action [lindex $::actions $::action_cnt] + incr ::action_cnt + + uplevel $action + + return 1 +} + +proc test_send_gdb { string } { + set expected [lindex $::expect_send $::send_cnt] + gdb_assert { [string equal $string $expected] } + + incr ::send_cnt +} + +with_override Term::accept_gdb_output test_accept_gdb_output { + with_override send_gdb test_send_gdb { + + foreach_with_prefix border { "" "|" } { + with_test_prefix "Term::command match" { + Term::_setup 4 20 + set send_cnt 0 + set expect_send { foo\n } + set action_cnt 0 + set actions { + { + Term::_insert "${::border}(gdb) foo" + } + { + Term::_ctl_0x0d + Term::_ctl_0x0a + Term::_insert "${::border}(gdb) " + } + } + gdb_assert { [Term::command "foo"] } + } + + with_test_prefix "Term::command mismatch" { + Term::_setup 4 20 + set send_cnt 0 + set expect_send { foo\n } + set action_cnt 0 + set actions { + { + Term::_insert "$::border (gdb) foo" + } + { + Term::_ctl_0x0d + Term::_ctl_0x0a + Term::_insert "${::border}(gdb) " + } + } + gdb_assert { ![Term::command "foo"] } + } + + with_test_prefix "Term::command mismatch 2" { + Term::_setup 4 20 + set send_cnt 0 + set expect_send { foo\n } + set action_cnt 0 + set actions { + { + Term::_insert "${::border}(gdb) foo" + } + { + Term::_ctl_0x0d + Term::_ctl_0x0a + Term::_insert "${::border} (gdb) " + } + } + gdb_assert { ![Term::command "foo"] } + } + } + } +} diff --git a/gdb/testsuite/lib/tuiterm.exp b/gdb/testsuite/lib/tuiterm.exp index 171b242aa80..dc928ae5aff 100644 --- a/gdb/testsuite/lib/tuiterm.exp +++ b/gdb/testsuite/lib/tuiterm.exp @@ -788,7 +788,7 @@ namespace eval Term { set fn "wait_for" - set prompt_wait_for "$gdb_prompt \$" + set prompt_wait_for "(^|\\|)$gdb_prompt \$" debug_tui_matching "$fn: regexp: '$wait_for'" while 1 { @@ -909,7 +909,7 @@ namespace eval Term { global gdb_prompt send_gdb "$cmd\n" set str [string_to_regexp $cmd] - set str "(^|\|)$gdb_prompt $str" + set str "(^|\\|)$gdb_prompt $str" wait_for $str } -- 2.35.3