| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | import re | 
					
						
							|  |  |  | import textwrap | 
					
						
							|  |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  | import warnings | 
					
						
							| 
									
										
										
										
											2021-04-24 10:13:51 -04:00
										 |  |  | import importlib | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  | import contextlib | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-22 21:38:26 -05:00
										 |  |  | from . import fixtures | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | from importlib.metadata import ( | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     Distribution, | 
					
						
							|  |  |  |     PackageNotFoundError, | 
					
						
							|  |  |  |     distribution, | 
					
						
							|  |  |  |     entry_points, | 
					
						
							|  |  |  |     files, | 
					
						
							|  |  |  |     metadata, | 
					
						
							|  |  |  |     requires, | 
					
						
							|  |  |  |     version, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  | @contextlib.contextmanager | 
					
						
							|  |  |  | def suppress_known_deprecation(): | 
					
						
							|  |  |  |     with warnings.catch_warnings(record=True) as ctx: | 
					
						
							| 
									
										
										
										
											2021-12-16 15:49:42 -05:00
										 |  |  |         warnings.simplefilter('default', category=DeprecationWarning) | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  |         yield ctx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | class APITests( | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     fixtures.EggInfoPkg, | 
					
						
							| 
									
										
										
										
											2023-04-20 22:12:48 -04:00
										 |  |  |     fixtures.EggInfoPkgPipInstalledNoToplevel, | 
					
						
							|  |  |  |     fixtures.EggInfoPkgPipInstalledNoModules, | 
					
						
							|  |  |  |     fixtures.EggInfoPkgSourcesFallback, | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     fixtures.DistInfoPkg, | 
					
						
							|  |  |  |     fixtures.DistInfoPkgWithDot, | 
					
						
							|  |  |  |     fixtures.EggInfoFile, | 
					
						
							|  |  |  |     unittest.TestCase, | 
					
						
							|  |  |  | ): | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |     version_pattern = r'\d+\.\d+(\.\d)?' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_retrieves_version_of_self(self): | 
					
						
							|  |  |  |         pkg_version = version('egginfo-pkg') | 
					
						
							|  |  |  |         assert isinstance(pkg_version, str) | 
					
						
							|  |  |  |         assert re.match(self.version_pattern, pkg_version) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_retrieves_version_of_distinfo_pkg(self): | 
					
						
							|  |  |  |         pkg_version = version('distinfo-pkg') | 
					
						
							|  |  |  |         assert isinstance(pkg_version, str) | 
					
						
							|  |  |  |         assert re.match(self.version_pattern, pkg_version) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_for_name_does_not_exist(self): | 
					
						
							|  |  |  |         with self.assertRaises(PackageNotFoundError): | 
					
						
							|  |  |  |             distribution('does-not-exist') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     def test_name_normalization(self): | 
					
						
							|  |  |  |         names = 'pkg.dot', 'pkg_dot', 'pkg-dot', 'pkg..dot', 'Pkg.Dot' | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             with self.subTest(name): | 
					
						
							|  |  |  |                 assert distribution(name).metadata['Name'] == 'pkg.dot' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_prefix_not_matched(self): | 
					
						
							|  |  |  |         prefixes = 'p', 'pkg', 'pkg.' | 
					
						
							|  |  |  |         for prefix in prefixes: | 
					
						
							|  |  |  |             with self.subTest(prefix): | 
					
						
							|  |  |  |                 with self.assertRaises(PackageNotFoundError): | 
					
						
							|  |  |  |                     distribution(prefix) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |     def test_for_top_level(self): | 
					
						
							| 
									
										
										
										
											2023-04-20 22:12:48 -04:00
										 |  |  |         tests = [ | 
					
						
							|  |  |  |             ('egginfo-pkg', 'mod'), | 
					
						
							|  |  |  |             ('egg_with_no_modules-pkg', ''), | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         for pkg_name, expect_content in tests: | 
					
						
							|  |  |  |             with self.subTest(pkg_name): | 
					
						
							|  |  |  |                 self.assertEqual( | 
					
						
							|  |  |  |                     distribution(pkg_name).read_text('top_level.txt').strip(), | 
					
						
							|  |  |  |                     expect_content, | 
					
						
							|  |  |  |                 ) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_read_text(self): | 
					
						
							| 
									
										
										
										
											2023-04-20 22:12:48 -04:00
										 |  |  |         tests = [ | 
					
						
							|  |  |  |             ('egginfo-pkg', 'mod\n'), | 
					
						
							|  |  |  |             ('egg_with_no_modules-pkg', '\n'), | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2023-04-22 13:52:51 -04:00
										 |  |  |         for pkg_name, expect_content in tests: | 
					
						
							| 
									
										
										
										
											2023-04-20 22:12:48 -04:00
										 |  |  |             with self.subTest(pkg_name): | 
					
						
							|  |  |  |                 top_level = [ | 
					
						
							|  |  |  |                     path for path in files(pkg_name) if path.name == 'top_level.txt' | 
					
						
							|  |  |  |                 ][0] | 
					
						
							|  |  |  |                 self.assertEqual(top_level.read_text(), expect_content) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points(self): | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |         eps = entry_points() | 
					
						
							|  |  |  |         assert 'entries' in eps.groups | 
					
						
							|  |  |  |         entries = eps.select(group='entries') | 
					
						
							|  |  |  |         assert 'main' in entries.names | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         ep = entries['main'] | 
					
						
							|  |  |  |         self.assertEqual(ep.value, 'mod:main') | 
					
						
							|  |  |  |         self.assertEqual(ep.extras, []) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     def test_entry_points_distribution(self): | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |         entries = entry_points(group='entries') | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         for entry in ("main", "ns:sub"): | 
					
						
							|  |  |  |             ep = entries[entry] | 
					
						
							|  |  |  |             self.assertIn(ep.dist.name, ('distinfo-pkg', 'egginfo-pkg')) | 
					
						
							|  |  |  |             self.assertEqual(ep.dist.version, "1.0.0") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-25 21:04:28 -04:00
										 |  |  |     def test_entry_points_unique_packages_normalized(self): | 
					
						
							| 
									
										
										
										
											2022-04-17 11:10:26 -04:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         Entry points should only be exposed for the first package | 
					
						
							| 
									
										
										
										
											2022-06-25 21:04:28 -04:00
										 |  |  |         on sys.path with a given name (even when normalized). | 
					
						
							| 
									
										
										
										
											2022-04-17 11:10:26 -04:00
										 |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |         alt_site_dir = self.fixtures.enter_context(fixtures.tempdir()) | 
					
						
							|  |  |  |         self.fixtures.enter_context(self.add_sys_path(alt_site_dir)) | 
					
						
							|  |  |  |         alt_pkg = { | 
					
						
							| 
									
										
										
										
											2022-06-25 21:04:28 -04:00
										 |  |  |             "DistInfo_pkg-1.1.0.dist-info": { | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |                 "METADATA": """
 | 
					
						
							|  |  |  |                 Name: distinfo-pkg | 
					
						
							|  |  |  |                 Version: 1.1.0 | 
					
						
							|  |  |  |                 """,
 | 
					
						
							|  |  |  |                 "entry_points.txt": """
 | 
					
						
							|  |  |  |                 [entries] | 
					
						
							|  |  |  |                 main = mod:altmain | 
					
						
							|  |  |  |             """,
 | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         fixtures.build_files(alt_pkg, alt_site_dir) | 
					
						
							|  |  |  |         entries = entry_points(group='entries') | 
					
						
							|  |  |  |         assert not any( | 
					
						
							|  |  |  |             ep.dist.name == 'distinfo-pkg' and ep.dist.version == '1.0.0' | 
					
						
							|  |  |  |             for ep in entries | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         # ns:sub doesn't exist in alt_pkg | 
					
						
							| 
									
										
										
										
											2021-12-16 15:49:42 -05:00
										 |  |  |         assert 'ns:sub' not in entries.names | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points_missing_name(self): | 
					
						
							|  |  |  |         with self.assertRaises(KeyError): | 
					
						
							|  |  |  |             entry_points(group='entries')['missing'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points_missing_group(self): | 
					
						
							|  |  |  |         assert entry_points(group='missing') == () | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-11 01:56:21 +01:00
										 |  |  |     def test_entry_points_allows_no_attributes(self): | 
					
						
							|  |  |  |         ep = entry_points().select(group='entries', name='main') | 
					
						
							|  |  |  |         with self.assertRaises(AttributeError): | 
					
						
							|  |  |  |             ep.foo = 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |     def test_metadata_for_this_package(self): | 
					
						
							|  |  |  |         md = metadata('egginfo-pkg') | 
					
						
							|  |  |  |         assert md['author'] == 'Steven Ma' | 
					
						
							|  |  |  |         assert md['LICENSE'] == 'Unknown' | 
					
						
							|  |  |  |         assert md['Name'] == 'egginfo-pkg' | 
					
						
							|  |  |  |         classifiers = md.get_all('Classifier') | 
					
						
							|  |  |  |         assert 'Topic :: Software Development :: Libraries' in classifiers | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-20 22:12:48 -04:00
										 |  |  |     def test_missing_key_legacy(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Requesting a missing key will still return None, but warn. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         md = metadata('distinfo-pkg') | 
					
						
							|  |  |  |         with suppress_known_deprecation(): | 
					
						
							|  |  |  |             assert md['does-not-exist'] is None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_get_key(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Getting a key gets the key. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         md = metadata('egginfo-pkg') | 
					
						
							|  |  |  |         assert md.get('Name') == 'egginfo-pkg' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_get_missing_key(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Requesting a missing key will return None. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         md = metadata('distinfo-pkg') | 
					
						
							|  |  |  |         assert md.get('does-not-exist') is None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |     def _test_files(files): | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         root = files[0].root | 
					
						
							|  |  |  |         for file in files: | 
					
						
							|  |  |  |             assert file.root == root | 
					
						
							|  |  |  |             assert not file.hash or file.hash.value | 
					
						
							|  |  |  |             assert not file.hash or file.hash.mode == 'sha256' | 
					
						
							|  |  |  |             assert not file.size or file.size >= 0 | 
					
						
							|  |  |  |             assert file.locate().exists() | 
					
						
							|  |  |  |             assert isinstance(file.read_binary(), bytes) | 
					
						
							|  |  |  |             if file.name.endswith('.py'): | 
					
						
							|  |  |  |                 file.read_text() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_file_hash_repr(self): | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         util = [p for p in files('distinfo-pkg') if p.name == 'mod.py'][0] | 
					
						
							| 
									
										
										
										
											2021-12-16 15:49:42 -05:00
										 |  |  |         self.assertRegex(repr(util.hash), '<FileHash mode: sha256 value: .*>') | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_files_dist_info(self): | 
					
						
							|  |  |  |         self._test_files(files('distinfo-pkg')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_files_egg_info(self): | 
					
						
							|  |  |  |         self._test_files(files('egginfo-pkg')) | 
					
						
							| 
									
										
										
										
											2023-04-20 22:12:48 -04:00
										 |  |  |         self._test_files(files('egg_with_module-pkg')) | 
					
						
							|  |  |  |         self._test_files(files('egg_with_no_modules-pkg')) | 
					
						
							|  |  |  |         self._test_files(files('sources_fallback-pkg')) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_version_egg_info_file(self): | 
					
						
							|  |  |  |         self.assertEqual(version('egginfo-file'), '0.1') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_requires_egg_info_file(self): | 
					
						
							|  |  |  |         requirements = requires('egginfo-file') | 
					
						
							|  |  |  |         self.assertIsNone(requirements) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |     def test_requires_egg_info(self): | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         deps = requires('egginfo-pkg') | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         assert len(deps) == 2 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         assert any(dep == 'wheel >= 1.0; python_version >= "2.7"' for dep in deps) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-13 15:53:29 -04:00
										 |  |  |     def test_requires_egg_info_empty(self): | 
					
						
							|  |  |  |         fixtures.build_files( | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 'requires.txt': '', | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             self.site_dir.joinpath('egginfo_pkg.egg-info'), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         deps = requires('egginfo-pkg') | 
					
						
							|  |  |  |         assert deps == [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |     def test_requires_dist_info(self): | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         deps = requires('distinfo-pkg') | 
					
						
							|  |  |  |         assert len(deps) == 2 | 
					
						
							|  |  |  |         assert all(deps) | 
					
						
							| 
									
										
										
										
											2019-09-02 11:08:03 -04:00
										 |  |  |         assert 'wheel >= 1.0' in deps | 
					
						
							|  |  |  |         assert "pytest; extra == 'test'" in deps | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_more_complex_deps_requires_text(self): | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         requires = textwrap.dedent( | 
					
						
							|  |  |  |             """
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |             dep1 | 
					
						
							|  |  |  |             dep2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             [:python_version < "3"] | 
					
						
							|  |  |  |             dep3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             [extra1] | 
					
						
							|  |  |  |             dep4 | 
					
						
							| 
									
										
										
										
											2021-12-16 15:48:35 -05:00
										 |  |  |             dep6@ git+https://example.com/python/dep.git@v1.0.0 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |             [extra2:python_version < "3"] | 
					
						
							|  |  |  |             dep5 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |             """
 | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         deps = sorted(Distribution._deps_from_requires_text(requires)) | 
					
						
							|  |  |  |         expected = [ | 
					
						
							|  |  |  |             'dep1', | 
					
						
							|  |  |  |             'dep2', | 
					
						
							|  |  |  |             'dep3; python_version < "3"', | 
					
						
							|  |  |  |             'dep4; extra == "extra1"', | 
					
						
							|  |  |  |             'dep5; (python_version < "3") and extra == "extra2"', | 
					
						
							| 
									
										
										
										
											2021-12-16 15:48:35 -05:00
										 |  |  |             'dep6@ git+https://example.com/python/dep.git@v1.0.0 ; extra == "extra1"', | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         ] | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         # It's important that the environment marker expression be | 
					
						
							|  |  |  |         # wrapped in parentheses to avoid the following 'and' binding more | 
					
						
							|  |  |  |         # tightly than some other part of the environment expression. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         assert deps == expected | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-02 17:03:40 -04:00
										 |  |  |     def test_as_json(self): | 
					
						
							|  |  |  |         md = metadata('distinfo-pkg').json | 
					
						
							|  |  |  |         assert 'name' in md | 
					
						
							|  |  |  |         assert md['keywords'] == ['sample', 'package'] | 
					
						
							|  |  |  |         desc = md['description'] | 
					
						
							|  |  |  |         assert desc.startswith('Once upon a time\nThere was') | 
					
						
							|  |  |  |         assert len(md['requires_dist']) == 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_as_json_egg_info(self): | 
					
						
							|  |  |  |         md = metadata('egginfo-pkg').json | 
					
						
							|  |  |  |         assert 'name' in md | 
					
						
							|  |  |  |         assert md['keywords'] == ['sample', 'package'] | 
					
						
							|  |  |  |         desc = md['description'] | 
					
						
							|  |  |  |         assert desc.startswith('Once upon a time\nThere was') | 
					
						
							|  |  |  |         assert len(md['classifier']) == 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_as_json_odd_case(self): | 
					
						
							|  |  |  |         self.make_uppercase() | 
					
						
							|  |  |  |         md = metadata('distinfo-pkg').json | 
					
						
							|  |  |  |         assert 'name' in md | 
					
						
							|  |  |  |         assert len(md['requires_dist']) == 2 | 
					
						
							|  |  |  |         assert md['keywords'] == ['SAMPLE', 'PACKAGE'] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  | class LegacyDots(fixtures.DistInfoPkgWithDotLegacy, unittest.TestCase): | 
					
						
							|  |  |  |     def test_name_normalization(self): | 
					
						
							|  |  |  |         names = 'pkg.dot', 'pkg_dot', 'pkg-dot', 'pkg..dot', 'Pkg.Dot' | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             with self.subTest(name): | 
					
						
							|  |  |  |                 assert distribution(name).metadata['Name'] == 'pkg.dot' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_name_normalization_versionless_egg_info(self): | 
					
						
							|  |  |  |         names = 'pkg.lot', 'pkg_lot', 'pkg-lot', 'pkg..lot', 'Pkg.Lot' | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             with self.subTest(name): | 
					
						
							|  |  |  |                 assert distribution(name).metadata['Name'] == 'pkg.lot' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | class OffSysPathTests(fixtures.DistInfoPkgOffPath, unittest.TestCase): | 
					
						
							|  |  |  |     def test_find_distributions_specified_path(self): | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         dists = Distribution.discover(path=[str(self.site_dir)]) | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         assert any(dist.metadata['Name'] == 'distinfo-pkg' for dist in dists) | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_distribution_at_pathlib(self): | 
					
						
							| 
									
										
										
										
											2022-04-17 11:10:26 -04:00
										 |  |  |         """Demonstrate how to load metadata direct from a directory.""" | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         dist_info_path = self.site_dir / 'distinfo_pkg-1.0.0.dist-info' | 
					
						
							|  |  |  |         dist = Distribution.at(dist_info_path) | 
					
						
							|  |  |  |         assert dist.version == '1.0.0' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_distribution_at_str(self): | 
					
						
							|  |  |  |         dist_info_path = self.site_dir / 'distinfo_pkg-1.0.0.dist-info' | 
					
						
							|  |  |  |         dist = Distribution.at(str(dist_info_path)) | 
					
						
							|  |  |  |         assert dist.version == '1.0.0' | 
					
						
							| 
									
										
										
										
											2021-04-24 10:13:51 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class InvalidateCache(unittest.TestCase): | 
					
						
							|  |  |  |     def test_invalidate_cache(self): | 
					
						
							|  |  |  |         # No externally observable behavior, but ensures test coverage... | 
					
						
							|  |  |  |         importlib.invalidate_caches() |