From d5a1a21a89aab37cb41ce58a5f5da3590c55df86 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 17 Jun 2012 23:18:07 +0200 Subject: Prevent test_inspect from keeping alive a ton of frames and local variables by way of a global variable keeping a reference to a traceback. Should fix some buildbot failures. --- Lib/importlib/test/test_locks.py | 2 +- Lib/test/test_inspect.py | 27 +++++++++++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Lib/importlib/test/test_locks.py b/Lib/importlib/test/test_locks.py index 35a72d4..7faff49 100644 --- a/Lib/importlib/test/test_locks.py +++ b/Lib/importlib/test/test_locks.py @@ -101,7 +101,7 @@ class LifetimeTests(unittest.TestCase): def test_all_locks(self): support.gc_collect() - self.assertEqual(0, len(_bootstrap._module_locks)) + self.assertEqual(0, len(_bootstrap._module_locks), _bootstrap._module_locks) @support.reap_threads diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index d840bbe..802e100 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -41,11 +41,6 @@ def revise(filename, *args): import builtins -try: - 1/0 -except: - tb = sys.exc_info()[2] - git = mod.StupidGit() class IsTestBase(unittest.TestCase): @@ -79,23 +74,31 @@ class TestPredicates(IsTestBase): def test_excluding_predicates(self): + global tb self.istest(inspect.isbuiltin, 'sys.exit') self.istest(inspect.isbuiltin, '[].append') self.istest(inspect.iscode, 'mod.spam.__code__') - self.istest(inspect.isframe, 'tb.tb_frame') + try: + 1/0 + except: + tb = sys.exc_info()[2] + self.istest(inspect.isframe, 'tb.tb_frame') + self.istest(inspect.istraceback, 'tb') + if hasattr(types, 'GetSetDescriptorType'): + self.istest(inspect.isgetsetdescriptor, + 'type(tb.tb_frame).f_locals') + else: + self.assertFalse(inspect.isgetsetdescriptor(type(tb.tb_frame).f_locals)) + finally: + # Clear traceback and all the frames and local variables hanging to it. + tb = None self.istest(inspect.isfunction, 'mod.spam') self.istest(inspect.isfunction, 'mod.StupidGit.abuse') self.istest(inspect.ismethod, 'git.argue') self.istest(inspect.ismodule, 'mod') - self.istest(inspect.istraceback, 'tb') self.istest(inspect.isdatadescriptor, 'collections.defaultdict.default_factory') self.istest(inspect.isgenerator, '(x for x in range(2))') self.istest(inspect.isgeneratorfunction, 'generator_function_example') - if hasattr(types, 'GetSetDescriptorType'): - self.istest(inspect.isgetsetdescriptor, - 'type(tb.tb_frame).f_locals') - else: - self.assertFalse(inspect.isgetsetdescriptor(type(tb.tb_frame).f_locals)) if hasattr(types, 'MemberDescriptorType'): self.istest(inspect.ismemberdescriptor, 'datetime.timedelta.days') else: -- cgit v0.12