2003-02-12 19:02:21 -04:00
|
|
|
import imp
|
2006-10-03 20:23:14 -03:00
|
|
|
import unittest
|
|
|
|
from test import test_support
|
2003-02-12 19:02:21 -04:00
|
|
|
|
2013-12-10 16:09:20 -04:00
|
|
|
try:
|
|
|
|
import thread
|
|
|
|
except ImportError:
|
|
|
|
thread = None
|
2003-02-12 19:02:21 -04:00
|
|
|
|
2013-12-10 16:09:20 -04:00
|
|
|
@unittest.skipUnless(thread, 'threading not available')
|
2006-10-03 20:23:14 -03:00
|
|
|
class LockTests(unittest.TestCase):
|
2003-04-26 11:31:24 -03:00
|
|
|
|
2006-10-03 20:23:14 -03:00
|
|
|
"""Very basic test of import lock functions."""
|
2003-04-26 11:31:24 -03:00
|
|
|
|
2006-10-03 20:23:14 -03:00
|
|
|
def verify_lock_state(self, expected):
|
2009-06-30 19:57:08 -03:00
|
|
|
self.assertEqual(imp.lock_held(), expected,
|
2006-10-03 20:23:14 -03:00
|
|
|
"expected imp.lock_held() to be %r" % expected)
|
|
|
|
def testLock(self):
|
|
|
|
LOOPS = 50
|
2003-02-12 19:02:21 -04:00
|
|
|
|
2006-10-03 20:23:14 -03:00
|
|
|
# The import lock may already be held, e.g. if the test suite is run
|
|
|
|
# via "import test.autotest".
|
|
|
|
lock_held_at_start = imp.lock_held()
|
|
|
|
self.verify_lock_state(lock_held_at_start)
|
2003-04-26 11:31:24 -03:00
|
|
|
|
2006-10-03 20:23:14 -03:00
|
|
|
for i in range(LOOPS):
|
|
|
|
imp.acquire_lock()
|
|
|
|
self.verify_lock_state(True)
|
2003-04-26 11:31:24 -03:00
|
|
|
|
2006-10-03 20:23:14 -03:00
|
|
|
for i in range(LOOPS):
|
2003-04-26 11:31:24 -03:00
|
|
|
imp.release_lock()
|
2006-10-03 20:23:14 -03:00
|
|
|
|
|
|
|
# The original state should be restored now.
|
|
|
|
self.verify_lock_state(lock_held_at_start)
|
|
|
|
|
|
|
|
if not lock_held_at_start:
|
|
|
|
try:
|
|
|
|
imp.release_lock()
|
|
|
|
except RuntimeError:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
self.fail("release_lock() without lock should raise "
|
|
|
|
"RuntimeError")
|
2003-02-12 19:02:21 -04:00
|
|
|
|
2008-08-06 19:28:09 -03:00
|
|
|
class ReloadTests(unittest.TestCase):
|
|
|
|
|
|
|
|
"""Very basic tests to make sure that imp.reload() operates just like
|
|
|
|
reload()."""
|
|
|
|
|
|
|
|
def test_source(self):
|
2009-10-18 02:38:48 -03:00
|
|
|
# XXX (ncoghlan): It would be nice to use test_support.CleanImport
|
|
|
|
# here, but that breaks because the os module registers some
|
|
|
|
# handlers in copy_reg on import. Since CleanImport doesn't
|
|
|
|
# revert that registration, the module is left in a broken
|
|
|
|
# state after reversion. Reinitialising the module contents
|
|
|
|
# and just reverting os.environ to its previous state is an OK
|
|
|
|
# workaround
|
|
|
|
with test_support.EnvironmentVarGuard():
|
2009-10-17 12:57:42 -03:00
|
|
|
import os
|
|
|
|
imp.reload(os)
|
2008-08-06 19:28:09 -03:00
|
|
|
|
|
|
|
def test_extension(self):
|
2009-10-17 12:57:42 -03:00
|
|
|
with test_support.CleanImport('time'):
|
|
|
|
import time
|
|
|
|
imp.reload(time)
|
2008-08-06 19:28:09 -03:00
|
|
|
|
|
|
|
def test_builtin(self):
|
2009-10-17 12:57:42 -03:00
|
|
|
with test_support.CleanImport('marshal'):
|
|
|
|
import marshal
|
|
|
|
imp.reload(marshal)
|
2008-08-06 19:28:09 -03:00
|
|
|
|
|
|
|
|
2003-02-17 10:51:41 -04:00
|
|
|
def test_main():
|
2008-09-08 20:38:42 -03:00
|
|
|
tests = [
|
|
|
|
ReloadTests,
|
2013-12-10 16:09:20 -04:00
|
|
|
LockTests,
|
2008-09-08 20:38:42 -03:00
|
|
|
]
|
|
|
|
test_support.run_unittest(*tests)
|
2003-02-17 10:51:41 -04:00
|
|
|
|
2003-02-12 19:02:21 -04:00
|
|
|
if __name__ == "__main__":
|
2003-02-17 10:51:41 -04:00
|
|
|
test_main()
|