[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.
This commit is contained in:
Tom de Vries
2021-09-10 21:54:46 +02:00
parent d7d1029e62
commit cf9c1c753c
2 changed files with 46 additions and 30 deletions

View File

@ -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