From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3064 invoked by alias); 2 Jun 2017 12:23:27 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 2992 invoked by uid 89); 2 Jun 2017 12:23:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=completi, compl, complet X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 02 Jun 2017 12:23:23 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F3D117D4EB for ; Fri, 2 Jun 2017 12:23:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com F3D117D4EB Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=palves@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com F3D117D4EB Received: from cascais.lan (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7C77A5C54A for ; Fri, 2 Jun 2017 12:23:18 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 37/40] Fix completing an empty string Date: Fri, 02 Jun 2017 12:23:00 -0000 Message-Id: <1496406158-12663-38-git-send-email-palves@redhat.com> In-Reply-To: <1496406158-12663-1-git-send-email-palves@redhat.com> References: <1496406158-12663-1-git-send-email-palves@redhat.com> X-SW-Source: 2017-06/txt/msg00021.txt.bz2 While working on this series, I managed to break (gdb) [TAB] locally, and make GDB crash in the big completer rework, but only notice a few weeks down the road, because we have no test for that... I also noticed that: (gdb) [TAB] didn't work (didn't show all commands as matches), even though entering a command with leading whitespace works: (gdb) help This commit fixes the latter and adds a testcase that covers both issues. The gdb.base/completion.exp change is necessary because the new test has a file name that also starts with "gdb.base/complet", making that particular test ambiguous. Adding another letter disambiguates. gdb/testsuite/ChangeLog: yyyy-mm-dd Pedro Alves * completer.c (complete_line_internal_1): Skip spaces until the start of the command. * gdb.base/complete-empty.exp: New file. * gdb.base/completion.exp: Adjust. --- gdb/completer.c | 9 ++++-- gdb/testsuite/gdb.base/complete-empty.exp | 46 +++++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/completion.exp | 6 ++-- 3 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 gdb/testsuite/gdb.base/complete-empty.exp diff --git a/gdb/completer.c b/gdb/completer.c index 99e40a3..74269ad 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -1286,10 +1286,13 @@ complete_line_internal_1 (completion_tracker &tracker, word = tmp_command + point - strlen (text); } - if (point == 0) + /* Move P up to the start of the command. */ + p = skip_spaces_const (p); + + if (*p == '\0') { - /* An empty line we want to consider ambiguous; that is, it - could be any command. */ + /* An empty line is ambiguous; that is, it could be any + command. */ c = CMD_LIST_AMBIGUOUS; result_list = 0; } diff --git a/gdb/testsuite/gdb.base/complete-empty.exp b/gdb/testsuite/gdb.base/complete-empty.exp new file mode 100644 index 0000000..79f9629 --- /dev/null +++ b/gdb/testsuite/gdb.base/complete-empty.exp @@ -0,0 +1,46 @@ +# Copyright 2017 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 . + +# This file is part of the gdb testsuite. + +load_lib completion-support.exp + +gdb_exit +gdb_start + +set timeout 5 + +# Start of tests. + +# Test TAB with no input. +proc_with_prefix empty-input-line {} { + # Set max-completions to 1 to avoid having to hardcode a set of + # command names. + gdb_test_no_output "set max-completions 1" + + # Given the completion limit, this completes to the command with + # the lowest alphanumeric sort, which is, and is likely to remain, + # "!". + test_gdb_complete_unique "" "!" " " 1 + + # Same, but with some leading whitespace. + test_gdb_complete_unique " " " !" " " 1 +} + +proc test_driver {} { + empty-input-line +} + +test_driver diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp index f03bfc3..a9a8e4f 100644 --- a/gdb/testsuite/gdb.base/completion.exp +++ b/gdb/testsuite/gdb.base/completion.exp @@ -722,13 +722,13 @@ gdb_test "complete file ./gdb.base/compl" \ "file ./gdb.base/completion\\.exp.*" \ "complete-command 'file ./gdb.base/compl'" -set test "complete 'file ./gdb.base/complet'" -send_gdb "file ./gdb.base/complet\t" +set test "complete 'file ./gdb.base/completi'" +send_gdb "file ./gdb.base/completi\t" gdb_test_multiple "" "$test" { -re "^file ./gdb.base/completion\\.exp $" { send_gdb "\n" # Ignore the exact error message. - gdb_test_multiple "" "complete 'file ./gdb.base/complet'" { + gdb_test_multiple "" "complete 'file ./gdb.base/completi'" { -re "\r\nA program is being debugged already\\.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\) $" { send_gdb "n\n" exp_continue -- 2.5.5