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

test_dist.py (13024B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\tests\test_dist.py
      2 import os
      3 import StringIO
      4 import sys
      5 import unittest
      6 import warnings
      7 import textwrap
      8 from distutils.dist import Distribution, fix_help_options, DistributionMetadata
      9 from distutils.cmd import Command
     10 import distutils.dist
     11 from test.test_support import TESTFN, captured_stdout
     12 from distutils.tests import support
     13 
     14 class test_dist(Command):
     15     user_options = [('sample-option=', 'S', 'help text')]
     16 
     17     def initialize_options(self):
     18         self.sample_option = None
     19 
     20 
     21 class TestDistribution(Distribution):
     22 
     23     def find_config_files(self):
     24         return self._config_files
     25 
     26 
     27 class DistributionTestCase(support.TempdirManager, support.LoggingSilencer, support.EnvironGuard, unittest.TestCase):
     28 
     29     def setUp(self):
     30         super(DistributionTestCase, self).setUp()
     31         self.argv = (sys.argv, sys.argv[:])
     32         del sys.argv[1:]
     33 
     34     def tearDown(self):
     35         sys.argv = self.argv[0]
     36         sys.argv[:] = self.argv[1]
     37         super(DistributionTestCase, self).tearDown()
     38 
     39     def create_distribution(self, configfiles = ()):
     40         d = TestDistribution()
     41         d._config_files = configfiles
     42         d.parse_config_files()
     43         d.parse_command_line()
     44         return d
     45 
     46     def test_debug_mode(self):
     47         with open(TESTFN, 'w') as f:
     48             f.write('[global]')
     49             f.write('command_packages = foo.bar, splat')
     50         files = [TESTFN]
     51         sys.argv.append('build')
     52         with captured_stdout() as stdout:
     53             self.create_distribution(files)
     54         stdout.seek(0)
     55         self.assertEqual(stdout.read(), '')
     56         distutils.dist.DEBUG = True
     57         try:
     58             with captured_stdout() as stdout:
     59                 self.create_distribution(files)
     60             stdout.seek(0)
     61             self.assertEqual(stdout.read(), '')
     62         finally:
     63             distutils.dist.DEBUG = False
     64 
     65     def test_command_packages_unspecified(self):
     66         sys.argv.append('build')
     67         d = self.create_distribution()
     68         self.assertEqual(d.get_command_packages(), ['distutils.command'])
     69 
     70     def test_command_packages_cmdline(self):
     71         from distutils.tests.test_dist import test_dist
     72         sys.argv.extend(['--command-packages',
     73          'foo.bar,distutils.tests',
     74          'test_dist',
     75          '-Ssometext'])
     76         d = self.create_distribution()
     77         self.assertEqual(d.get_command_packages(), ['distutils.command', 'foo.bar', 'distutils.tests'])
     78         cmd = d.get_command_obj('test_dist')
     79         self.assertTrue(isinstance(cmd, test_dist))
     80         self.assertEqual(cmd.sample_option, 'sometext')
     81 
     82     def test_command_packages_configfile(self):
     83         sys.argv.append('build')
     84         self.addCleanup(os.unlink, TESTFN)
     85         f = open(TESTFN, 'w')
     86         try:
     87             print >> f, '[global]'
     88             print >> f, 'command_packages = foo.bar, splat'
     89         finally:
     90             f.close()
     91 
     92         d = self.create_distribution([TESTFN])
     93         self.assertEqual(d.get_command_packages(), ['distutils.command', 'foo.bar', 'splat'])
     94         sys.argv[1:] = ['--command-packages', 'spork', 'build']
     95         d = self.create_distribution([TESTFN])
     96         self.assertEqual(d.get_command_packages(), ['distutils.command', 'spork'])
     97         sys.argv[1:] = ['--command-packages', '', 'build']
     98         d = self.create_distribution([TESTFN])
     99         self.assertEqual(d.get_command_packages(), ['distutils.command'])
    100 
    101     def test_write_pkg_file(self):
    102         tmp_dir = self.mkdtemp()
    103         my_file = os.path.join(tmp_dir, 'f')
    104         klass = Distribution
    105         dist = klass(attrs={'author': u'Mister Caf\xe9',
    106          'name': 'my.package',
    107          'maintainer': u'Caf\xe9 Junior',
    108          'description': u'Caf\xe9 torr\xe9fi\xe9',
    109          'long_description': u'H\xe9h\xe9h\xe9'})
    110         dist.metadata.write_pkg_file(open(my_file, 'w'))
    111         dist = klass(attrs={'author': 'Mister Cafe',
    112          'name': 'my.package',
    113          'maintainer': 'Cafe Junior',
    114          'description': 'Cafe torrefie',
    115          'long_description': 'Hehehe'})
    116         my_file2 = os.path.join(tmp_dir, 'f2')
    117         dist.metadata.write_pkg_file(open(my_file, 'w'))
    118 
    119     def test_empty_options(self):
    120         klass = Distribution
    121         warns = []
    122 
    123         def _warn(msg):
    124             warns.append(msg)
    125 
    126         old_warn = warnings.warn
    127         warnings.warn = _warn
    128         try:
    129             dist = klass(attrs={'author': 'xxx',
    130              'name': 'xxx',
    131              'version': 'xxx',
    132              'url': 'xxxx',
    133              'options': {}})
    134         finally:
    135             warnings.warn = old_warn
    136 
    137         self.assertEqual(len(warns), 0)
    138 
    139     def test_finalize_options(self):
    140         attrs = {'keywords': 'one,two',
    141          'platforms': 'one,two'}
    142         dist = Distribution(attrs=attrs)
    143         dist.finalize_options()
    144         self.assertEqual(dist.metadata.platforms, ['one', 'two'])
    145         self.assertEqual(dist.metadata.keywords, ['one', 'two'])
    146 
    147     def test_get_command_packages(self):
    148         dist = Distribution()
    149         self.assertEqual(dist.command_packages, None)
    150         cmds = dist.get_command_packages()
    151         self.assertEqual(cmds, ['distutils.command'])
    152         self.assertEqual(dist.command_packages, ['distutils.command'])
    153         dist.command_packages = 'one,two'
    154         cmds = dist.get_command_packages()
    155         self.assertEqual(cmds, ['distutils.command', 'one', 'two'])
    156 
    157     def test_announce(self):
    158         dist = Distribution()
    159         args = ('ok',)
    160         kwargs = {'level': 'ok2'}
    161         self.assertRaises(ValueError, dist.announce, args, kwargs)
    162 
    163     def test_find_config_files_disable(self):
    164         temp_home = self.mkdtemp()
    165         if os.name == 'posix':
    166             user_filename = os.path.join(temp_home, '.pydistutils.cfg')
    167         else:
    168             user_filename = os.path.join(temp_home, 'pydistutils.cfg')
    169         with open(user_filename, 'w') as f:
    170             f.write('[distutils]\n')
    171 
    172         def _expander(path):
    173             return temp_home
    174 
    175         old_expander = os.path.expanduser
    176         os.path.expanduser = _expander
    177         try:
    178             d = distutils.dist.Distribution()
    179             all_files = d.find_config_files()
    180             d = distutils.dist.Distribution(attrs={'script_args': ['--no-user-cfg']})
    181             files = d.find_config_files()
    182         finally:
    183             os.path.expanduser = old_expander
    184 
    185         self.assertEqual(len(all_files) - 1, len(files))
    186 
    187 
    188 class MetadataTestCase(support.TempdirManager, support.EnvironGuard, unittest.TestCase):
    189 
    190     def setUp(self):
    191         super(MetadataTestCase, self).setUp()
    192         self.argv = (sys.argv, sys.argv[:])
    193 
    194     def tearDown(self):
    195         sys.argv = self.argv[0]
    196         sys.argv[:] = self.argv[1]
    197         super(MetadataTestCase, self).tearDown()
    198 
    199     def test_simple_metadata(self):
    200         attrs = {'name': 'package',
    201          'version': '1.0'}
    202         dist = Distribution(attrs)
    203         meta = self.format_metadata(dist)
    204         self.assertTrue('Metadata-Version: 1.0' in meta)
    205         self.assertTrue('provides:' not in meta.lower())
    206         self.assertTrue('requires:' not in meta.lower())
    207         self.assertTrue('obsoletes:' not in meta.lower())
    208 
    209     def test_provides(self):
    210         attrs = {'name': 'package',
    211          'version': '1.0',
    212          'provides': ['package', 'package.sub']}
    213         dist = Distribution(attrs)
    214         self.assertEqual(dist.metadata.get_provides(), ['package', 'package.sub'])
    215         self.assertEqual(dist.get_provides(), ['package', 'package.sub'])
    216         meta = self.format_metadata(dist)
    217         self.assertTrue('Metadata-Version: 1.1' in meta)
    218         self.assertTrue('requires:' not in meta.lower())
    219         self.assertTrue('obsoletes:' not in meta.lower())
    220 
    221     def test_provides_illegal(self):
    222         self.assertRaises(ValueError, Distribution, {'name': 'package',
    223          'version': '1.0',
    224          'provides': ['my.pkg (splat)']})
    225 
    226     def test_requires(self):
    227         attrs = {'name': 'package',
    228          'version': '1.0',
    229          'requires': ['other', 'another (==1.0)']}
    230         dist = Distribution(attrs)
    231         self.assertEqual(dist.metadata.get_requires(), ['other', 'another (==1.0)'])
    232         self.assertEqual(dist.get_requires(), ['other', 'another (==1.0)'])
    233         meta = self.format_metadata(dist)
    234         self.assertTrue('Metadata-Version: 1.1' in meta)
    235         self.assertTrue('provides:' not in meta.lower())
    236         self.assertTrue('Requires: other' in meta)
    237         self.assertTrue('Requires: another (==1.0)' in meta)
    238         self.assertTrue('obsoletes:' not in meta.lower())
    239 
    240     def test_requires_illegal(self):
    241         self.assertRaises(ValueError, Distribution, {'name': 'package',
    242          'version': '1.0',
    243          'requires': ['my.pkg (splat)']})
    244 
    245     def test_obsoletes(self):
    246         attrs = {'name': 'package',
    247          'version': '1.0',
    248          'obsoletes': ['other', 'another (<1.0)']}
    249         dist = Distribution(attrs)
    250         self.assertEqual(dist.metadata.get_obsoletes(), ['other', 'another (<1.0)'])
    251         self.assertEqual(dist.get_obsoletes(), ['other', 'another (<1.0)'])
    252         meta = self.format_metadata(dist)
    253         self.assertTrue('Metadata-Version: 1.1' in meta)
    254         self.assertTrue('provides:' not in meta.lower())
    255         self.assertTrue('requires:' not in meta.lower())
    256         self.assertTrue('Obsoletes: other' in meta)
    257         self.assertTrue('Obsoletes: another (<1.0)' in meta)
    258 
    259     def test_obsoletes_illegal(self):
    260         self.assertRaises(ValueError, Distribution, {'name': 'package',
    261          'version': '1.0',
    262          'obsoletes': ['my.pkg (splat)']})
    263 
    264     def format_metadata(self, dist):
    265         sio = StringIO.StringIO()
    266         dist.metadata.write_pkg_file(sio)
    267         return sio.getvalue()
    268 
    269     def test_custom_pydistutils(self):
    270         if os.name == 'posix':
    271             user_filename = '.pydistutils.cfg'
    272         else:
    273             user_filename = 'pydistutils.cfg'
    274         temp_dir = self.mkdtemp()
    275         user_filename = os.path.join(temp_dir, user_filename)
    276         f = open(user_filename, 'w')
    277         try:
    278             f.write('.')
    279         finally:
    280             f.close()
    281 
    282         try:
    283             dist = Distribution()
    284             if sys.platform in ('linux', 'darwin'):
    285                 os.environ['HOME'] = temp_dir
    286                 files = dist.find_config_files()
    287                 self.assertTrue(user_filename in files)
    288             if sys.platform == 'win32':
    289                 os.environ['HOME'] = temp_dir
    290                 files = dist.find_config_files()
    291                 self.assertTrue(user_filename in files, '%r not found in %r' % (user_filename, files))
    292         finally:
    293             os.remove(user_filename)
    294 
    295     def test_fix_help_options(self):
    296         help_tuples = [('a', 'b', 'c', 'd'), (1, 2, 3, 4)]
    297         fancy_options = fix_help_options(help_tuples)
    298         self.assertEqual(fancy_options[0], ('a', 'b', 'c'))
    299         self.assertEqual(fancy_options[1], (1, 2, 3))
    300 
    301     def test_show_help(self):
    302         dist = Distribution()
    303         sys.argv = []
    304         dist.help = 1
    305         dist.script_name = 'setup.py'
    306         with captured_stdout() as s:
    307             dist.parse_command_line()
    308         output = [ line for line in s.getvalue().split('\n') if line.strip() != '' ]
    309         self.assertTrue(len(output) > 0)
    310 
    311     def test_long_description(self):
    312         long_desc = textwrap.dedent('        example::\n              We start here\n            and continue here\n          and end here.')
    313         attrs = {'name': 'package',
    314          'version': '1.0',
    315          'long_description': long_desc}
    316         dist = distutils.dist.Distribution(attrs)
    317         meta = self.format_metadata(dist)
    318         meta = meta.replace('\n' + '        ', '\n')
    319         self.assertTrue(long_desc in meta)
    320 
    321     def test_read_metadata(self):
    322         attrs = {'name': 'package',
    323          'version': '1.0',
    324          'long_description': 'desc',
    325          'description': 'xxx',
    326          'download_url': 'http://example.com',
    327          'keywords': ['one', 'two'],
    328          'requires': ['foo']}
    329         dist = Distribution(attrs)
    330         metadata = dist.metadata
    331         PKG_INFO = StringIO.StringIO()
    332         metadata.write_pkg_file(PKG_INFO)
    333         PKG_INFO.seek(0)
    334         metadata.read_pkg_file(PKG_INFO)
    335         self.assertEqual(metadata.name, 'package')
    336         self.assertEqual(metadata.version, '1.0')
    337         self.assertEqual(metadata.description, 'xxx')
    338         self.assertEqual(metadata.download_url, 'http://example.com')
    339         self.assertEqual(metadata.keywords, ['one', 'two'])
    340         self.assertEqual(metadata.platforms, ['UNKNOWN'])
    341         self.assertEqual(metadata.obsoletes, None)
    342         self.assertEqual(metadata.requires, ['foo'])
    343 
    344 
    345 def test_suite():
    346     suite = unittest.TestSuite()
    347     suite.addTest(unittest.makeSuite(DistributionTestCase))
    348     suite.addTest(unittest.makeSuite(MetadataTestCase))
    349     return suite
    350 
    351 
    352 if __name__ == '__main__':
    353     unittest.main(defaultTest='test_suite')