|  | # Run the _testcapi module tests (tests for the Python/C API):  by defn, | 
|  | # these are all functions _testcapi exports whose name begins with 'test_'. | 
|  |  | 
|  | import sys | 
|  | from test import test_support | 
|  | import _testcapi | 
|  |  | 
|  | for name in dir(_testcapi): | 
|  | if name.startswith('test_'): | 
|  | test = getattr(_testcapi, name) | 
|  | if test_support.verbose: | 
|  | print "internal", name | 
|  | try: | 
|  | test() | 
|  | except _testcapi.error: | 
|  | raise test_support.TestFailed, sys.exc_info()[1] | 
|  |  | 
|  | # some extra thread-state tests driven via _testcapi | 
|  | def TestThreadState(): | 
|  | import thread | 
|  | import time | 
|  |  | 
|  | if test_support.verbose: | 
|  | print "auto-thread-state" | 
|  |  | 
|  | idents = [] | 
|  |  | 
|  | def callback(): | 
|  | idents.append(thread.get_ident()) | 
|  |  | 
|  | _testcapi._test_thread_state(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" | 
|  |  | 
|  | try: | 
|  | _testcapi._test_thread_state | 
|  | have_thread_state = True | 
|  | except AttributeError: | 
|  | have_thread_state = False | 
|  |  | 
|  | if have_thread_state: | 
|  | TestThreadState() |