Skip to content

Commit a156b85

Browse files
committed
Extract tests for Python 3.9 compatibility into their own file
1 parent 9333ab5 commit a156b85

File tree

2 files changed

+74
-65
lines changed

2 files changed

+74
-65
lines changed

tests/test_integration.py

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
from importlib_metadata import (
99
MetadataPathFinder,
1010
_compat,
11-
distribution,
1211
distributions,
13-
entry_points,
14-
metadata,
1512
version,
1613
)
1714

@@ -48,68 +45,6 @@ def __getattribute__(self, name):
4845
_compat.disable_stdlib_finder()
4946

5047

51-
class OldStdlibFinderTests(fixtures.DistInfoPkgOffPath, unittest.TestCase):
52-
def setUp(self):
53-
python_version = sys.version_info[:2]
54-
if python_version < (3, 8) or python_version > (3, 9):
55-
self.skipTest("Tests specific for Python 3.8/3.9")
56-
super().setUp()
57-
58-
def _meta_path_finder(self):
59-
from importlib.metadata import (
60-
Distribution,
61-
DistributionFinder,
62-
PathDistribution,
63-
)
64-
from importlib.util import spec_from_file_location
65-
66-
path = pathlib.Path(self.site_dir)
67-
68-
class CustomDistribution(Distribution):
69-
def __init__(self, name, path):
70-
self.name = name
71-
self._path_distribution = PathDistribution(path)
72-
73-
def read_text(self, filename):
74-
return self._path_distribution.read_text(filename)
75-
76-
def locate_file(self, path):
77-
return self._path_distribution.locate_file(path)
78-
79-
class CustomFinder:
80-
@classmethod
81-
def find_spec(cls, fullname, _path=None, _target=None):
82-
candidate = pathlib.Path(path, *fullname.split(".")).with_suffix(".py")
83-
if candidate.exists():
84-
return spec_from_file_location(fullname, candidate)
85-
86-
@classmethod
87-
def find_distributions(self, context=DistributionFinder.Context()):
88-
for dist_info in path.glob("*.dist-info"):
89-
yield PathDistribution(dist_info)
90-
name, _, _ = str(dist_info).partition("-")
91-
yield CustomDistribution(name + "_custom", dist_info)
92-
93-
return CustomFinder
94-
95-
def test_compatibility_with_old_stdlib_path_distribution(self):
96-
"""
97-
Given a custom finder that uses Python 3.8/3.9 importlib.metadata is installed,
98-
when importlib_metadata functions are called, there should be no exceptions.
99-
Ref python/importlib_metadata#396.
100-
"""
101-
self.fixtures.enter_context(fixtures.install_finder(self._meta_path_finder()))
102-
103-
assert list(distributions())
104-
assert distribution("distinfo_pkg")
105-
assert distribution("distinfo_pkg_custom")
106-
assert version("distinfo_pkg") > "0"
107-
assert version("distinfo_pkg_custom") > "0"
108-
assert list(metadata("distinfo_pkg"))
109-
assert list(metadata("distinfo_pkg_custom"))
110-
assert list(entry_points(group="entries"))
111-
112-
11348
class DistSearch(unittest.TestCase):
11449
def test_search_dist_dirs(self):
11550
"""

tests/test_py39compat.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import sys
2+
import unittest
3+
import pathlib
4+
5+
from . import fixtures
6+
from importlib_metadata import (
7+
distribution,
8+
distributions,
9+
entry_points,
10+
metadata,
11+
version,
12+
)
13+
14+
15+
class OldStdlibFinderTests(fixtures.DistInfoPkgOffPath, unittest.TestCase):
16+
def setUp(self):
17+
python_version = sys.version_info[:2]
18+
if python_version < (3, 8) or python_version > (3, 9):
19+
self.skipTest("Tests specific for Python 3.8/3.9")
20+
super().setUp()
21+
22+
def _meta_path_finder(self):
23+
from importlib.metadata import (
24+
Distribution,
25+
DistributionFinder,
26+
PathDistribution,
27+
)
28+
from importlib.util import spec_from_file_location
29+
30+
path = pathlib.Path(self.site_dir)
31+
32+
class CustomDistribution(Distribution):
33+
def __init__(self, name, path):
34+
self.name = name
35+
self._path_distribution = PathDistribution(path)
36+
37+
def read_text(self, filename):
38+
return self._path_distribution.read_text(filename)
39+
40+
def locate_file(self, path):
41+
return self._path_distribution.locate_file(path)
42+
43+
class CustomFinder:
44+
@classmethod
45+
def find_spec(cls, fullname, _path=None, _target=None):
46+
candidate = pathlib.Path(path, *fullname.split(".")).with_suffix(".py")
47+
if candidate.exists():
48+
return spec_from_file_location(fullname, candidate)
49+
50+
@classmethod
51+
def find_distributions(self, context=DistributionFinder.Context()):
52+
for dist_info in path.glob("*.dist-info"):
53+
yield PathDistribution(dist_info)
54+
name, _, _ = str(dist_info).partition("-")
55+
yield CustomDistribution(name + "_custom", dist_info)
56+
57+
return CustomFinder
58+
59+
def test_compatibility_with_old_stdlib_path_distribution(self):
60+
"""
61+
Given a custom finder that uses Python 3.8/3.9 importlib.metadata is installed,
62+
when importlib_metadata functions are called, there should be no exceptions.
63+
Ref python/importlib_metadata#396.
64+
"""
65+
self.fixtures.enter_context(fixtures.install_finder(self._meta_path_finder()))
66+
67+
assert list(distributions())
68+
assert distribution("distinfo_pkg")
69+
assert distribution("distinfo_pkg_custom")
70+
assert version("distinfo_pkg") > "0"
71+
assert version("distinfo_pkg_custom") > "0"
72+
assert list(metadata("distinfo_pkg"))
73+
assert list(metadata("distinfo_pkg_custom"))
74+
assert list(entry_points(group="entries"))

0 commit comments

Comments
 (0)