usse/funda-scraper/venv/lib/python3.10/site-packages/pkginfo/tests/test_distribution.py

451 lines
18 KiB
Python
Raw Normal View History

2023-02-20 22:38:24 +00:00
import unittest
class DistributionTests(unittest.TestCase):
def _getTargetClass(self):
from pkginfo.distribution import Distribution
return Distribution
def _makeOne(self, metadata_version='1.0'):
dist = self._getTargetClass()()
if metadata_version is not None:
dist.metadata_version = metadata_version
return dist
def test_ctor_defaults(self):
sdist = self._makeOne(None)
self.assertEqual(sdist.metadata_version, None)
# version 1.0
self.assertEqual(sdist.name, None)
self.assertEqual(sdist.version, None)
self.assertEqual(sdist.platforms, ())
self.assertEqual(sdist.supported_platforms, ())
self.assertEqual(sdist.summary, None)
self.assertEqual(sdist.description, None)
self.assertEqual(sdist.keywords, None)
self.assertEqual(sdist.home_page, None)
self.assertEqual(sdist.download_url, None)
self.assertEqual(sdist.author, None)
self.assertEqual(sdist.author_email, None)
self.assertEqual(sdist.license, None)
# version 1.1
self.assertEqual(sdist.classifiers, ())
self.assertEqual(sdist.requires, ())
self.assertEqual(sdist.provides, ())
self.assertEqual(sdist.obsoletes, ())
# version 1.2
self.assertEqual(sdist.maintainer, None)
self.assertEqual(sdist.maintainer_email, None)
self.assertEqual(sdist.requires_python, None)
self.assertEqual(sdist.requires_external, ())
self.assertEqual(sdist.requires_dist, ())
self.assertEqual(sdist.provides_dist, ())
self.assertEqual(sdist.obsoletes_dist, ())
self.assertEqual(sdist.project_urls, ())
# version 2.1
self.assertEqual(sdist.provides_extras, ())
self.assertEqual(sdist.description_content_type, None)
# version 2.2
self.assertEqual(sdist.dynamic, ())
def test_extractMetadata_raises_NotImplementedError(self):
# 'extractMetadata' calls 'read', which subclasses must override.
dist = self._makeOne(None)
self.assertRaises(NotImplementedError, dist.extractMetadata)
def test_read_raises_NotImplementedError(self):
# Subclasses must override 'read'.
dist = self._makeOne(None)
self.assertRaises(NotImplementedError, dist.read)
def test_parse_given_unicode(self):
from pkginfo._compat import u
dist = self._makeOne()
dist.parse(u('Metadata-Version: 1.0\nName: lp722928_c3')) # no raise
def test_parse_Metadata_Version_1_0(self):
from pkginfo.distribution import HEADER_ATTRS_1_0
dist = self._makeOne(None)
dist.parse('Metadata-Version: 1.0')
self.assertEqual(dist.metadata_version, '1.0')
self.assertEqual(list(dist),
[x[1] for x in HEADER_ATTRS_1_0])
def test_parse_Metadata_Version_1_1(self):
from pkginfo.distribution import HEADER_ATTRS_1_1
dist = self._makeOne(None)
dist.parse('Metadata-Version: 1.1')
self.assertEqual(dist.metadata_version, '1.1')
self.assertEqual(list(dist),
[x[1] for x in HEADER_ATTRS_1_1])
def test_parse_Metadata_Version_1_2(self):
from pkginfo.distribution import HEADER_ATTRS_1_2
dist = self._makeOne(None)
dist.parse('Metadata-Version: 1.2')
self.assertEqual(dist.metadata_version, '1.2')
self.assertEqual(list(dist),
[x[1] for x in HEADER_ATTRS_1_2])
def test_parse_Metadata_Version_2_1(self):
from pkginfo.distribution import HEADER_ATTRS_2_1
dist = self._makeOne(None)
dist.parse('Metadata-Version: 2.1')
self.assertEqual(dist.metadata_version, '2.1')
self.assertEqual(list(dist),
[x[1] for x in HEADER_ATTRS_2_1])
def test_parse_Metadata_Version_2_2(self):
from pkginfo.distribution import HEADER_ATTRS_2_2
dist = self._makeOne(None)
dist.parse('Metadata-Version: 2.2')
self.assertEqual(dist.metadata_version, '2.2')
self.assertEqual(list(dist),
[x[1] for x in HEADER_ATTRS_2_2])
def test_parse_Metadata_Version_unknown(self):
dist = self._makeOne(None)
dist.parse('Metadata-Version: 1.3')
self.assertEqual(dist.metadata_version, '1.3')
self.assertEqual(list(dist), [])
def test_parse_Metadata_Version_override(self):
dist = self._makeOne('1.2')
dist.parse('Metadata-Version: 1.0')
self.assertEqual(dist.metadata_version, '1.2')
def test_parse_Name(self):
dist = self._makeOne()
dist.parse('Name: foobar')
self.assertEqual(dist.name, 'foobar')
def test_parse_Version(self):
dist = self._makeOne()
dist.parse('Version: 2.1.3b5')
self.assertEqual(dist.version, '2.1.3b5')
def test_parse_Platform_single(self):
dist = self._makeOne()
dist.parse('Platform: Plan9')
self.assertEqual(list(dist.platforms), ['Plan9'])
def test_parse_Platform_multiple(self):
dist = self._makeOne()
dist.parse('Platform: Plan9\nPlatform: AIX')
self.assertEqual(list(dist.platforms), ['Plan9', 'AIX'])
def test_parse_Supported_Platform_single(self):
dist = self._makeOne()
dist.parse('Supported-Platform: Plan9')
self.assertEqual(list(dist.supported_platforms), ['Plan9'])
def test_parse_Supported_Platform_multiple(self):
dist = self._makeOne()
dist.parse('Supported-Platform: i386-win32\n'
'Supported-Platform: RedHat 7.2')
self.assertEqual(list(dist.supported_platforms),
['i386-win32', 'RedHat 7.2'])
def test_parse_Summary(self):
dist = self._makeOne()
dist.parse('Summary: Package for foo')
self.assertEqual(dist.summary, 'Package for foo')
def test_parse_Description(self):
dist = self._makeOne()
dist.parse('Description: This package enables integration with '
'foo servers.')
self.assertEqual(dist.description,
'This package enables integration with '
'foo servers.')
def test_parse_Description_multiline(self):
dist = self._makeOne()
dist.parse('Description: This package enables integration with\n'
' foo servers.')
self.assertEqual(dist.description,
'This package enables integration with\n'
'foo servers.')
def test_parse_Description_in_payload(self):
dist = self._makeOne()
dist.parse('Foo: Bar\n'
'\n'
'This package enables integration with\n'
'foo servers.')
self.assertEqual(dist.description,
'This package enables integration with\n'
'foo servers.')
def test_parse_Keywords(self):
dist = self._makeOne()
dist.parse('Keywords: bar foo qux')
self.assertEqual(dist.keywords, 'bar foo qux')
def test_parse_Home_page(self):
dist = self._makeOne()
dist.parse('Home-page: http://example.com/package')
self.assertEqual(dist.home_page, 'http://example.com/package')
def test_parse_Author(self):
dist = self._makeOne()
dist.parse('Author: J. Phredd Bloggs')
self.assertEqual(dist.author, 'J. Phredd Bloggs')
def test_parse_Author_Email(self):
dist = self._makeOne()
dist.parse('Author-email: phreddy@example.com')
self.assertEqual(dist.author_email, 'phreddy@example.com')
def test_parse_License(self):
dist = self._makeOne()
dist.parse('License: Poetic')
self.assertEqual(dist.license, 'Poetic')
# Metadata version 1.1, defined in PEP 314.
def test_parse_Classifier_single(self):
dist = self._makeOne('1.1')
dist.parse('Classifier: Some :: Silly Thing')
self.assertEqual(list(dist.classifiers), ['Some :: Silly Thing'])
def test_parse_Classifier_multiple(self):
dist = self._makeOne('1.1')
dist.parse('Classifier: Some :: Silly Thing\n'
'Classifier: Or :: Other')
self.assertEqual(list(dist.classifiers),
['Some :: Silly Thing', 'Or :: Other'])
def test_parse_Download_URL(self):
dist = self._makeOne('1.1')
dist.parse('Download-URL: '
'http://example.com/package/mypackage-0.1.zip')
self.assertEqual(dist.download_url,
'http://example.com/package/mypackage-0.1.zip')
def test_parse_Requires_single_wo_version(self):
dist = self._makeOne('1.1')
dist.parse('Requires: SpanishInquisition')
self.assertEqual(list(dist.requires), ['SpanishInquisition'])
def test_parse_Requires_single_w_version(self):
dist = self._makeOne('1.1')
dist.parse('Requires: SpanishInquisition (>=1.3)')
self.assertEqual(list(dist.requires), ['SpanishInquisition (>=1.3)'])
def test_parse_Requires_multiple(self):
dist = self._makeOne('1.1')
dist.parse('Requires: SpanishInquisition\n'
'Requires: SillyWalks (1.4)\n'
'Requires: kniggits (>=2.3,<3.0)')
self.assertEqual(list(dist.requires),
['SpanishInquisition',
'SillyWalks (1.4)',
'kniggits (>=2.3,<3.0)',
])
def test_parse_Provides_single_wo_version(self):
dist = self._makeOne('1.1')
dist.parse('Provides: SillyWalks')
self.assertEqual(list(dist.provides), ['SillyWalks'])
def test_parse_Provides_single_w_version(self):
dist = self._makeOne('1.1')
dist.parse('Provides: SillyWalks (1.4)')
self.assertEqual(list(dist.provides), ['SillyWalks (1.4)'])
def test_parse_Provides_multiple(self):
dist = self._makeOne('1.1')
dist.parse('Provides: SillyWalks\n'
'Provides: DeadlyJoke (3.1.4)')
self.assertEqual(list(dist.provides),
['SillyWalks',
'DeadlyJoke (3.1.4)',
])
def test_parse_Obsoletes_single_no_version(self):
dist = self._makeOne('1.1')
dist.parse('Obsoletes: SillyWalks')
self.assertEqual(list(dist.obsoletes), ['SillyWalks'])
def test_parse_Obsoletes_single_w_version(self):
dist = self._makeOne('1.1')
dist.parse('Obsoletes: SillyWalks (<=1.3)')
self.assertEqual(list(dist.obsoletes), ['SillyWalks (<=1.3)'])
def test_parse_Obsoletes_multiple(self):
dist = self._makeOne('1.1')
dist.parse('Obsoletes: kniggits\n'
'Obsoletes: SillyWalks (<=2.0)')
self.assertEqual(list(dist.obsoletes),
['kniggits',
'SillyWalks (<=2.0)',
])
# Metadata version 1.2, defined in PEP 345.
def test_parse_Maintainer(self):
dist = self._makeOne(metadata_version='1.2')
dist.parse('Maintainer: J. Phredd Bloggs')
self.assertEqual(dist.maintainer, 'J. Phredd Bloggs')
def test_parse_Maintainer_Email(self):
dist = self._makeOne(metadata_version='1.2')
dist.parse('Maintainer-email: phreddy@example.com')
self.assertEqual(dist.maintainer_email, 'phreddy@example.com')
def test_parse_Requires_Python_single_spec(self):
dist = self._makeOne('1.2')
dist.parse('Requires-Python: >2.4')
self.assertEqual(dist.requires_python, '>2.4')
def test_parse_Requires_External_single_wo_version(self):
dist = self._makeOne('1.2')
dist.parse('Requires-External: libfoo')
self.assertEqual(list(dist.requires_external), ['libfoo'])
def test_parse_Requires_External_single_w_version(self):
dist = self._makeOne('1.2')
dist.parse('Requires-External: libfoo (>=1.3)')
self.assertEqual(list(dist.requires_external), ['libfoo (>=1.3)'])
def test_parse_Requires_External_multiple(self):
dist = self._makeOne('1.2')
dist.parse('Requires-External: libfoo\n'
'Requires-External: libbar (1.4)\n'
'Requires-External: libbaz (>=2.3,<3.0)')
self.assertEqual(list(dist.requires_external),
['libfoo',
'libbar (1.4)',
'libbaz (>=2.3,<3.0)',
])
def test_parse_Requires_Dist_single_wo_version(self):
dist = self._makeOne('1.2')
dist.parse('Requires-Dist: SpanishInquisition')
self.assertEqual(list(dist.requires_dist), ['SpanishInquisition'])
def test_parse_Requires_Dist_single_w_version(self):
dist = self._makeOne('1.2')
dist.parse('Requires-Dist: SpanishInquisition (>=1.3)')
self.assertEqual(list(dist.requires_dist),
['SpanishInquisition (>=1.3)'])
def test_parse_Requires_Dist_single_w_env_marker(self):
dist = self._makeOne('1.2')
dist.parse("Requires-Dist: SpanishInquisition; "
"python_version == '1.4'")
self.assertEqual(list(dist.requires_dist),
["SpanishInquisition; python_version == '1.4'"])
def test_parse_Requires_Dist_multiple(self):
dist = self._makeOne('1.2')
dist.parse("Requires-Dist: SpanishInquisition\n"
"Requires-Dist: SillyWalks; python_version == '1.4'\n"
"Requires-Dist: kniggits (>=2.3,<3.0)")
self.assertEqual(list(dist.requires_dist),
["SpanishInquisition",
"SillyWalks; python_version == '1.4'",
"kniggits (>=2.3,<3.0)",
])
def test_parse_Provides_Dist_single_wo_version(self):
dist = self._makeOne('1.2')
dist.parse('Provides-Dist: SillyWalks')
self.assertEqual(list(dist.provides_dist), ['SillyWalks'])
def test_parse_Provides_Dist_single_w_version(self):
dist = self._makeOne('1.2')
dist.parse('Provides-Dist: SillyWalks (1.4)')
self.assertEqual(list(dist.provides_dist), ['SillyWalks (1.4)'])
def test_parse_Provides_Dist_single_w_env_marker(self):
dist = self._makeOne('1.2')
dist.parse("Provides-Dist: SillyWalks; sys.platform == 'os2'")
self.assertEqual(list(dist.provides_dist),
["SillyWalks; sys.platform == 'os2'"])
def test_parse_Provides_Dist_multiple(self):
dist = self._makeOne('1.2')
dist.parse("Provides-Dist: SillyWalks\n"
"Provides-Dist: SpanishInquisition; sys.platform == 'os2'\n"
"Provides-Dist: DeadlyJoke (3.1.4)")
self.assertEqual(list(dist.provides_dist),
["SillyWalks",
"SpanishInquisition; sys.platform == 'os2'",
"DeadlyJoke (3.1.4)",
])
def test_parse_Obsoletes_Dist_single_no_version(self):
dist = self._makeOne('1.2')
dist.parse('Obsoletes-Dist: SillyWalks')
self.assertEqual(list(dist.obsoletes_dist), ['SillyWalks'])
def test_parse_Obsoletes_Dist_single_w_version(self):
dist = self._makeOne('1.2')
dist.parse('Obsoletes-Dist: SillyWalks (<=1.3)')
self.assertEqual(list(dist.obsoletes_dist), ['SillyWalks (<=1.3)'])
def test_parse_Obsoletes_Dist_single_w_env_marker(self):
dist = self._makeOne('1.2')
dist.parse("Obsoletes-Dist: SillyWalks; sys.platform == 'os2'")
self.assertEqual(list(dist.obsoletes_dist),
["SillyWalks; sys.platform == 'os2'"])
def test_parse_Obsoletes_Dist_multiple(self):
dist = self._makeOne('1.2')
dist.parse("Obsoletes-Dist: kniggits\n"
"Obsoletes-Dist: SillyWalks; sys.platform == 'os2'\n"
"Obsoletes-Dist: DeadlyJoke (<=2.0)\n"
)
self.assertEqual(list(dist.obsoletes_dist),
["kniggits",
"SillyWalks; sys.platform == 'os2'",
"DeadlyJoke (<=2.0)",
])
def test_parse_Project_URL_single_no_version(self):
dist = self._makeOne('1.2')
dist.parse('Project-URL: Bug tracker, http://bugs.example.com/grail')
self.assertEqual(list(dist.project_urls),
['Bug tracker, http://bugs.example.com/grail'])
def test_parse_Project_URL_multiple(self):
dist = self._makeOne('1.2')
dist.parse('Project-URL: Bug tracker, http://bugs.example.com/grail\n'
'Project-URL: Repository, http://svn.example.com/grail')
self.assertEqual(list(dist.project_urls),
['Bug tracker, http://bugs.example.com/grail',
'Repository, http://svn.example.com/grail',
])
# Metadata version 2.1, defined in PEP 566.
def test_parse_Provides_Extra_single(self):
dist = self._makeOne('2.1')
dist.parse('Provides-Extra: pdf')
self.assertEqual(list(dist.provides_extras), ['pdf'])
def test_parse_Provides_Extra_multiple(self):
dist = self._makeOne('2.1')
dist.parse('Provides-Extra: pdf\n'
'Provides-Extra: tex')
self.assertEqual(list(dist.provides_extras), ['pdf', 'tex'])
def test_parse_Distribution_Content_Type_single(self):
dist = self._makeOne('2.1')
dist.parse('Description-Content-Type: text/plain')
self.assertEqual(dist.description_content_type, 'text/plain')
# Metadata version 2.2, defined in PEP 643.
def test_parse_Dynamic_single(self):
dist = self._makeOne('2.2')
dist.parse('Dynamic: Platforms')
self.assertEqual(list(dist.dynamic), ['Platforms'])
def test_parse_Dynamic_multiple(self):
dist = self._makeOne('2.2')
dist.parse('Dynamic: Platforms\n'
'Dynamic: Supported-Platforms')
self.assertEqual(list(dist.dynamic),
['Platforms', 'Supported-Platforms'])