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

test_register.py (5901B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\tests\test_register.py
      2 import sys
      3 import os
      4 import unittest
      5 import getpass
      6 import urllib2
      7 import warnings
      8 from test.test_support import check_warnings
      9 from distutils.command import register as register_module
     10 from distutils.command.register import register
     11 from distutils.core import Distribution
     12 from distutils.errors import DistutilsSetupError
     13 from distutils.tests import support
     14 from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase
     15 PYPIRC_NOPASSWORD = '[distutils]\n\nindex-servers =\n    server1\n\n[server1]\nusername:me\n'
     16 WANTED_PYPIRC = '[distutils]\nindex-servers =\n    pypi\n\n[pypi]\nusername:tarek\npassword:password\n'
     17 
     18 class RawInputs(object):
     19 
     20     def __init__(self, *answers):
     21         self.answers = answers
     22         self.index = 0
     23 
     24     def __call__(self, prompt = ''):
     25         try:
     26             return self.answers[self.index]
     27         finally:
     28             self.index += 1
     29 
     30 
     31 class FakeOpener(object):
     32 
     33     def __init__(self):
     34         self.reqs = []
     35 
     36     def __call__(self, *args):
     37         return self
     38 
     39     def open(self, req):
     40         self.reqs.append(req)
     41         return self
     42 
     43     def read(self):
     44         return 'xxx'
     45 
     46 
     47 class RegisterTestCase(PyPIRCCommandTestCase):
     48 
     49     def setUp(self):
     50         super(RegisterTestCase, self).setUp()
     51         self._old_getpass = getpass.getpass
     52 
     53         def _getpass(prompt):
     54             return 'password'
     55 
     56         getpass.getpass = _getpass
     57         self.old_opener = urllib2.build_opener
     58         self.conn = urllib2.build_opener = FakeOpener()
     59 
     60     def tearDown(self):
     61         getpass.getpass = self._old_getpass
     62         urllib2.build_opener = self.old_opener
     63         super(RegisterTestCase, self).tearDown()
     64 
     65     def _get_cmd(self, metadata = None):
     66         if metadata is None:
     67             metadata = {'url': 'xxx',
     68              'author': 'xxx',
     69              'author_email': 'xxx',
     70              'name': 'xxx',
     71              'version': 'xxx'}
     72         pkg_info, dist = self.create_dist(**metadata)
     73         return register(dist)
     74 
     75     def test_create_pypirc(self):
     76         cmd = self._get_cmd()
     77         self.assertTrue(not os.path.exists(self.rc))
     78         inputs = RawInputs('1', 'tarek', 'y')
     79         register_module.raw_input = inputs.__call__
     80         try:
     81             cmd.run()
     82         finally:
     83             del register_module.raw_input
     84 
     85         self.assertTrue(os.path.exists(self.rc))
     86         f = open(self.rc)
     87         try:
     88             content = f.read()
     89             self.assertEqual(content, WANTED_PYPIRC)
     90         finally:
     91             f.close()
     92 
     93         def _no_way(prompt = ''):
     94             raise AssertionError(prompt)
     95 
     96         register_module.raw_input = _no_way
     97         cmd.show_response = 1
     98         cmd.run()
     99         self.assertTrue(self.conn.reqs, 2)
    100         req1 = dict(self.conn.reqs[0].headers)
    101         req2 = dict(self.conn.reqs[1].headers)
    102         self.assertEqual(req2['Content-length'], req1['Content-length'])
    103         self.assertTrue('xxx' in self.conn.reqs[1].data)
    104 
    105     def test_password_not_in_file(self):
    106         self.write_file(self.rc, PYPIRC_NOPASSWORD)
    107         cmd = self._get_cmd()
    108         cmd._set_config()
    109         cmd.finalize_options()
    110         cmd.send_metadata()
    111         self.assertEqual(cmd.distribution.password, 'password')
    112 
    113     def test_registering(self):
    114         cmd = self._get_cmd()
    115         inputs = RawInputs('2', 'tarek', 'tarek@ziade.org')
    116         register_module.raw_input = inputs.__call__
    117         try:
    118             cmd.run()
    119         finally:
    120             del register_module.raw_input
    121 
    122         self.assertTrue(self.conn.reqs, 1)
    123         req = self.conn.reqs[0]
    124         headers = dict(req.headers)
    125         self.assertEqual(headers['Content-length'], '608')
    126         self.assertTrue('tarek' in req.data)
    127 
    128     def test_password_reset(self):
    129         cmd = self._get_cmd()
    130         inputs = RawInputs('3', 'tarek@ziade.org')
    131         register_module.raw_input = inputs.__call__
    132         try:
    133             cmd.run()
    134         finally:
    135             del register_module.raw_input
    136 
    137         self.assertTrue(self.conn.reqs, 1)
    138         req = self.conn.reqs[0]
    139         headers = dict(req.headers)
    140         self.assertEqual(headers['Content-length'], '290')
    141         self.assertTrue('tarek' in req.data)
    142 
    143     def test_strict(self):
    144         cmd = self._get_cmd({})
    145         cmd.ensure_finalized()
    146         cmd.strict = 1
    147         self.assertRaises(DistutilsSetupError, cmd.run)
    148         try:
    149             import docutils
    150         except ImportError:
    151             return
    152 
    153         metadata = {'url': 'xxx',
    154          'author': 'xxx',
    155          'author_email': u'\xc3\xa9x\xc3\xa9x\xc3\xa9',
    156          'name': 'xxx',
    157          'version': 'xxx',
    158          'long_description': 'title\n==\n\ntext'}
    159         cmd = self._get_cmd(metadata)
    160         cmd.ensure_finalized()
    161         cmd.strict = 1
    162         self.assertRaises(DistutilsSetupError, cmd.run)
    163         metadata['long_description'] = 'title\n=====\n\ntext'
    164         cmd = self._get_cmd(metadata)
    165         cmd.ensure_finalized()
    166         cmd.strict = 1
    167         inputs = RawInputs('1', 'tarek', 'y')
    168         register_module.raw_input = inputs.__call__
    169         try:
    170             cmd.run()
    171         finally:
    172             del register_module.raw_input
    173 
    174         cmd = self._get_cmd()
    175         cmd.ensure_finalized()
    176         inputs = RawInputs('1', 'tarek', 'y')
    177         register_module.raw_input = inputs.__call__
    178         try:
    179             cmd.run()
    180         finally:
    181             del register_module.raw_input
    182 
    183     def test_check_metadata_deprecated(self):
    184         cmd = self._get_cmd()
    185         with check_warnings() as w:
    186             warnings.simplefilter('always')
    187             cmd.check_metadata()
    188             self.assertEqual(len(w.warnings), 1)
    189 
    190 
    191 def test_suite():
    192     return unittest.makeSuite(RegisterTestCase)
    193 
    194 
    195 if __name__ == '__main__':
    196     unittest.main(defaultTest='test_suite')