From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by sourceware.org (Postfix) with ESMTPS id F3D94385840F for ; Fri, 3 Sep 2021 11:21:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F3D94385840F Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73]) (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-out2.suse.de (Postfix) with ESMTPS id 3583A203AA for ; Fri, 3 Sep 2021 11:21:44 +0000 (UTC) Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73]) (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 imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 1CFC513736 for ; Fri, 3 Sep 2021 11:21:44 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap1.suse-dmz.suse.de with ESMTPSA id qiGBBUgFMmEEHAAAGKfGzw (envelope-from ) for ; Fri, 03 Sep 2021 11:21:44 +0000 Date: Fri, 3 Sep 2021 13:21:42 +0200 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH][gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest Message-ID: <20210903112141.GA10212@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-12.2 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 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: Fri, 03 Sep 2021 11:21:46 -0000 Hi, The test-case gdb.gdb/python-selftest.exp: - patches the gdb_python_initialized variable in gdb to 0 - checks that the output of a python command is "Python not initialized" Reimplement gdb.gdb/python-selftest.exp as unittest, using: - execute_command_to_string to capture the output - try/catch to catch the "Python not initialized" exception. Tested on x86_64-linux. [ Passes build & gdb.gdb/unittest.exp, currently doing full regression test run. ] Any comments? Thanks, - Tom [gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest --- gdb/python/python.c | 46 +++++++++++++++++++++++++++++++ gdb/testsuite/gdb.gdb/python-selftest.exp | 30 -------------------- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/gdb/python/python.c b/gdb/python/python.c index e42cbc4fd5e..d1c4e272762 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -35,6 +35,7 @@ #include #include "location.h" #include "run-on-main-thread.h" +#include "gdbsupport/selftest.h" /* Declared constants and enum for python stack printing. */ static const char python_excp_none[] = "none"; @@ -1879,6 +1880,47 @@ do_start_initialization () #endif /* HAVE_PYTHON */ +#if GDB_SELF_TEST +namespace selftests { + +/* Entry point for python unit tests. */ + +static void +test_python () +{ +#define CMD execute_command_to_string ("python print(5)", 0, true); + + std::string output; + + output = CMD; + SELF_CHECK (output == "5\n"); + output.clear (); + + bool saw_exception = false; + scoped_restore reset_gdb_python_initialized + = make_scoped_restore (&gdb_python_initialized, 0); + try + { + output = CMD; + } + catch (const gdb_exception &e) + { + saw_exception = true; + SELF_CHECK (e.reason == RETURN_ERROR); + SELF_CHECK (e.error == GENERIC_ERROR); + SELF_CHECK (*e.message == "Python not initialized"); + } + SELF_CHECK (saw_exception); + SELF_CHECK (output.empty ()); + +#undef CMD +} + +#undef CHECK_OUTPUT + +} // namespace selftests +#endif /* GDB_SELF_TEST */ + /* See python.h. */ cmd_list_element *python_cmd_element = nullptr; @@ -1977,6 +2019,10 @@ python executable."), show_python_dont_write_bytecode, &user_set_python_list, &user_show_python_list); + +#if GDB_SELF_TEST + selftests::register_test ("python", selftests::test_python); +#endif /* GDB_SELF_TEST */ } #ifdef HAVE_PYTHON diff --git a/gdb/testsuite/gdb.gdb/python-selftest.exp b/gdb/testsuite/gdb.gdb/python-selftest.exp deleted file mode 100644 index 74b2c520900..00000000000 --- a/gdb/testsuite/gdb.gdb/python-selftest.exp +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2013-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 . - -load_lib selftest-support.exp -load_lib gdb-python.exp - -proc selftest_python {} { - if {[skip_python_tests]} { - return -1 - } - - gdb_test_no_output "set variable gdb_python_initialized = 0" - gdb_test "call catch_command_errors(execute_command, \"python print(5)\", 0, true)" \ - "Python not initialized.* = 0" - return 0 -} - -do_self_tests captured_command_loop selftest_python