diff options
-rw-r--r-- | Lib/test/test_threading_local.py | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/Lib/test/test_threading_local.py b/Lib/test/test_threading_local.py index 0aaedbc93b..7c2b9f43fe 100644 --- a/Lib/test/test_threading_local.py +++ b/Lib/test/test_threading_local.py @@ -1,9 +1,35 @@ import unittest from doctest import DocTestSuite from test import test_support +import threading +import weakref + +class Weak(object): + pass + +def target(local, weaklist): + weak = Weak() + local.weak = weak + weaklist.append(weakref.ref(weak)) + +class ThreadingLocalTest(unittest.TestCase): + def test_local_refs(self): + local = threading.local() + weaklist = [] + n = 20 + for i in range(n): + t = threading.Thread(target=target, args=(local, weaklist)) + t.start() + t.join() + self.assertEqual(len(weaklist), n) + deadlist = [weak for weak in weaklist if weak() is None] + # XXX threading.local keeps the local of the last stopped thread alive + self.assertEqual(len(deadlist), n-1) def test_main(): - suite = DocTestSuite('_threading_local') + suite = unittest.TestSuite() + suite.addTest(DocTestSuite('_threading_local')) + suite.addTest(unittest.makeSuite(ThreadingLocalTest)) try: from thread import _local |