4 from nose.importer import Importer
7 class TestImporter(unittest.TestCase):
10 self.dir = os.path.normpath(os.path.join(os.path.dirname(__file__),
13 self._mods = sys.modules.copy()
14 self._path = sys.path[:]
15 sys.modules.pop('mod', None)
16 sys.modules.pop('pak', None)
17 sys.modules.pop('pak.mod', None)
18 sys.modules.pop('pak.sub', None)
21 to_del = [ m for m in sys.modules.keys() if
26 sys.modules.update(self._mods)
27 sys.path = self._path[:]
29 def test_import_from_dir(self):
32 d1 = os.path.join(self.dir, 'dir1')
33 d2 = os.path.join(self.dir, 'dir2')
36 m1 = imp.importFromDir(d1, 'mod')
37 m2 = imp.importFromDir(d2, 'mod')
38 self.assertNotEqual(m1, m2)
39 self.assertNotEqual(m1.__file__, m2.__file__)
42 p1 = imp.importFromDir(d1, 'pak.mod')
43 p2 = imp.importFromDir(d2, 'pak.mod')
44 self.assertNotEqual(p1, p2)
45 self.assertNotEqual(p1.__file__, p2.__file__)
47 def test_import_from_path(self):
51 d1 = jn(self.dir, 'dir1')
52 d2 = jn(self.dir, 'dir2')
55 m1 = imp.importFromPath(jn(d1, 'mod.py'), 'mod')
56 m2 = imp.importFromPath(jn(d2, 'mod.py'), 'mod')
57 self.assertNotEqual(m1, m2)
58 self.assertNotEqual(m1.__file__, m2.__file__)
61 p1 = imp.importFromPath(jn(d1, 'pak', 'mod.py'), 'pak.mod')
62 p2 = imp.importFromPath(jn(d2, 'pak', 'mod.py'), 'pak.mod')
63 self.assertNotEqual(p1, p2)
64 self.assertNotEqual(p1.__file__, p2.__file__)
66 # simple name -- package
67 sp1 = imp.importFromPath(jn(d1, 'pak'), 'pak')
68 sp2 = imp.importFromPath(jn(d2, 'pak'), 'pak')
69 self.assertNotEqual(sp1, sp2)
72 self.assertNotEqual(sp1.__path__, sp2.__path__)
74 # dotted name -- package
75 dp1 = imp.importFromPath(jn(d1, 'pak', 'sub'), 'pak.sub')
76 dp2 = imp.importFromPath(jn(d2, 'pak', 'sub'), 'pak.sub')
77 self.assertNotEqual(dp1, dp2)
80 self.assertNotEqual(dp1.__path__, dp2.__path__)
82 def test_import_sets_intermediate_modules(self):
84 path = os.path.join(self.dir,
85 'package2', 'test_pak', 'test_sub', 'test_mod.py')
86 mod = imp.importFromPath(path, 'test_pak.test_sub.test_mod')
88 assert 'test_pak' in sys.modules, 'test_pak was not imported?'
89 test_pak = sys.modules['test_pak']
90 assert hasattr(test_pak, 'test_sub'), "test_pak.test_sub was not set"
92 def test_cached_no_reload(self):
94 d1 = os.path.join(self.dir, 'dir1')
95 m1 = imp.importFromDir(d1, 'mod')
96 m2 = imp.importFromDir(d1, 'mod')
97 assert m1 is m2, "%s is not %s" % (m1, m2)
99 def test_cached_no_reload_dotted(self):
101 d1 = os.path.join(self.dir, 'dir1')
102 p1 = imp.importFromDir(d1, 'pak.mod')
103 p2 = imp.importFromDir(d1, 'pak.mod')
104 assert p1 is p2, "%s is not %s" % (p1, p2)
106 def test_import_sets_sys_modules(self):
108 d1 = os.path.join(self.dir, 'dir1')
109 p1 = imp.importFromDir(d1, 'pak.mod')
110 assert sys.modules['pak.mod'] is p1, "pak.mod not in sys.modules"
111 assert sys.modules['pak'], "pak not in sys.modules"
112 assert sys.modules['pak'].mod is p1, \
113 "sys.modules['pak'].mod is not the module we loaded"
115 def test_failed_import_raises_import_error(self):
118 imp.importFromPath(self.dir, 'no.such.module')
119 self.assertRaises(ImportError, bad_import)
121 def test_sys_modules_same_path_no_reload(self):
124 d1 = os.path.join(self.dir, 'dir1')
125 d2 = os.path.join(self.dir, 'dir2')
126 sys.path.insert(0, d1)
127 mod_sys_imported = __import__('mod')
128 mod_nose_imported = imp.importFromDir(d1, 'mod')
129 assert mod_nose_imported is mod_sys_imported, \
130 "nose reimported a module in sys.modules from the same path"
132 mod_nose_imported2 = imp.importFromDir(d2, 'mod')
133 assert mod_nose_imported2 != mod_sys_imported, \
134 "nose failed to reimport same name, different dir"
136 def test_import_pkg_from_path_fpw(self):
138 imp.config.firstPackageWins = True
140 d1 = jn(self.dir, 'dir1')
141 d2 = jn(self.dir, 'dir2')
144 p1 = imp.importFromPath(jn(d1, 'pak', 'mod.py'), 'pak.mod')
145 p2 = imp.importFromPath(jn(d2, 'pak', 'mod.py'), 'pak.mod')
146 self.assertEqual(p1, p2)
147 self.assertEqual(p1.__file__, p2.__file__)
149 # simple name -- package
150 sp1 = imp.importFromPath(jn(d1, 'pak'), 'pak')
151 sp2 = imp.importFromPath(jn(d2, 'pak'), 'pak')
152 self.assertEqual(sp1, sp2)
155 self.assertEqual(sp1.__path__, sp2.__path__)
157 # dotted name -- package
158 dp1 = imp.importFromPath(jn(d1, 'pak', 'sub'), 'pak.sub')
159 dp2 = imp.importFromPath(jn(d2, 'pak', 'sub'), 'pak.sub')
160 self.assertEqual(dp1, dp2)
163 self.assertEqual(dp1.__path__, dp2.__path__)
165 if __name__ == '__main__':
167 logging.basicConfig(level=logging.DEBUG)