From patchwork Tue May 14 11:24:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Vrany X-Patchwork-Id: 32673 Received: (qmail 101536 invoked by alias); 14 May 2019 11:24:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 101475 invoked by uid 89); 14 May 2019 11:24:54 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.1 spammy=ciao, Ciao, itr, nn1 X-HELO: relay.fit.cvut.cz Received: from relay.fit.cvut.cz (HELO relay.fit.cvut.cz) (147.32.232.237) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 14 May 2019 11:24:52 +0000 Received: from imap.fit.cvut.cz (imap.fit.cvut.cz [IPv6:2001:718:2:2901:0:0:0:238]) by relay.fit.cvut.cz (8.15.2/8.15.2) with ESMTPS id x4EBOk4D033268 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 May 2019 13:24:48 +0200 (CEST) (envelope-from jan.vrany@fit.cvut.cz) Received: from localhost (02791bac.bb.sky.com [2.121.27.172] (may be forged)) (authenticated bits=0 as user vranyj1) by imap.fit.cvut.cz (8.15.2/8.15.2) with ESMTPSA id x4EBOkn4096991 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 14 May 2019 13:24:46 +0200 (CEST) (envelope-from jan.vrany@fit.cvut.cz) From: Jan Vrany To: gdb-patches@sourceware.org Cc: Jan Vrany Subject: [PATCH v2 5/5] mi/python: Add tests for python-defined MI commands Date: Tue, 14 May 2019 12:24:18 +0100 Message-Id: <20190514112418.24091-6-jan.vrany@fit.cvut.cz> In-Reply-To: <20190418152337.6376-1-jan.vrany@fit.cvut.cz> References: <20190418152337.6376-1-jan.vrany@fit.cvut.cz> MIME-Version: 1.0 gdb/testsuite/Changelog: * gdb.python/py-mi-cmd.exp: New file. * gdb.python/py-mi-cmd.py: New file. --- gdb/testsuite/ChangeLog | 5 ++ gdb/testsuite/gdb.python/py-mi-cmd.exp | 109 +++++++++++++++++++++++++ gdb/testsuite/gdb.python/py-mi-cmd.py | 39 +++++++++ 3 files changed, 153 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/ChangeLog b/gdb/testsuite/ChangeLog index d46422635b..935db3bc3b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-05-03 Jan Vrany + + * gdb.python/py-mi-cmd.exp: New file. + * gdb.python/py-mi-cmd.py: New file. + 2019-04-15 Leszek Swirski * gdb.arch/amd64-eval.cc: New file. 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 0000000000..e6226c4c63 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-cmd.exp @@ -0,0 +1,109 @@ +# Copyright (C) 2018 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 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" + +mi_gdb_test "-pycmd int" \ + "\\^error,msg=\"-pycmd: Invalid parameter: int\"" \ + "-pycmd int" + +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" + 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 0000000000..76ab46c97d --- /dev/null +++ b/gdb/testsuite/gdb.python/py-mi-cmd.py @@ -0,0 +1,39 @@ +import gdb + +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] == '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]) +