@@ -396,12 +396,38 @@ def test_fatal_error(self):
396
396
self .assertIn ('IndexError' , msg )
397
397
eq (func .called , 2 )
398
398
399
- a = []
400
- x = a .append
399
+
401
400
class ExecRuncodeTest (unittest .TestCase ):
402
401
402
+ @classmethod
403
+ def setUpClass (cls ):
404
+ cls .addClassCleanup (setattr ,run ,'print_exception' ,run .print_exception )
405
+ cls .prt = Func () # Need reference.
406
+ run .print_exception = cls .prt
407
+ mockrpc = mock .Mock ()
408
+ mockrpc .console .getvar = Func (result = False )
409
+ cls .ex = run .Executive (mockrpc )
410
+
411
+ @classmethod
412
+ def tearDownClass (cls ):
413
+ assert sys .excepthook == sys .__excepthook__
414
+
403
415
def test_exceptions (self ):
404
- x (lambda a :a )
416
+ ex = self .ex
417
+ ex .runcode ('1/0' )
418
+ self .assertIs (ex .user_exc_info [0 ], ZeroDivisionError )
419
+
420
+ self .addCleanup (setattr , sys , 'excepthook' , sys .__excepthook__ )
421
+ sys .excepthook = lambda t , e , tb : run .print_exception (t )
422
+ ex .runcode ('1/0' )
423
+ self .assertIs (self .prt .args [0 ], ZeroDivisionError )
424
+
425
+ sys .excepthook = lambda : None
426
+ ex .runcode ('1/0' )
427
+ t , e , tb = ex .user_exc_info
428
+ self .assertIs (t , TypeError )
429
+ self .assertTrue (isinstance (e .__context__ , ZeroDivisionError ))
430
+
405
431
406
432
if __name__ == '__main__' :
407
433
unittest .main (verbosity = 2 )
0 commit comments