]> granicus.if.org Git - python/commitdiff
#17249: convert a test in test_capi to use unittest and reap threads.
authorEzio Melotti <ezio.melotti@gmail.com>
Sat, 23 Feb 2013 03:45:37 +0000 (05:45 +0200)
committerEzio Melotti <ezio.melotti@gmail.com>
Sat, 23 Feb 2013 03:45:37 +0000 (05:45 +0200)
Lib/test/test_capi.py
Misc/NEWS

index 7dec2de655fba6f5bbd9c4f2b215aec170e51349..daeae393cac68b7267d460c0f147a81f8bc613d8 100644 (file)
@@ -4,6 +4,7 @@
 from __future__ import with_statement
 import sys
 import time
+import thread
 import random
 import unittest
 from test import test_support
@@ -96,8 +97,32 @@ class TestPendingCalls(unittest.TestCase):
         self.pendingcalls_wait(l, n)
 
 
-def test_main():
+@unittest.skipUnless(threading, 'Threading required for this test.')
+class TestThreadState(unittest.TestCase):
+
+    @test_support.reap_threads
+    def test_thread_state(self):
+        # some extra thread-state tests driven via _testcapi
+        def target():
+            idents = []
+
+            def callback():
+                idents.append(thread.get_ident())
+
+            _testcapi._test_thread_state(callback)
+            a = b = callback
+            time.sleep(1)
+            # Check our main thread is in the list exactly 3 times.
+            self.assertEqual(idents.count(thread.get_ident()), 3,
+                             "Couldn't find main thread correctly in the list")
+
+        target()
+        t = threading.Thread(target=target)
+        t.start()
+        t.join()
+
 
+def test_main():
     for name in dir(_testcapi):
         if name.startswith('test_'):
             test = getattr(_testcapi, name)
@@ -108,33 +133,7 @@ def test_main():
             except _testcapi.error:
                 raise test_support.TestFailed, sys.exc_info()[1]
 
-    # some extra thread-state tests driven via _testcapi
-    def TestThreadState():
-        if test_support.verbose:
-            print "auto-thread-state"
-
-        idents = []
-
-        def callback():
-            idents.append(thread.get_ident())
-
-        _testcapi._test_thread_state(callback)
-        a = b = callback
-        time.sleep(1)
-        # Check our main thread is in the list exactly 3 times.
-        if idents.count(thread.get_ident()) != 3:
-            raise test_support.TestFailed, \
-                  "Couldn't find main thread correctly in the list"
-
-    if threading:
-        import thread
-        import time
-        TestThreadState()
-        t=threading.Thread(target=TestThreadState)
-        t.start()
-        t.join()
-
-    test_support.run_unittest(TestPendingCalls)
+    test_support.run_unittest(TestPendingCalls, TestThreadState)
 
 if __name__ == "__main__":
     test_main()
index 3a2543c0f05424004d217b6d297d14e204e2b29d..58bcf7a59fa4a372e33a09efaadb00674cd22fa4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -798,6 +798,8 @@ Extension Modules
 Tests
 -----
 
+- Issue #17249: convert a test in test_capi to use unittest and reap threads.
+
 - We now run both test_email.py and test_email_renamed.py when running the
   test_email regression test.  test_email_renamed contains some tests that
   test_email does not.