Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6a57dd8

Browse files
committed
Issue #16803: Have test_importlib.test_locks use frozen and source
code.
1 parent baced56 commit 6a57dd8

1 file changed

Lines changed: 48 additions & 21 deletions

File tree

Lib/test/test_importlib/test_locks.py

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
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+
26
import sys
37
import time
48
import unittest
@@ -13,14 +17,9 @@
1317
else:
1418
from test import lock_tests
1519

16-
17-
LockType = _bootstrap._ModuleLock
18-
DeadlockError = _bootstrap._DeadlockError
19-
20-
2120
if 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+
3742
else:
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
122146
def 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

128155
if __name__ == '__main__':

0 commit comments

Comments
 (0)