1- from importlib import _bootstrap
1+ from . import util
2+ frozen_init , source_init = util .import_importlib ('importlib' )
3+ frozen_bootstrap = frozen_init ._bootstrap
4+ source_bootstrap = source_init ._bootstrap
5+
26import sys
37import time
48import unittest
1317else :
1418 from test import lock_tests
1519
16-
17- LockType = _bootstrap ._ModuleLock
18- DeadlockError = _bootstrap ._DeadlockError
19-
20-
2120if threading is not None :
2221 class ModuleLockAsRLockTests (lock_tests .RLockTests ):
23- locktype = staticmethod (lambda : LockType ("some_lock" ))
22+ locktype = classmethod (lambda cls : cls . LockType ("some_lock" ))
2423
2524 # _is_owned() unsupported
2625 test__is_owned = None
@@ -34,13 +33,21 @@ class ModuleLockAsRLockTests(lock_tests.RLockTests):
3433 # _release_save() unsupported
3534 test_release_save_unacquired = None
3635
36+ class Frozen_ModuleLockAsRLockTests (ModuleLockAsRLockTests , lock_tests .RLockTests ):
37+ LockType = frozen_bootstrap ._ModuleLock
38+
39+ class Source_ModuleLockAsRLockTests (ModuleLockAsRLockTests , lock_tests .RLockTests ):
40+ LockType = source_bootstrap ._ModuleLock
41+
3742else :
38- class ModuleLockAsRLockTests (unittest .TestCase ):
43+ class Frozen_ModuleLockAsRLockTests (unittest .TestCase ):
3944 pass
4045
46+ class Source_ModuleLockAsRLockTests (unittest .TestCase ):
47+ pass
4148
42- @ unittest . skipUnless ( threading , "threads needed for this test" )
43- class DeadlockAvoidanceTests ( unittest . TestCase ) :
49+
50+ class DeadlockAvoidanceTests :
4451
4552 def setUp (self ):
4653 try :
@@ -55,7 +62,7 @@ def tearDown(self):
5562
5663 def run_deadlock_avoidance_test (self , create_deadlock ):
5764 NLOCKS = 10
58- locks = [LockType (str (i )) for i in range (NLOCKS )]
65+ locks = [self . LockType (str (i )) for i in range (NLOCKS )]
5966 pairs = [(locks [i ], locks [(i + 1 )% NLOCKS ]) for i in range (NLOCKS )]
6067 if create_deadlock :
6168 NTHREADS = NLOCKS
@@ -67,7 +74,7 @@ def _acquire(lock):
6774 """Try to acquire the lock. Return True on success, False on deadlock."""
6875 try :
6976 lock .acquire ()
70- except DeadlockError :
77+ except self . DeadlockError :
7178 return False
7279 else :
7380 return True
@@ -99,30 +106,50 @@ def test_no_deadlock(self):
99106 self .assertEqual (results .count ((True , False )), 0 )
100107 self .assertEqual (results .count ((True , True )), len (results ))
101108
109+ @unittest .skipUnless (threading , "threads needed for this test" )
110+ class Frozen_DeadlockAvoidanceTests (DeadlockAvoidanceTests , unittest .TestCase ):
111+ LockType = frozen_bootstrap ._ModuleLock
112+ DeadlockError = frozen_bootstrap ._DeadlockError
113+
114+ @unittest .skipUnless (threading , "threads needed for this test" )
115+ class Source_DeadlockAvoidanceTests (DeadlockAvoidanceTests , unittest .TestCase ):
116+ LockType = source_bootstrap ._ModuleLock
117+ DeadlockError = source_bootstrap ._DeadlockError
102118
103- class LifetimeTests (unittest .TestCase ):
119+
120+ class LifetimeTests :
104121
105122 def test_lock_lifetime (self ):
106123 name = "xyzzy"
107- self .assertNotIn (name , _bootstrap ._module_locks )
108- lock = _bootstrap ._get_module_lock (name )
109- self .assertIn (name , _bootstrap ._module_locks )
124+ self .assertNotIn (name , self . bootstrap ._module_locks )
125+ lock = self . bootstrap ._get_module_lock (name )
126+ self .assertIn (name , self . bootstrap ._module_locks )
110127 wr = weakref .ref (lock )
111128 del lock
112129 support .gc_collect ()
113- self .assertNotIn (name , _bootstrap ._module_locks )
130+ self .assertNotIn (name , self . bootstrap ._module_locks )
114131 self .assertIsNone (wr ())
115132
116133 def test_all_locks (self ):
117134 support .gc_collect ()
118- self .assertEqual (0 , len (_bootstrap ._module_locks ), _bootstrap ._module_locks )
135+ self .assertEqual (0 , len (self .bootstrap ._module_locks ),
136+ self .bootstrap ._module_locks )
137+
138+ class Frozen_LifetimeTests (LifetimeTests , unittest .TestCase ):
139+ bootstrap = frozen_bootstrap
140+
141+ class Source_LifetimeTests (LifetimeTests , unittest .TestCase ):
142+ bootstrap = source_bootstrap
119143
120144
121145@support .reap_threads
122146def test_main ():
123- support .run_unittest (ModuleLockAsRLockTests ,
124- DeadlockAvoidanceTests ,
125- LifetimeTests )
147+ support .run_unittest (Frozen_ModuleLockAsRLockTests ,
148+ Source_ModuleLockAsRLockTests ,
149+ Frozen_DeadlockAvoidanceTests ,
150+ Source_DeadlockAvoidanceTests ,
151+ Frozen_LifetimeTests ,
152+ Source_LifetimeTests )
126153
127154
128155if __name__ == '__main__' :
0 commit comments