|
13 | 13 | @unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " |
14 | 14 | "if threads have been used") |
15 | 15 | class TestBreak(unittest.TestCase): |
| 16 | + int_handler = None |
16 | 17 |
|
17 | 18 | def setUp(self): |
18 | 19 | self._default_handler = signal.getsignal(signal.SIGINT) |
| 20 | + if self.int_handler is not None: |
| 21 | + signal.signal(signal.SIGINT, self.int_handler) |
19 | 22 |
|
20 | 23 | def tearDown(self): |
21 | 24 | signal.signal(signal.SIGINT, self._default_handler) |
@@ -72,6 +75,10 @@ def test(result): |
72 | 75 |
|
73 | 76 |
|
74 | 77 | def testSecondInterrupt(self): |
| 78 | + # Can't use skipIf decorator because the signal handler may have |
| 79 | + # been changed after defining this method. |
| 80 | + if signal.getsignal(signal.SIGINT) == signal.SIG_IGN: |
| 81 | + self.skipTest("test requires SIGINT to not be ignored") |
75 | 82 | result = unittest.TestResult() |
76 | 83 | unittest.installHandler() |
77 | 84 | unittest.registerResult(result) |
@@ -121,6 +128,10 @@ def test(result): |
121 | 128 |
|
122 | 129 |
|
123 | 130 | def testHandlerReplacedButCalled(self): |
| 131 | + # Can't use skipIf decorator because the signal handler may have |
| 132 | + # been changed after defining this method. |
| 133 | + if signal.getsignal(signal.SIGINT) == signal.SIG_IGN: |
| 134 | + self.skipTest("test requires SIGINT to not be ignored") |
124 | 135 | # If our handler has been replaced (is no longer installed) but is |
125 | 136 | # called by the *new* handler, then it isn't safe to delay the |
126 | 137 | # SIGINT and we should immediately delegate to the default handler |
@@ -250,3 +261,24 @@ def test(): |
250 | 261 |
|
251 | 262 | test() |
252 | 263 | self.assertNotEqual(signal.getsignal(signal.SIGINT), default_handler) |
| 264 | + |
| 265 | +@unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") |
| 266 | +@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") |
| 267 | +@unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " |
| 268 | + "if threads have been used") |
| 269 | +class TestBreakDefaultIntHandler(TestBreak): |
| 270 | + int_handler = signal.default_int_handler |
| 271 | + |
| 272 | +@unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") |
| 273 | +@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") |
| 274 | +@unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " |
| 275 | + "if threads have been used") |
| 276 | +class TestBreakSignalIgnored(TestBreak): |
| 277 | + int_handler = signal.SIG_IGN |
| 278 | + |
| 279 | +@unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") |
| 280 | +@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") |
| 281 | +@unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " |
| 282 | + "if threads have been used") |
| 283 | +class TestBreakSignalDefault(TestBreak): |
| 284 | + int_handler = signal.SIG_DFL |
0 commit comments