[gdb/testsuite] Reimplement gdb.gdb/python-interrupts.exp as unittest
The test-case gdb.gdb/python-interrupts.exp: - runs to captured_command_loop - sets a breakpoint at set_active_ext_lang - calls a python command - verifies the command triggers the breakpoint - sends a signal and verifies the result The test-case is fragile, because (f.i. with -flto) it cannot be guaranteed that captured_command_loop and set_active_ext_lang are available for setting breakpoints. Reimplement the test-case as unittest, using: - execute_command_to_string to capture the output - try/catch to catch the "Error while executing Python code" exception - a new hook selftests::hook_set_active_ext_lang to raise the signal Tested on x86_64-linux.
This commit is contained in:
parent
5a8edb756a
commit
c82f680a94
4 changed files with 57 additions and 50 deletions
|
@ -1933,21 +1933,46 @@ test_python ()
|
|||
output.clear ();
|
||||
|
||||
bool saw_exception = false;
|
||||
scoped_restore reset_gdb_python_initialized
|
||||
= make_scoped_restore (&gdb_python_initialized, 0);
|
||||
try
|
||||
{
|
||||
CMD (output);
|
||||
}
|
||||
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 ());
|
||||
{
|
||||
scoped_restore reset_gdb_python_initialized
|
||||
= make_scoped_restore (&gdb_python_initialized, 0);
|
||||
try
|
||||
{
|
||||
CMD (output);
|
||||
}
|
||||
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 ());
|
||||
}
|
||||
|
||||
saw_exception = false;
|
||||
{
|
||||
scoped_restore save_hook
|
||||
= make_scoped_restore (&hook_set_active_ext_lang,
|
||||
[]() { raise (SIGINT); });
|
||||
try
|
||||
{
|
||||
CMD (output);
|
||||
}
|
||||
catch (const gdb_exception &e)
|
||||
{
|
||||
saw_exception = true;
|
||||
SELF_CHECK (e.reason == RETURN_ERROR);
|
||||
SELF_CHECK (e.error == GENERIC_ERROR);
|
||||
SELF_CHECK (*e.message == "Error while executing Python code.");
|
||||
}
|
||||
SELF_CHECK (saw_exception);
|
||||
std::string ref_output("Traceback (most recent call last):\n"
|
||||
" File \"<string>\", line 1, in <module>\n"
|
||||
"KeyboardInterrupt\n");
|
||||
SELF_CHECK (output == ref_output);
|
||||
}
|
||||
|
||||
#undef CMD
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue