@@ -59,6 +59,89 @@ def sdist_with_index(distname, version):
59
59
def test_dist__get_unpatched_deprecated ():
60
60
pytest .warns (DistDeprecationWarning , _get_unpatched , ["" ])
61
61
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\n description" ,
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
+
62
145
def __maintainer_test_cases ():
63
146
attrs = {"name" : "package" ,
64
147
"version" : "1.0" ,
0 commit comments