summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorŁukasz Langa <lukasz@langa.pl>2016-06-12 01:02:46 (GMT)
committerŁukasz Langa <lukasz@langa.pl>2016-06-12 01:02:46 (GMT)
commit0d18c15fbf4365764e61017c1ccb6cecc49edf84 (patch)
tree59b88a6e64d830b5c501ef867a0f84f0f65f9128 /Lib/test
parente7f27481a895fb73408e523202345fcd9355b00c (diff)
downloadcpython-0d18c15fbf4365764e61017c1ccb6cecc49edf84.zip
cpython-0d18c15fbf4365764e61017c1ccb6cecc49edf84.tar.gz
cpython-0d18c15fbf4365764e61017c1ccb6cecc49edf84.tar.bz2
Issue #14209: pkgutil.iter_zipimport_modules ignores the prefix for packages
Patch by James Pickering.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_pkgutil.py82
1 files changed, 79 insertions, 3 deletions
diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py
index 57ebf1f..9d20354 100644
--- a/Lib/test/test_pkgutil.py
+++ b/Lib/test/test_pkgutil.py
@@ -7,7 +7,6 @@ import pkgutil
import os
import os.path
import tempfile
-import types
import shutil
import zipfile
@@ -101,6 +100,83 @@ class PkgutilTests(unittest.TestCase):
for t in pkgutil.walk_packages(path=[self.dirname]):
self.fail("unexpected package found")
+ def test_walkpackages_filesys(self):
+ pkg1 = 'test_walkpackages_filesys'
+ pkg1_dir = os.path.join(self.dirname, pkg1)
+ os.mkdir(pkg1_dir)
+ f = open(os.path.join(pkg1_dir, '__init__.py'), "wb")
+ f.close()
+ os.mkdir(os.path.join(pkg1_dir, 'sub'))
+ f = open(os.path.join(pkg1_dir, 'sub', '__init__.py'), "wb")
+ f.close()
+ f = open(os.path.join(pkg1_dir, 'sub', 'mod.py'), "wb")
+ f.close()
+
+ # Now, to juice it up, let's add the opposite packages, too.
+ pkg2 = 'sub'
+ pkg2_dir = os.path.join(self.dirname, pkg2)
+ os.mkdir(pkg2_dir)
+ f = open(os.path.join(pkg2_dir, '__init__.py'), "wb")
+ f.close()
+ os.mkdir(os.path.join(pkg2_dir, 'test_walkpackages_filesys'))
+ f = open(os.path.join(pkg2_dir, 'test_walkpackages_filesys', '__init__.py'), "wb")
+ f.close()
+ f = open(os.path.join(pkg2_dir, 'test_walkpackages_filesys', 'mod.py'), "wb")
+ f.close()
+
+ expected = [
+ 'sub',
+ 'sub.test_walkpackages_filesys',
+ 'sub.test_walkpackages_filesys.mod',
+ 'test_walkpackages_filesys',
+ 'test_walkpackages_filesys.sub',
+ 'test_walkpackages_filesys.sub.mod',
+ ]
+ actual= [e[1] for e in pkgutil.walk_packages([self.dirname])]
+ self.assertEqual(actual, expected)
+
+ for pkg in expected:
+ if pkg.endswith('mod'):
+ continue
+ del sys.modules[pkg]
+
+ def test_walkpackages_zipfile(self):
+ """Tests the same as test_walkpackages_filesys, only with a zip file."""
+
+ zip = 'test_walkpackages_zipfile.zip'
+ pkg1 = 'test_walkpackages_zipfile'
+ pkg2 = 'sub'
+
+ zip_file = os.path.join(self.dirname, zip)
+ z = zipfile.ZipFile(zip_file, 'w')
+ z.writestr(pkg2 + '/__init__.py', "")
+ z.writestr(pkg2 + '/' + pkg1 + '/__init__.py', "")
+ z.writestr(pkg2 + '/' + pkg1 + '/mod.py', "")
+ z.writestr(pkg1 + '/__init__.py', "")
+ z.writestr(pkg1 + '/' + pkg2 + '/__init__.py', "")
+ z.writestr(pkg1 + '/' + pkg2 + '/mod.py', "")
+ z.close()
+
+ sys.path.insert(0, zip_file)
+ expected = [
+ 'sub',
+ 'sub.test_walkpackages_zipfile',
+ 'sub.test_walkpackages_zipfile.mod',
+ 'test_walkpackages_zipfile',
+ 'test_walkpackages_zipfile.sub',
+ 'test_walkpackages_zipfile.sub.mod',
+ ]
+ actual= [e[1] for e in pkgutil.walk_packages([zip_file])]
+ self.assertEqual(actual, expected)
+ del sys.path[0]
+
+ for pkg in expected:
+ if pkg.endswith('mod'):
+ continue
+ del sys.modules[pkg]
+
+
+
class PkgutilPEP302Tests(unittest.TestCase):
class MyTestLoader(object):
@@ -324,11 +400,11 @@ class ImportlibMigrationTests(unittest.TestCase):
def test_importer_deprecated(self):
with self.check_deprecated():
- x = pkgutil.ImpImporter("")
+ pkgutil.ImpImporter("")
def test_loader_deprecated(self):
with self.check_deprecated():
- x = pkgutil.ImpLoader("", "", "", "")
+ pkgutil.ImpLoader("", "", "", "")
def test_get_loader_avoids_emulation(self):
with check_warnings() as w: