-
-
Notifications
You must be signed in to change notification settings - Fork 77
/
test_integration.py
68 lines (55 loc) · 1.99 KB
/
test_integration.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import unittest
import packaging.requirements
import packaging.version
from . import fixtures
from importlib_metadata import (
Distribution,
MetadataPathFinder,
_compat,
distributions,
version,
)
class IntegrationTests(fixtures.DistInfoPkg, unittest.TestCase):
def test_package_spec_installed(self):
"""
Illustrate the recommended procedure to determine if
a specified version of a package is installed.
"""
def is_installed(package_spec):
req = packaging.requirements.Requirement(package_spec)
return version(req.name) in req.specifier
assert is_installed('distinfo-pkg==1.0')
assert is_installed('distinfo-pkg>=1.0,<2.0')
assert not is_installed('distinfo-pkg<1.0')
class FinderTests(fixtures.Fixtures, unittest.TestCase):
def test_finder_without_module(self):
class ModuleFreeFinder(fixtures.NullFinder):
"""
A finder without an __module__ attribute
"""
def __getattribute__(self, name):
if name == '__module__':
raise AttributeError(name)
return super().__getattribute__(name)
self.fixtures.enter_context(fixtures.install_finder(ModuleFreeFinder()))
_compat.disable_stdlib_finder()
class DistSearch(unittest.TestCase):
def test_search_dist_dirs(self):
"""
Pip needs the _search_paths interface to locate
distribution metadata dirs. Protect it for PyPA
use-cases (only). Ref python/importlib_metadata#111.
"""
res = MetadataPathFinder._search_paths('any-name', [])
assert list(res) == []
def test_interleaved_discovery(self):
"""
When the search is cached, it is
possible for searches to be interleaved, so make sure
those use-cases are safe.
Ref #293
"""
dists = distributions()
next(dists)
version('importlib_metadata')
next(dists)