def test_metadata_versions(self): metadata = Metadata(mapping={'name': 'project', 'version': '1.0'}) self.assertEqual(metadata['Metadata-Version'], PKG_INFO_PREFERRED_VERSION) self.assertNotIn('Provides', metadata) self.assertNotIn('Requires', metadata) self.assertNotIn('Obsoletes', metadata) metadata['Classifier'] = ['ok'] metadata.set_metadata_version() self.assertEqual(metadata['Metadata-Version'], '1.1') metadata = Metadata() metadata['Download-URL'] = 'ok' metadata.set_metadata_version() self.assertEqual(metadata['Metadata-Version'], '1.1') metadata = Metadata() metadata['Obsoletes'] = 'ok' metadata.set_metadata_version() self.assertEqual(metadata['Metadata-Version'], '1.1') del metadata['Obsoletes'] metadata['Obsoletes-Dist'] = 'ok' metadata.set_metadata_version() self.assertEqual(metadata['Metadata-Version'], '1.2') metadata.set('Obsoletes', 'ok') self.assertRaises(MetadataConflictError, metadata.set_metadata_version) del metadata['Obsoletes'] del metadata['Obsoletes-Dist'] metadata.set_metadata_version() metadata['Version'] = '1' self.assertEqual(metadata['Metadata-Version'], '1.1') # make sure the _best_version function works okay with # non-conflicting fields from 1.1 and 1.2 (i.e. we want only the # requires/requires-dist and co. pairs to cause a conflict, not all # fields in _314_MARKERS) metadata = Metadata() metadata['Requires-Python'] = '3' metadata['Classifier'] = ['Programming language :: Python :: 3'] metadata.set_metadata_version() self.assertEqual(metadata['Metadata-Version'], '1.2') PKG_INFO = os.path.join(HERE, 'SETUPTOOLS-PKG-INFO') metadata = Metadata(PKG_INFO) self.assertEqual(metadata['Metadata-Version'], '1.1') PKG_INFO = os.path.join(HERE, 'SETUPTOOLS-PKG-INFO2') metadata = Metadata(PKG_INFO) self.assertEqual(metadata['Metadata-Version'], '1.1') # make sure an empty list for Obsoletes and Requires-dist gets ignored metadata['Obsoletes'] = [] metadata['Requires-dist'] = [] metadata.set_metadata_version() self.assertEqual(metadata['Metadata-Version'], '1.1') # Update the _fields dict directly to prevent 'Metadata-Version' # from being updated by the _set_best_version() method. metadata._fields['Metadata-Version'] = '1.618' self.assertRaises(MetadataUnrecognizedVersionError, metadata.keys)