157 lines
5.4 KiB
Python
157 lines
5.4 KiB
Python
import shutil
|
|
import tempfile
|
|
import unittest
|
|
|
|
class SDistTests(unittest.TestCase):
|
|
|
|
def _getTargetClass(self):
|
|
from pkginfo.sdist import SDist
|
|
return SDist
|
|
|
|
def _makeOne(self, filename=None, metadata_version=None):
|
|
if metadata_version is not None:
|
|
return self._getTargetClass()(filename, metadata_version)
|
|
return self._getTargetClass()(filename)
|
|
|
|
def _checkSample(self, sdist, filename):
|
|
self.assertEqual(sdist.filename, filename)
|
|
self.assertEqual(sdist.name, 'mypackage')
|
|
self.assertEqual(sdist.version, '0.1')
|
|
self.assertEqual(sdist.keywords, None)
|
|
self.assertEqual(list(sdist.supported_platforms), [])
|
|
|
|
def _checkClassifiers(self, sdist):
|
|
self.assertEqual(list(sdist.classifiers),
|
|
['Development Status :: 4 - Beta',
|
|
'Environment :: Console (Text Based)',
|
|
])
|
|
|
|
def test_ctor_w_invalid_filename(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/nonesuch-0.1.tar.gz' % d
|
|
self.assertRaises(ValueError, self._makeOne, filename)
|
|
|
|
def test_ctor_wo_PKG_INFO(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/nopkginfo-0.1.zip' % d
|
|
self.assertRaises(ValueError, self._makeOne, filename)
|
|
|
|
def test_ctor_w_tar(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.tar' % d
|
|
sdist = self._makeOne(filename)
|
|
self.assertEqual(sdist.metadata_version, '1.0')
|
|
self._checkSample(sdist, filename)
|
|
|
|
def test_ctor_w_gztar(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.tar.gz' % d
|
|
sdist = self._makeOne(filename)
|
|
self.assertEqual(sdist.metadata_version, '1.0')
|
|
self._checkSample(sdist, filename)
|
|
|
|
def test_ctor_w_gztar_and_metadata_version(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.tar.gz' % d
|
|
sdist = self._makeOne(filename, metadata_version='1.1')
|
|
self._checkSample(sdist, filename)
|
|
self.assertEqual(sdist.metadata_version, '1.1')
|
|
self._checkClassifiers(sdist)
|
|
|
|
def test_ctor_w_bztar(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.tar.bz2' % d
|
|
sdist = self._makeOne(filename)
|
|
self.assertEqual(sdist.metadata_version, '1.0')
|
|
self._checkSample(sdist, filename)
|
|
|
|
def test_ctor_w_bztar_and_metadata_version(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.tar.bz2' % d
|
|
sdist = self._makeOne(filename, metadata_version='1.1')
|
|
self.assertEqual(sdist.metadata_version, '1.1')
|
|
self._checkSample(sdist, filename)
|
|
self._checkClassifiers(sdist)
|
|
|
|
def test_ctor_w_zip(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.zip' % d
|
|
sdist = self._makeOne(filename)
|
|
self.assertEqual(sdist.metadata_version, '1.0')
|
|
self._checkSample(sdist, filename)
|
|
|
|
def test_ctor_w_zip_and_metadata_version(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.zip' % d
|
|
sdist = self._makeOne(filename, metadata_version='1.1')
|
|
self.assertEqual(sdist.metadata_version, '1.1')
|
|
self._checkSample(sdist, filename)
|
|
self._checkClassifiers(sdist)
|
|
|
|
def test_ctor_w_bogus(self):
|
|
import os
|
|
d, _ = os.path.split(__file__)
|
|
filename = '%s/../../docs/examples/mypackage-0.1.bogus' % d
|
|
|
|
with self.assertRaises(ValueError):
|
|
self._makeOne(filename, metadata_version='1.1')
|
|
|
|
|
|
class UnpackedMixin(object):
|
|
def setUp(self):
|
|
super(UnpackedMixin, self).setUp()
|
|
self.__tmpdir = tempfile.mkdtemp()
|
|
|
|
def tearDown(self):
|
|
shutil.rmtree(self.__tmpdir)
|
|
super(UnpackedMixin, self).tearDown()
|
|
|
|
def _getTargetClass(self):
|
|
from pkginfo.sdist import UnpackedSDist
|
|
return UnpackedSDist
|
|
|
|
def _getTopDirectory(self):
|
|
import os
|
|
topnames = os.listdir(self.__tmpdir)
|
|
assert len(topnames) == 1
|
|
return os.path.join(self.__tmpdir, topnames[0])
|
|
|
|
def _getLoadFilename(self):
|
|
return self._getTopDirectory()
|
|
|
|
def _makeOne(self, filename=None, metadata_version=None):
|
|
|
|
archive, _, _ = self._getTargetClass()._get_archive(filename)
|
|
try:
|
|
archive.extractall(self.__tmpdir)
|
|
finally:
|
|
archive.close()
|
|
|
|
load_filename = self._getLoadFilename()
|
|
|
|
if metadata_version is not None:
|
|
return self._getTargetClass()(load_filename, metadata_version)
|
|
return self._getTargetClass()(load_filename)
|
|
|
|
def _checkSample(self, sdist, filename):
|
|
filename = self._getTopDirectory()
|
|
super(UnpackedMixin, self)._checkSample(sdist, filename)
|
|
|
|
|
|
class UnpackedSDistGivenDirectoryTests(UnpackedMixin, SDistTests):
|
|
pass
|
|
|
|
class UnpackedSDistGivenFileSDistTests(UnpackedMixin, SDistTests):
|
|
def _getLoadFilename(self):
|
|
import os
|
|
return os.path.join(self._getTopDirectory(), 'setup.py')
|