this repo has no description
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com)
2#include "Python.h"
3#include "gtest/gtest.h"
4
5#include "capi-fixture.h"
6#include "capi-testing.h"
7
8namespace py {
9namespace testing {
10
11using SignalModuleApiTest = ExtensionApi;
12
13TEST_F(SignalModuleApiTest, PyErrSetInterruptTriggersInterrupt) {
14 PyErr_SetInterrupt();
15 EXPECT_EQ(PyErr_Occurred(), nullptr);
16 PyObject* main(PyImport_AddModule("__main__"));
17 ASSERT_NE(main, nullptr);
18 PyObject* globals(PyModule_GetDict(main));
19 PyObjectPtr result(PyRun_String("pass", Py_file_input, globals, globals));
20 EXPECT_EQ(result.get(), nullptr);
21 EXPECT_NE(PyErr_Occurred(), nullptr);
22 EXPECT_TRUE(PyErr_ExceptionMatches(PyExc_KeyboardInterrupt));
23 PyErr_Clear();
24}
25
26TEST_F(SignalModuleApiTest, PyErrCheckSignalsReturnsZero) {
27 EXPECT_EQ(PyErr_CheckSignals(), 0);
28}
29
30TEST_F(SignalModuleApiTest, PyErrCheckSignalsRunsSignalHandlers) {
31 PyErr_SetInterrupt();
32 EXPECT_EQ(PyErr_CheckSignals(), -1);
33 EXPECT_NE(PyErr_Occurred(), nullptr);
34 EXPECT_TRUE(PyErr_ExceptionMatches(PyExc_KeyboardInterrupt));
35 PyErr_Clear();
36}
37
38} // namespace testing
39} // namespace py