NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

test_sdist.py (10609B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\tests\test_sdist.py
      2 import os
      3 import unittest
      4 import shutil
      5 import zipfile
      6 import tarfile
      7 try:
      8     import zlib
      9 except ImportError:
     10     zlib = None
     11 
     12 try:
     13     import grp
     14     import pwd
     15     UID_GID_SUPPORT = True
     16 except ImportError:
     17     UID_GID_SUPPORT = False
     18 
     19 from os.path import join
     20 import sys
     21 import tempfile
     22 import warnings
     23 from test.test_support import check_warnings
     24 from test.test_support import captured_stdout
     25 from distutils.command.sdist import sdist
     26 from distutils.command.sdist import show_formats
     27 from distutils.core import Distribution
     28 from distutils.tests.test_config import PyPIRCCommandTestCase
     29 from distutils.errors import DistutilsExecError, DistutilsOptionError
     30 from distutils.spawn import find_executable
     31 from distutils.tests import support
     32 from distutils.log import WARN
     33 from distutils.archive_util import ARCHIVE_FORMATS
     34 SETUP_PY = "\nfrom distutils.core import setup\nimport somecode\n\nsetup(name='fake')\n"
     35 MANIFEST = '# file GENERATED by distutils, do NOT edit\nREADME\ninroot.txt\nsetup.py\ndata%(sep)sdata.dt\nscripts%(sep)sscript.py\nsome%(sep)sfile.txt\nsome%(sep)sother_file.txt\nsomecode%(sep)s__init__.py\nsomecode%(sep)sdoc.dat\nsomecode%(sep)sdoc.txt\n'
     36 
     37 class SDistTestCase(PyPIRCCommandTestCase):
     38 
     39     def setUp(self):
     40         super(SDistTestCase, self).setUp()
     41         self.old_path = os.getcwd()
     42         os.mkdir(join(self.tmp_dir, 'somecode'))
     43         os.mkdir(join(self.tmp_dir, 'dist'))
     44         self.write_file((self.tmp_dir, 'README'), 'xxx')
     45         self.write_file((self.tmp_dir, 'somecode', '__init__.py'), '#')
     46         self.write_file((self.tmp_dir, 'setup.py'), SETUP_PY)
     47         os.chdir(self.tmp_dir)
     48 
     49     def tearDown(self):
     50         os.chdir(self.old_path)
     51         super(SDistTestCase, self).tearDown()
     52 
     53     def get_cmd(self, metadata = None):
     54         if metadata is None:
     55             metadata = {'name': 'fake',
     56              'version': '1.0',
     57              'url': 'xxx',
     58              'author': 'xxx',
     59              'author_email': 'xxx'}
     60         dist = Distribution(metadata)
     61         dist.script_name = 'setup.py'
     62         dist.packages = ['somecode']
     63         dist.include_package_data = True
     64         cmd = sdist(dist)
     65         cmd.dist_dir = 'dist'
     66 
     67         def _warn(*args):
     68             pass
     69 
     70         cmd.warn = _warn
     71         return (dist, cmd)
     72 
     73     @unittest.skipUnless(zlib, 'requires zlib')
     74     def test_prune_file_list(self):
     75         os.mkdir(join(self.tmp_dir, 'somecode', '.svn'))
     76         self.write_file((self.tmp_dir,
     77          'somecode',
     78          '.svn',
     79          'ok.py'), 'xxx')
     80         os.mkdir(join(self.tmp_dir, 'somecode', '.hg'))
     81         self.write_file((self.tmp_dir,
     82          'somecode',
     83          '.hg',
     84          'ok'), 'xxx')
     85         os.mkdir(join(self.tmp_dir, 'somecode', '.git'))
     86         self.write_file((self.tmp_dir,
     87          'somecode',
     88          '.git',
     89          'ok'), 'xxx')
     90         dist, cmd = self.get_cmd()
     91         cmd.formats = ['zip']
     92         cmd.ensure_finalized()
     93         cmd.run()
     94         dist_folder = join(self.tmp_dir, 'dist')
     95         files = os.listdir(dist_folder)
     96         self.assertEqual(files, ['fake-1.0.zip'])
     97         zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip'))
     98         try:
     99             content = zip_file.namelist()
    100         finally:
    101             zip_file.close()
    102 
    103         self.assertEqual(len(content), 4)
    104 
    105     @unittest.skipUnless(zlib, 'requires zlib')
    106     def test_make_distribution(self):
    107         if find_executable('tar') is None or find_executable('gzip') is None:
    108             return
    109         dist, cmd = self.get_cmd()
    110         cmd.formats = ['gztar', 'tar']
    111         cmd.ensure_finalized()
    112         cmd.run()
    113         dist_folder = join(self.tmp_dir, 'dist')
    114         result = os.listdir(dist_folder)
    115         result.sort()
    116         self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz'])
    117         os.remove(join(dist_folder, 'fake-1.0.tar'))
    118         os.remove(join(dist_folder, 'fake-1.0.tar.gz'))
    119         cmd.formats = ['tar', 'gztar']
    120         cmd.ensure_finalized()
    121         cmd.run()
    122         result = os.listdir(dist_folder)
    123         result.sort()
    124         self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz'])
    125 
    126     @unittest.skipUnless(zlib, 'requires zlib')
    127     def test_add_defaults(self):
    128         dist, cmd = self.get_cmd()
    129         dist.package_data = {'': ['*.cfg', '*.dat'],
    130          'somecode': ['*.txt']}
    131         self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
    132         self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#')
    133         data_dir = join(self.tmp_dir, 'data')
    134         os.mkdir(data_dir)
    135         self.write_file((data_dir, 'data.dt'), '#')
    136         some_dir = join(self.tmp_dir, 'some')
    137         os.mkdir(some_dir)
    138         self.write_file((self.tmp_dir, 'inroot.txt'), '#')
    139         self.write_file((some_dir, 'file.txt'), '#')
    140         self.write_file((some_dir, 'other_file.txt'), '#')
    141         dist.data_files = [('data', ['data/data.dt', 'inroot.txt', 'notexisting']), 'some/file.txt', 'some/other_file.txt']
    142         script_dir = join(self.tmp_dir, 'scripts')
    143         os.mkdir(script_dir)
    144         self.write_file((script_dir, 'script.py'), '#')
    145         dist.scripts = [join('scripts', 'script.py')]
    146         cmd.formats = ['zip']
    147         cmd.use_defaults = True
    148         cmd.ensure_finalized()
    149         cmd.run()
    150         dist_folder = join(self.tmp_dir, 'dist')
    151         files = os.listdir(dist_folder)
    152         self.assertEqual(files, ['fake-1.0.zip'])
    153         zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip'))
    154         try:
    155             content = zip_file.namelist()
    156         finally:
    157             zip_file.close()
    158 
    159         self.assertEqual(len(content), 11)
    160         f = open(join(self.tmp_dir, 'MANIFEST'))
    161         try:
    162             manifest = f.read()
    163             self.assertEqual(manifest, MANIFEST % {'sep': os.sep})
    164         finally:
    165             f.close()
    166 
    167     @unittest.skipUnless(zlib, 'requires zlib')
    168     def test_metadata_check_option(self):
    169         dist, cmd = self.get_cmd(metadata={})
    170         cmd.ensure_finalized()
    171         cmd.run()
    172         warnings = self.get_logs(WARN)
    173         self.assertEqual(len(warnings), 2)
    174         self.clear_logs()
    175         dist, cmd = self.get_cmd()
    176         cmd.ensure_finalized()
    177         cmd.metadata_check = 0
    178         cmd.run()
    179         warnings = self.get_logs(WARN)
    180         self.assertEqual(len(warnings), 0)
    181 
    182     def test_check_metadata_deprecated(self):
    183         dist, cmd = self.get_cmd()
    184         with check_warnings() as w:
    185             warnings.simplefilter('always')
    186             cmd.check_metadata()
    187             self.assertEqual(len(w.warnings), 1)
    188 
    189     def test_show_formats(self):
    190         with captured_stdout() as stdout:
    191             show_formats()
    192         num_formats = len(ARCHIVE_FORMATS.keys())
    193         output = [ line for line in stdout.getvalue().split('\n') if line.strip().startswith('--formats=') ]
    194         self.assertEqual(len(output), num_formats)
    195 
    196     def test_finalize_options(self):
    197         dist, cmd = self.get_cmd()
    198         cmd.finalize_options()
    199         self.assertEqual(cmd.manifest, 'MANIFEST')
    200         self.assertEqual(cmd.template, 'MANIFEST.in')
    201         self.assertEqual(cmd.dist_dir, 'dist')
    202         cmd.formats = 1
    203         self.assertRaises(DistutilsOptionError, cmd.finalize_options)
    204         cmd.formats = ['zip']
    205         cmd.finalize_options()
    206         cmd.formats = 'supazipa'
    207         self.assertRaises(DistutilsOptionError, cmd.finalize_options)
    208 
    209     @unittest.skipUnless(zlib, 'requires zlib')
    210     @unittest.skipUnless(UID_GID_SUPPORT, 'Requires grp and pwd support')
    211     def test_make_distribution_owner_group(self):
    212         if find_executable('tar') is None or find_executable('gzip') is None:
    213             return
    214         dist, cmd = self.get_cmd()
    215         cmd.formats = ['gztar']
    216         cmd.owner = pwd.getpwuid(0)[0]
    217         cmd.group = grp.getgrgid(0)[0]
    218         cmd.ensure_finalized()
    219         cmd.run()
    220         archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz')
    221         archive = tarfile.open(archive_name)
    222         try:
    223             for member in archive.getmembers():
    224                 self.assertEqual(member.uid, 0)
    225                 self.assertEqual(member.gid, 0)
    226 
    227         finally:
    228             archive.close()
    229 
    230         dist, cmd = self.get_cmd()
    231         cmd.formats = ['gztar']
    232         cmd.ensure_finalized()
    233         cmd.run()
    234         archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz')
    235         archive = tarfile.open(archive_name)
    236         try:
    237             for member in archive.getmembers():
    238                 self.assertEqual(member.uid, os.getuid())
    239 
    240         finally:
    241             archive.close()
    242 
    243     @unittest.skipUnless(zlib, 'requires zlib')
    244     def test_get_file_list(self):
    245         dist, cmd = self.get_cmd()
    246         dist.package_data = {'somecode': ['*.txt']}
    247         self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
    248         cmd.ensure_finalized()
    249         cmd.run()
    250         f = open(cmd.manifest)
    251         try:
    252             manifest = [ line.strip() for line in f.read().split('\n') if line.strip() != '' ]
    253         finally:
    254             f.close()
    255 
    256         self.assertEqual(len(manifest), 5)
    257         self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#')
    258         build_py = dist.get_command_obj('build_py')
    259         build_py.finalized = False
    260         build_py.ensure_finalized()
    261         cmd.run()
    262         f = open(cmd.manifest)
    263         try:
    264             manifest2 = [ line.strip() for line in f.read().split('\n') if line.strip() != '' ]
    265         finally:
    266             f.close()
    267 
    268         self.assertEqual(len(manifest2), 6)
    269         self.assertIn('doc2.txt', manifest2[-1])
    270 
    271     def test_manifest_marker(self):
    272         dist, cmd = self.get_cmd()
    273         cmd.ensure_finalized()
    274         cmd.run()
    275         f = open(cmd.manifest)
    276         try:
    277             manifest = [ line.strip() for line in f.read().split('\n') if line.strip() != '' ]
    278         finally:
    279             f.close()
    280 
    281         self.assertEqual(manifest[0], '# file GENERATED by distutils, do NOT edit')
    282 
    283     def test_manual_manifest(self):
    284         dist, cmd = self.get_cmd()
    285         cmd.ensure_finalized()
    286         self.write_file((self.tmp_dir, cmd.manifest), 'README.manual')
    287         cmd.run()
    288         f = open(cmd.manifest)
    289         try:
    290             manifest = [ line.strip() for line in f.read().split('\n') if line.strip() != '' ]
    291         finally:
    292             f.close()
    293 
    294         self.assertEqual(manifest, ['README.manual'])
    295 
    296 
    297 def test_suite():
    298     return unittest.makeSuite(SDistTestCase)
    299 
    300 
    301 if __name__ == '__main__':
    302     unittest.main(defaultTest='test_suite')