@@ -396,12 +396,38 @@ def test_fatal_error(self):
396396 self .assertIn ('IndexError' , msg )
397397 eq (func .called , 2 )
398398
399- a = []
400- x = a .append
399+
401400class ExecRuncodeTest (unittest .TestCase ):
402401
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+
403415 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+
405431
406432if __name__ == '__main__' :
407433 unittest .main (verbosity = 2 )
0 commit comments