From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2068.outbound.protection.outlook.com [40.107.93.68]) by sourceware.org (Postfix) with ESMTPS id 666983858006 for ; Mon, 17 Jan 2022 12:44:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 666983858006 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hg04YpImB+bjZUT123slObl3uTA/yO9v+xQAaxQFR8bKVN/HbTAD+Mt4Nq3WG55JkDFUhmHF0f35SKSUPIrDlUT7+BsOAGyCAMwbfBJCycyrKfnxbQ7AbMi3QPE3J5Ahnr5/5FiAlCq+6mU2ocvTGaMD2+x2Jt/XCC4Q9OdtS2X1IQC7hmvHdk28j5aft/40kCjtCgqkznV6nKhYqtCcU7Nktwi73XSMqOV8CsJpoj5w/A2WJpIYoEjLfh/rKmOgTuRWG73MFO1TWGDnxST9uLN2zPZL74JjKF9pXqka/TGsu4nHVIzwhSn1XtymjplwIVe4UhsR4/xL1pgn2GhS6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NqCaXC0RRZ9E7/jnNu9QHWiNjF9L2zkHOq/9lmefjMY=; b=mjIGNJRG+d4A0q6ch5LrGa9+dZDhjjOdOo1MHKBlngMWVzotkdGDYhvSlwXRysNlNLPZOWjMnmY10cusQ3szqW6vJxF+azkobRh/RVe2sE3sCXFdcEx8dHhsJhzenPGnJqqYUtQf78f+LkZIXfV5dR3a4fybRDAOivx0OIq5KpsQgbcpYnBklG/9E/L8Ca8VzyBOn8kSDEYacF8iDl6CYOAQeXkOdfaJxR1ZIofDb7D/OPfCcBiz3tOU8iLfG7CdWay0vP3L5V/67yVuHb9aRC8vIx2932egn2rsoVVuS7dCwFlj3733EZHcpVs/OajuB8dGomie1GA2wBTEWi2Fkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=labware.com; dmarc=pass action=none header.from=labware.com; dkim=pass header.d=labware.com; arc=none Received: from DM6PR17MB3113.namprd17.prod.outlook.com (2603:10b6:5:6::10) by DM5PR17MB1484.namprd17.prod.outlook.com (2603:10b6:3:145::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.12; Mon, 17 Jan 2022 12:44:58 +0000 Received: from DM6PR17MB3113.namprd17.prod.outlook.com ([fe80::7839:31f:2416:6ba5]) by DM6PR17MB3113.namprd17.prod.outlook.com ([fe80::7839:31f:2416:6ba5%7]) with mapi id 15.20.4888.014; Mon, 17 Jan 2022 12:44:58 +0000 From: Jan Vrany To: gdb-patches@sourceware.org Cc: Jan Vrany Subject: [PATCH 4/5] gdb/testsuite: add tests for python-defined MI commands Date: Mon, 17 Jan 2022 12:44:24 +0000 Message-Id: <20220117124425.2658516-5-jan.vrany@labware.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220117124425.2658516-1-jan.vrany@labware.com> References: <20220117124425.2658516-1-jan.vrany@labware.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: LO2P265CA0156.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9::24) To DM6PR17MB3113.namprd17.prod.outlook.com (2603:10b6:5:6::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8354cfbb-64a4-41f8-38ca-08d9d9b72b89 X-MS-TrafficTypeDiagnostic: DM5PR17MB1484:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2000; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZJPdJZafl0RmxUS0G1AfpQVMSrgwVJEXgSDUu4ntzeymUFRyzWUkbNBLZ/4XZdbL/FtbAXsBvLmJ2QNirPn0YUGCAg4K594YzaGe4jgX1DxdTcpYES0GVJ+nikHXdGZS92tWHPpSM/56XNKYu27Kozm0ilmfhNtQKQNl9x7no9jj/PMbxoHSvFvE9ag3crDwmqHcIj6IOMA11PyR9L065QrUnJsNE+P2DefuMG6h4yo5k9/kc+0Gu7l+vSUY4asUJJTlMY9AD41FRAFWl8jTo+bZKubZlDRCv+PRksduHiwOF2b/DOa854w/BT8fIGjyFAVN1w4/HuKZsrWQFlzAXtNc3aqMct4SgumtDPWxaxQWEVtbYF4xR41w9+ljsiGLxK5PPOoMky5cDZel1uQuF+tHf9Q5LYIZ08c/qh9dQ5EM+wbEMLqAcOy3tdwtD/FaYmbelNWvfkY0rPz2UMNOMQ2RKJsihg23zQRxnE7bn4WsrG/xaGiBpZcwC2C4Y1ycBfbAKSrfIn5U0Tt6+jWjVWZaQvAX6jUFjwN6Arj6g4IMaZVaD8VTQTcxQ4jIlZ33VE5lGanYFRph7Q5Q1EX5AFgTS1i00vdvAEaUMz17baKilrztZnOTLtA0CMEsAimSOFKiTSnR69SqPjaeaeiQEC0o0wVTe/6llq1kg2zyP9fsgor1C3L2a3l+lgHl0+53RqhWbiBGhRGeIohnM+xLalmObG4YV5/lzSs9Y5u4bJ7clwkdkYIGa9PX78wpIY3eKi2WhkPYmAv+eUinDT1Hzpom8j+QdHdsdXNVr0lo8LzzxSNwDL5uWYjTir/6dRuJ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR17MB3113.namprd17.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(4326008)(26005)(6916009)(1076003)(2906002)(316002)(6506007)(36756003)(66946007)(6666004)(66476007)(66556008)(38100700002)(5660300002)(38350700002)(508600001)(186003)(107886003)(52116002)(86362001)(83380400001)(44832011)(6512007)(6486002)(8676002)(8936002)(2616005)(2004002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MaCXL8pmdMFXf7NzG2+2mOfqXNTFWvJSqiTICooXzZg2k4MNQ/IXMp2avPUi?= =?us-ascii?Q?85qrbPG1OlhWm3nhBfrQ5atDtkLYArveM/n1VjPoK4YgRPZ0kR+cfqc2Iovp?= =?us-ascii?Q?G7WN9VUBe6X6JFBuypMi9oMzV5BMNJRRd8R+9D+ZPJWSyoHtR2+nZNbV0dG+?= =?us-ascii?Q?kjrYRUfQYrBnd2R47d8l1bAaDWVoGFc9IQ4ujXZmOXSCo7CqmFfgyF6BMb7W?= =?us-ascii?Q?hP138re5XrJep7pGwgVY1jt1grYQ3owOP6v6LCuGubM6ZDSxuGXyw2LPCCMX?= =?us-ascii?Q?KXpq2/sKzG7aSk3DhxZHsoY21XNcwzuuxokJV4UYmEolaXhbXsjXnAljkAuv?= =?us-ascii?Q?jfjela2iBRi+LrY4XpnPNZqfnP5IH2QoYBjXZHiW5lcnnn1NnljdODvOcXL8?= =?us-ascii?Q?nJh5zZvPz8jcbnuBwnWrtlIMvKrwyN5vIZVS1MdcjBqpdMBBI3c53joY3Maq?= =?us-ascii?Q?zeCHxrtO5qWMmXZG4bY6GkxQjNEQWmlmCBeUgrLp07ThtKufAPKSUguHRwaC?= =?us-ascii?Q?Ju4dTPgiwsFchRCuQR2+0kNGpnY3kuij3k45gKKe7vduvJFuC57lVewGmUj+?= =?us-ascii?Q?X6tKSFtvL/g63hx0ktrDbv3Bdo7s4QOcdSN7QScKv9BhgVlHbUU8vCthPjW1?= =?us-ascii?Q?J/iNxZCaPyEoxiDLf8xkG2I6ZFX0cOpKd9Bdv1qUWFZQ4c0rSzFozDkEF/KP?= =?us-ascii?Q?UJp19yw4xq0joqenIrVseu06auL6LobDLNLDfxiv3RvZMKQvgqbY/W9fKeDA?= =?us-ascii?Q?9r4ejz/DM7uo87vLQv2enOULEAJu/jxFq1SeZI4T68cXJ/XBlZNUuIgpP+2m?= =?us-ascii?Q?kJU2SYwS1DknS+/4zYJ3Iuksq0m/ZuwdC9TVcw9KlLbJqtDOnmnPyb0mH99E?= =?us-ascii?Q?Dwkr5Zq2Mk32pY5KXmBBvqKWaekZsOzVRzI6k3mh4HWbA1fKLaRQTBzobI12?= =?us-ascii?Q?npug6BLkql4P9x1dk+R0wfOMjfHuaKywkUkrwMXzMMAPqbOofTH8D0vrimmq?= =?us-ascii?Q?8Ree356xer1HAAUgfnG+e/ZNnSx4rjTTvkrLMUOvXzNMDqRuoQNgU1+cu2Ep?= =?us-ascii?Q?Pg/IOK/jEKKmbRN+QSd+oG1c28uE3tMO1wIW7APboJAt0o6o9svtvtYP/IwJ?= =?us-ascii?Q?ERYc+5X3/lEKaAHKOjBdKym8NVuY993WlcHaFYiKEfW8Mk1FQ/pOBx8NJcaY?= =?us-ascii?Q?/sC6HA9F619axAGYwstHpGziZdh9Q3R613SKGEJXy9Qwhu9WpyiBm7rhbd2J?= =?us-ascii?Q?G8oVJiMmcQiaAMLrEpE7LnVwrX82q050ejCCMWuKrpMgNdUwoEsQ8qeXgcp+?= =?us-ascii?Q?JYjjf8/PPazNm34yoIg49QcxSeKmiGTJjQCjqUFzsYdO296Fj5bKRrTmJXQQ?= =?us-ascii?Q?IEqs2u5+rTzFPOy60L21HWumC5J6KZLhZPD3nvFlfrNSEW3rPSYSP35xui4e?= =?us-ascii?Q?yRHJuSPqkWj8BW0Osxx9SGBSGbhXVqvzfic2onTsUh5J3ON2mOIojbVZaOHm?= =?us-ascii?Q?woYi46LyNQ4oAUENj4vykYV+/zu8CCb5/EONdB+F8D2NsuvNZdopccfOQhzC?= =?us-ascii?Q?qXdUlVWH4sl6UhnZ4VQt7EeyExbceycYpw3idx+CEH1LOpXelBHzCIXGDAwa?= =?us-ascii?Q?SStUfeOWjRZHNWP+jj0pPq4=3D?= X-OriginatorOrg: labware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8354cfbb-64a4-41f8-38ca-08d9d9b72b89 X-MS-Exchange-CrossTenant-AuthSource: DM6PR17MB3113.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2022 12:44:58.2916 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b5db0322-1aa0-4c0a-859c-ad0f96966f4c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GeJ39gROvNt5rhKF8fzwdWdqHGViBU1GVhQEKjr7e8fb5KMRT+Gg88lnRfFsE38rFCs4rnZh4ce+HqfZQGRyGg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR17MB1484 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Jan 2022 12:45:01 -0000 --- gdb/testsuite/gdb.python/py-mi-cmd.exp | 133 +++++++++++++++++++++++++ gdb/testsuite/gdb.python/py-mi-cmd.py | 68 +++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 gdb/testsuite/gdb.python/py-mi-cmd.exp create mode 100644 gdb/testsuite/gdb.python/py-mi-cmd.py diff --git a/gdb/testsuite/gdb.python/py-mi-cmd.exp b/gdb/testsuite/gdb.python/py-mi-cmd.exp new file mode 100644 index 00000000000..78baf5e97ff --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-cmd.exp @@ -0,0 +1,133 @@ +# Copyright (C) 2019-2021 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 . + +# Test custom MI commands implemented in Python. + +load_lib gdb-python.exp +load_lib mi-support.exp +set MIFLAGS "-i=mi2" + +gdb_exit +if {[mi_gdb_start]} { + continue +} + +if {[lsearch -exact [mi_get_features] python] < 0} { + unsupported "python support is disabled" + return -1 +} + +standard_testfile + +# +# Start here +# + + +mi_gdb_test "set python print-stack full" \ + ".*\\^done" \ + "set python print-stack full" + +mi_gdb_test "source ${srcdir}/${subdir}/${testfile}.py" \ + ".*\\^done" \ + "load python file" + +mi_gdb_test "python pycmd1('-pycmd')" \ + ".*\\^done" \ + "define -pycmd MI command" + + +mi_gdb_test "-pycmd int" \ + "\\^done,result=\"42\"" \ + "-pycmd int" + +mi_gdb_test "-pycmd str" \ + "\\^done,result=\"Hello world!\"" \ + "-pycmd str" + +mi_gdb_test "-pycmd ary" \ + "\\^done,result=\\\[\"Hello\",\"42\"\\\]" \ + "-pycmd ary" + +mi_gdb_test "-pycmd dct" \ + "\\^done,result={hello=\"world\",times=\"42\"}" \ + "-pycmd dct" + +mi_gdb_test "-pycmd bk1" \ + "\\^error,msg=\"Non-string object used as key: Bad Key\\.\"" \ + "-pycmd bk1" + +mi_gdb_test "-pycmd bk2" \ + "\\^error,msg=\"Non-string object used as key: 1\\.\"" \ + "-pycmd bk2" + +mi_gdb_test "-pycmd bk3" \ + "\\^error,msg=\"Non-string object used as key: __repr__ returned non-string .*" \ + "-pycmd bk3" + +mi_gdb_test "-pycmd tpl" \ + "\\^done,result=\\\[\"42\",\"Hello\"\\\]" \ + "-pycmd tpl" + +mi_gdb_test "-pycmd itr" \ + "\\^done,result=\\\[\"1\",\"2\",\"3\"\\\]" \ + "-pycmd itr" + +mi_gdb_test "-pycmd nn1" \ + "\\^done" \ + "-pycmd nn1" + +mi_gdb_test "-pycmd nn2" \ + "\\^done,result=\\\[\"None\"\\\]" \ + "-pycmd nn2" + +mi_gdb_test "-pycmd bogus" \ + "\\^error,msg=\"-pycmd: Invalid parameter: bogus\"" \ + "-pycmd bogus" + +mi_gdb_test "-pycmd exp" \ + "\\^error,msg=\"-pycmd: failed to execute command\"" \ + "-pycmd exp" + +mi_gdb_test "python pycmd2('-pycmd')" \ + ".*\\^done" \ + "redefine -pycmd MI command from CLI command" + +mi_gdb_test "-pycmd str" \ + "\\^done,result=\"Ciao!\"" \ + "-pycmd str - redefined from CLI" + +mi_gdb_test "-pycmd int" \ + "\\^error,msg=\"-pycmd: Invalid parameter: int\"" \ + "-pycmd int - redefined from CLI" + +mi_gdb_test "-pycmd red" \ + "\\^error,msg=\"-pycmd: Command redefined but we failing anyway\"" \ + "redefine -pycmd MI command from Python MI command" + +mi_gdb_test "-pycmd int" \ + "\\^done,result=\"42\"" \ + "-pycmd int - redefined from MI" + +mi_gdb_test "python pycmd1('')" \ + ".*\\^error,msg=\"MI command name is empty.\"" \ + "empty MI command name" + +mi_gdb_test "python pycmd1('-')" \ + ".*\\^error,msg=\"MI command name does not start with '-' followed by at least one letter or digit\\.\"" \ + "invalid MI command name" + +mi_gdb_test "python pycmd1('-bad-character-@')" \ + ".*\\^error,msg=\"MI command name contains invalid character: @\\.\"" \ + "invalid character in MI command name" diff --git a/gdb/testsuite/gdb.python/py-mi-cmd.py b/gdb/testsuite/gdb.python/py-mi-cmd.py new file mode 100644 index 00000000000..2f6ba2f8037 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-cmd.py @@ -0,0 +1,68 @@ +# Copyright (C) 2019-2021 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 . + +import gdb + +class BadKey: + def __repr__(self): + return "Bad Key" + +class ReallyBadKey: + def __repr__(self): + return BadKey() + + +class pycmd1(gdb.MICommand): + def invoke(self, argv): + if argv[0] == 'int': + return 42 + elif argv[0] == 'str': + return "Hello world!" + elif argv[0] == 'ary': + return [ 'Hello', 42 ] + elif argv[0] == "dct": + return { 'hello' : 'world', 'times' : 42} + elif argv[0] == "bk1": + return { BadKey() : 'world' } + elif argv[0] == "bk2": + return { 1 : 'world' } + elif argv[0] == "bk3": + return { ReallyBadKey() : 'world' } + elif argv[0] == 'tpl': + return ( 42 , 'Hello' ) + elif argv[0] == 'itr': + return iter([1,2,3]) + elif argv[0] == 'nn1': + return None + elif argv[0] == 'nn2': + return [ None ] + elif argv[0] == 'red': + pycmd2('-pycmd') + return None + elif argv[0] == 'exp': + raise gdb.GdbError() + else: + raise gdb.GdbError("Invalid parameter: %s" % argv[0]) + + +class pycmd2(gdb.MICommand): + def invoke(self, argv): + if argv[0] == 'str': + return "Ciao!" + elif argv[0] == 'red': + pycmd1('-pycmd') + raise gdb.GdbError("Command redefined but we failing anyway") + else: + raise gdb.GdbError("Invalid parameter: %s" % argv[0]) + -- 2.30.2