Skip to content

Commit 4b61913

Browse files
committed
Add test to demonstrate issue with symlinked packages
1 parent 11b9ddf commit 4b61913

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

tests/fixtures.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,32 @@ def setUp(self):
169169
build_files(DistInfoPkg.files, self.site_dir)
170170

171171

172+
class DistInfoSymlinkedPkg(OnSysPath, SiteDir):
173+
files: FilesSpec = {
174+
"symlinked_pkg-1.0.0.dist-info": {
175+
"METADATA": """
176+
Name: symlinked-pkg
177+
Version: 1.0.0
178+
""",
179+
"RECORD": "symlinked,,\n",
180+
},
181+
".symlink.target": {
182+
"__init__.py": """
183+
def main():
184+
print("hello world")
185+
""",
186+
},
187+
# "symlinked" -> ".symlink.target", see below
188+
}
189+
190+
def setUp(self):
191+
super().setUp()
192+
build_files(DistInfoSymlinkedPkg.files, self.site_dir)
193+
target = self.site_dir / ".symlink.target"
194+
assert target.is_dir()
195+
(self.site_dir / "symlinked").symlink_to(target, target_is_directory=True)
196+
197+
172198
class EggInfoPkg(OnSysPath, SiteDir):
173199
files: FilesSpec = {
174200
"egginfo_pkg.egg-info": {

tests/test_main.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,32 @@ def test_packages_distributions_all_module_types(self):
387387
assert not any(name.endswith('.dist-info') for name in distributions)
388388

389389

390+
class PackagesDistributionsDistTest(
391+
fixtures.DistInfoPkg,
392+
fixtures.DistInfoSymlinkedPkg,
393+
unittest.TestCase,
394+
):
395+
def test_packages_distributions_on_dist_info(self):
396+
"""
397+
Test _top_level_inferred() on various dist-info packages.
398+
"""
399+
distributions = packages_distributions()
400+
401+
def import_names_from_package(package_name):
402+
return {
403+
import_name
404+
for import_name, package_names in distributions.items()
405+
if package_name in package_names
406+
}
407+
408+
# distinfo-pkg has one import ('mod') inferred from RECORD
409+
assert import_names_from_package('distinfo-pkg') == {'mod'}
410+
411+
# symlinked-pkg has one import ('symlinked') inderred from RECORD which
412+
# references a symlink to the real package dir elsewhere.
413+
assert import_names_from_package('symlinked-pkg') == {'symlinked'}
414+
415+
390416
class PackagesDistributionsEggTest(
391417
fixtures.EggInfoPkg,
392418
fixtures.EggInfoPkgPipInstalledNoToplevel,

0 commit comments

Comments
 (0)