Skip to content

Commit caa75d3

Browse files
committed
Add test for read_pkg_file
1 parent e7d70ba commit caa75d3

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

setuptools/tests/test_dist.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,89 @@ def sdist_with_index(distname, version):
5959
def test_dist__get_unpatched_deprecated():
6060
pytest.warns(DistDeprecationWarning, _get_unpatched, [""])
6161

62+
63+
def __read_test_cases():
64+
# Metadata version 1.0
65+
base_attrs = {
66+
"name": "package",
67+
"version": "0.0.1",
68+
"author": "Foo Bar",
69+
"author_email": "[email protected]",
70+
"long_description": "Long\ndescription",
71+
"description": "Short description",
72+
"keywords": ["one", "two"]
73+
}
74+
75+
def merge_dicts(d1, d2):
76+
d1 = d1.copy()
77+
d1.update(d2)
78+
79+
return d1
80+
81+
test_cases = [
82+
('Metadata version 1.0', base_attrs.copy()),
83+
('Metadata version 1.1: Provides', merge_dicts(base_attrs, {
84+
'provides': ['package']
85+
})),
86+
('Metadata version 1.1: Obsoletes', merge_dicts(base_attrs, {
87+
'obsoletes': ['foo']
88+
})),
89+
('Metadata version 1.1: Classifiers', merge_dicts(base_attrs, {
90+
'classifiers': [
91+
'Programming Language :: Python :: 3',
92+
'Programming Language :: Python :: 3.7',
93+
'License :: OSI Approved :: MIT License'
94+
]})),
95+
('Metadata version 1.1: Download URL', merge_dicts(base_attrs, {
96+
'download_url': 'https://example.com'
97+
})),
98+
('Metadata Version 1.2: Requires-Python', merge_dicts(base_attrs, {
99+
'python_requires': '>=3.7'
100+
})),
101+
('Metadata Version 2.1: Long Description Content Type',
102+
merge_dicts(base_attrs, {
103+
'long_description_content_type': 'text/x-rst; charset=UTF-8'
104+
})),
105+
('Metadata Version 2.1: Provides Extra',
106+
merge_dicts(base_attrs, {
107+
'provides-extra': ['foo']
108+
})),
109+
]
110+
111+
return test_cases
112+
113+
@pytest.mark.parametrize('name,attrs', __read_test_cases())
114+
def test_read_metadata(name, attrs):
115+
dist = Distribution(attrs)
116+
metadata_out = dist.metadata
117+
dist_class = metadata_out.__class__
118+
119+
# Write to PKG_INFO and then load into a new metadata object
120+
PKG_INFO = io.StringIO()
121+
metadata_out.write_pkg_file(PKG_INFO)
122+
PKG_INFO.seek(0)
123+
124+
metadata_in = dist_class()
125+
metadata_in.read_pkg_file(PKG_INFO)
126+
127+
tested_attrs = [
128+
('name', dist_class.get_name),
129+
('version', dist_class.get_version),
130+
('metadata_version', dist_class.get_metadata_version),
131+
('provides', dist_class.get_provides),
132+
('description', dist_class.get_description),
133+
('download_url', dist_class.get_download_url),
134+
('keywords', dist_class.get_keywords),
135+
('platforms', dist_class.get_platforms),
136+
('obsoletes', dist_class.get_obsoletes),
137+
('requires', dist_class.get_requires),
138+
('classifiers', dist_class.get_classifiers),
139+
]
140+
141+
for attr, getter in tested_attrs:
142+
assert getter(metadata_in) == getter(metadata_out)
143+
144+
62145
def __maintainer_test_cases():
63146
attrs = {"name": "package",
64147
"version": "1.0",

0 commit comments

Comments
 (0)