]>
git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.2/Lib/unittest/test/test_break.py
7 from cStringIO
import StringIO
13 @unittest.skipUnless(hasattr(os
, 'kill'), "Test requires os.kill")
14 @unittest.skipIf(sys
.platform
=="win32", "Test cannot run on Windows")
15 @unittest.skipIf(sys
.platform
== 'freebsd6', "Test kills regrtest on freebsd6 "
16 "if threads have been used")
17 class TestBreak(unittest
.TestCase
):
20 self
._default
_handler
= signal
.getsignal(signal
.SIGINT
)
23 signal
.signal(signal
.SIGINT
, self
._default
_handler
)
24 unittest
.signals
._results
= weakref
.WeakKeyDictionary()
25 unittest
.signals
._interrupt
_handler
= None
28 def testInstallHandler(self
):
29 default_handler
= signal
.getsignal(signal
.SIGINT
)
30 unittest
.installHandler()
31 self
.assertNotEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)
35 os
.kill(pid
, signal
.SIGINT
)
36 except KeyboardInterrupt:
37 self
.fail("KeyboardInterrupt not handled")
39 self
.assertTrue(unittest
.signals
._interrupt
_handler
.called
)
41 def testRegisterResult(self
):
42 result
= unittest
.TestResult()
43 unittest
.registerResult(result
)
45 for ref
in unittest
.signals
._results
:
48 elif ref
is not result
:
49 self
.fail("odd object in result set")
51 self
.fail("result not found")
54 def testInterruptCaught(self
):
55 default_handler
= signal
.getsignal(signal
.SIGINT
)
57 result
= unittest
.TestResult()
58 unittest
.installHandler()
59 unittest
.registerResult(result
)
61 self
.assertNotEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)
65 os
.kill(pid
, signal
.SIGINT
)
66 result
.breakCaught
= True
67 self
.assertTrue(result
.shouldStop
)
71 except KeyboardInterrupt:
72 self
.fail("KeyboardInterrupt not handled")
73 self
.assertTrue(result
.breakCaught
)
76 def testSecondInterrupt(self
):
77 result
= unittest
.TestResult()
78 unittest
.installHandler()
79 unittest
.registerResult(result
)
83 os
.kill(pid
, signal
.SIGINT
)
84 result
.breakCaught
= True
85 self
.assertTrue(result
.shouldStop
)
86 os
.kill(pid
, signal
.SIGINT
)
87 self
.fail("Second KeyboardInterrupt not raised")
91 except KeyboardInterrupt:
94 self
.fail("Second KeyboardInterrupt not raised")
95 self
.assertTrue(result
.breakCaught
)
98 def testTwoResults(self
):
99 unittest
.installHandler()
101 result
= unittest
.TestResult()
102 unittest
.registerResult(result
)
103 new_handler
= signal
.getsignal(signal
.SIGINT
)
105 result2
= unittest
.TestResult()
106 unittest
.registerResult(result2
)
107 self
.assertEqual(signal
.getsignal(signal
.SIGINT
), new_handler
)
109 result3
= unittest
.TestResult()
113 os
.kill(pid
, signal
.SIGINT
)
117 except KeyboardInterrupt:
118 self
.fail("KeyboardInterrupt not handled")
120 self
.assertTrue(result
.shouldStop
)
121 self
.assertTrue(result2
.shouldStop
)
122 self
.assertFalse(result3
.shouldStop
)
125 def testHandlerReplacedButCalled(self
):
126 # If our handler has been replaced (is no longer installed) but is
127 # called by the *new* handler, then it isn't safe to delay the
128 # SIGINT and we should immediately delegate to the default handler
129 unittest
.installHandler()
131 handler
= signal
.getsignal(signal
.SIGINT
)
132 def new_handler(frame
, signum
):
133 handler(frame
, signum
)
134 signal
.signal(signal
.SIGINT
, new_handler
)
138 os
.kill(pid
, signal
.SIGINT
)
139 except KeyboardInterrupt:
142 self
.fail("replaced but delegated handler doesn't raise interrupt")
144 def testRunner(self
):
145 # Creating a TextTestRunner with the appropriate argument should
146 # register the TextTestResult it creates
147 runner
= unittest
.TextTestRunner(stream
=StringIO())
149 result
= runner
.run(unittest
.TestSuite())
150 self
.assertIn(result
, unittest
.signals
._results
)
152 def testWeakReferences(self
):
153 # Calling registerResult on a result should not keep it alive
154 result
= unittest
.TestResult()
155 unittest
.registerResult(result
)
157 ref
= weakref
.ref(result
)
160 # For non-reference counting implementations
161 gc
.collect();gc
.collect()
162 self
.assertIsNone(ref())
165 def testRemoveResult(self
):
166 result
= unittest
.TestResult()
167 unittest
.registerResult(result
)
169 unittest
.installHandler()
170 self
.assertTrue(unittest
.removeResult(result
))
172 # Should this raise an error instead?
173 self
.assertFalse(unittest
.removeResult(unittest
.TestResult()))
177 os
.kill(pid
, signal
.SIGINT
)
178 except KeyboardInterrupt:
181 self
.assertFalse(result
.shouldStop
)
183 def testMainInstallsHandler(self
):
188 default_handler
= signal
.getsignal(signal
.SIGINT
)
190 class FakeRunner(object):
193 def __init__(self
, *args
, **kwargs
):
194 self
.initArgs
.append((args
, kwargs
))
196 self
.runArgs
.append(test
)
199 class Program(unittest
.TestProgram
):
200 def __init__(self
, catchbreak
):
202 self
.verbosity
= verbosity
203 self
.failfast
= failfast
204 self
.catchbreak
= catchbreak
205 self
.testRunner
= FakeRunner
212 self
.assertEqual(FakeRunner
.initArgs
, [((), {'buffer': None,
213 'verbosity': verbosity
,
214 'failfast': failfast
})])
215 self
.assertEqual(FakeRunner
.runArgs
, [test
])
216 self
.assertEqual(p
.result
, result
)
218 self
.assertEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)
220 FakeRunner
.initArgs
= []
221 FakeRunner
.runArgs
= []
225 self
.assertEqual(FakeRunner
.initArgs
, [((), {'buffer': None,
226 'verbosity': verbosity
,
227 'failfast': failfast
})])
228 self
.assertEqual(FakeRunner
.runArgs
, [test
])
229 self
.assertEqual(p
.result
, result
)
231 self
.assertNotEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)
233 def testRemoveHandler(self
):
234 default_handler
= signal
.getsignal(signal
.SIGINT
)
235 unittest
.installHandler()
236 unittest
.removeHandler()
237 self
.assertEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)
239 # check that calling removeHandler multiple times has no ill-effect
240 unittest
.removeHandler()
241 self
.assertEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)
243 def testRemoveHandlerAsDecorator(self
):
244 default_handler
= signal
.getsignal(signal
.SIGINT
)
245 unittest
.installHandler()
247 @unittest.removeHandler
249 self
.assertEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)
252 self
.assertNotEqual(signal
.getsignal(signal
.SIGINT
), default_handler
)