diff options
Diffstat (limited to 'Lib/test/test_sys_setprofile.py')
-rw-r--r-- | Lib/test/test_sys_setprofile.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Lib/test/test_sys_setprofile.py b/Lib/test/test_sys_setprofile.py index 21a09b5192..4c3053a1e3 100644 --- a/Lib/test/test_sys_setprofile.py +++ b/Lib/test/test_sys_setprofile.py @@ -2,6 +2,7 @@ import gc import pprint import sys import unittest +from test import support class TestGetProfile(unittest.TestCase): @@ -415,5 +416,43 @@ def show_events(callable): pprint.pprint(capture_events(callable)) +class TestEdgeCases(unittest.TestCase): + + def setUp(self): + self.addCleanup(sys.setprofile, sys.getprofile()) + sys.setprofile(None) + + def test_reentrancy(self): + def foo(*args): + ... + + def bar(*args): + ... + + class A: + def __call__(self, *args): + pass + + def __del__(self): + sys.setprofile(bar) + + sys.setprofile(A()) + with support.catch_unraisable_exception() as cm: + sys.setprofile(foo) + self.assertEqual(cm.unraisable.object, A.__del__) + self.assertIsInstance(cm.unraisable.exc_value, RuntimeError) + + self.assertEqual(sys.getprofile(), foo) + + + def test_same_object(self): + def foo(*args): + ... + + sys.setprofile(foo) + del foo + sys.setprofile(sys.getprofile()) + + if __name__ == "__main__": unittest.main() |