blob: f7d5b9204d7a8efbd30f567179cefb3bdf577ede [file] [log] [blame]
# Copyright (c) The PyAMF Project.
# See LICENSE.txt for details.
"""
Tests pyamf.util.imports
@since: 0.3.1
"""
import unittest
import sys
import os.path
from pyamf.util import imports
class InstalledTestCase(unittest.TestCase):
"""
Tests to ensure that L{imports.finder} is installed in L{sys.meta_path}
"""
def test_installed(self):
f = imports.finder
self.assertTrue(f in sys.meta_path)
self.assertIdentical(sys.meta_path[0], f)
class ImportsTestCase(unittest.TestCase):
def setUp(self):
self.finder = imports.finder
self._state = self.finder.__getstate__()
path = os.path.join(os.path.dirname(__file__), 'imports')
sys.path.insert(0, path)
def tearDown(self):
self.finder.__setstate__(self._state)
del sys.path[0]
self._clearModules('spam')
def _clearModules(self, *args):
for mod in args:
for k, v in sys.modules.copy().iteritems():
if k.startswith(mod) or k == 'pyamf.tests.%s' % (mod,):
del sys.modules[k]
class WhenImportedTestCase(ImportsTestCase):
"""
Tests for L{imports.when_imported}
"""
def setUp(self):
ImportsTestCase.setUp(self)
self.executed = False
def _hook(self, module):
self.executed = True
def _check_module(self, mod):
name = mod.__name__
self.assertTrue(name in sys.modules)
self.assertIdentical(sys.modules[name], mod)
def test_import(self):
imports.when_imported('spam', self._hook)
self.assertFalse(self.executed)
import spam
self._check_module(spam)
self.assertTrue(self.executed)
def test_already_imported(self):
import spam
self.assertFalse(self.executed)
imports.when_imported('spam', self._hook)
self._check_module(spam)
self.assertTrue(self.executed)
def test_failed_hook(self):
def h(mod):
raise RuntimeError
imports.when_imported('spam', h)
try:
import spam
except Exception, e:
pass
else:
self.fail('expected exception')
self.assertFalse('spam' in self.finder.loaded_modules)
self.assertEqual(e.__class__, RuntimeError)