diff options
author | Tom de Vries <tdevries@suse.de> | 2021-09-10 21:54:46 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2021-09-10 21:54:46 +0200 |
commit | cf9c1c753c126c9d18b9cb69929ed6c315143ed3 (patch) | |
tree | 6e458b5fc670f080a41f8b0c8f27ece8f725a2b2 /gdb/python | |
parent | d7d1029e6261c2455f335663f8c9cffb440f1a6a (diff) | |
download | gdb-cf9c1c753c126c9d18b9cb69929ed6c315143ed3.zip gdb-cf9c1c753c126c9d18b9cb69929ed6c315143ed3.tar.gz gdb-cf9c1c753c126c9d18b9cb69929ed6c315143ed3.tar.bz2 |
[gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest
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.
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/python.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/gdb/python/python.c b/gdb/python/python.c index 6af9c72..5918bb4 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -35,6 +35,7 @@ #include <ctype.h> #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 |