python-2.5.2/win32/Lib/test/test_xmlrpc.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 import datetime
       
     2 import sys
       
     3 import unittest
       
     4 import xmlrpclib
       
     5 from test import test_support
       
     6 
       
     7 try:
       
     8     unicode
       
     9 except NameError:
       
    10     have_unicode = False
       
    11 else:
       
    12     have_unicode = True
       
    13 
       
    14 alist = [{'astring': 'foo@bar.baz.spam',
       
    15           'afloat': 7283.43,
       
    16           'anint': 2**20,
       
    17           'ashortlong': 2L,
       
    18           'anotherlist': ['.zyx.41'],
       
    19           'abase64': xmlrpclib.Binary("my dog has fleas"),
       
    20           'boolean': xmlrpclib.False,
       
    21           'unicode': u'\u4000\u6000\u8000',
       
    22           u'ukey\u4000': 'regular value',
       
    23           'datetime1': xmlrpclib.DateTime('20050210T11:41:23'),
       
    24           'datetime2': xmlrpclib.DateTime(
       
    25                         (2005, 02, 10, 11, 41, 23, 0, 1, -1)),
       
    26           'datetime3': xmlrpclib.DateTime(
       
    27                         datetime.datetime(2005, 02, 10, 11, 41, 23)),
       
    28           }]
       
    29 
       
    30 class XMLRPCTestCase(unittest.TestCase):
       
    31 
       
    32     def test_dump_load(self):
       
    33         self.assertEquals(alist,
       
    34                           xmlrpclib.loads(xmlrpclib.dumps((alist,)))[0][0])
       
    35 
       
    36     def test_dump_bare_datetime(self):
       
    37         # This checks that an unwrapped datetime.date object can be handled
       
    38         # by the marshalling code.  This can't be done via test_dump_load()
       
    39         # since with use_datetime set to 1 the unmarshaller would create
       
    40         # datetime objects for the 'datetime[123]' keys as well
       
    41         dt = datetime.datetime(2005, 02, 10, 11, 41, 23)
       
    42         s = xmlrpclib.dumps((dt,))
       
    43         (newdt,), m = xmlrpclib.loads(s, use_datetime=1)
       
    44         self.assertEquals(newdt, dt)
       
    45         self.assertEquals(m, None)
       
    46 
       
    47         (newdt,), m = xmlrpclib.loads(s, use_datetime=0)
       
    48         self.assertEquals(newdt, xmlrpclib.DateTime('20050210T11:41:23'))
       
    49 
       
    50     def test_dump_bare_date(self):
       
    51         # This checks that an unwrapped datetime.date object can be handled
       
    52         # by the marshalling code.  This can't be done via test_dump_load()
       
    53         # since the unmarshaller produces a datetime object
       
    54         d = datetime.datetime(2005, 02, 10, 11, 41, 23).date()
       
    55         s = xmlrpclib.dumps((d,))
       
    56         (newd,), m = xmlrpclib.loads(s, use_datetime=1)
       
    57         self.assertEquals(newd.date(), d)
       
    58         self.assertEquals(newd.time(), datetime.time(0, 0, 0))
       
    59         self.assertEquals(m, None)
       
    60 
       
    61         (newdt,), m = xmlrpclib.loads(s, use_datetime=0)
       
    62         self.assertEquals(newdt, xmlrpclib.DateTime('20050210T00:00:00'))
       
    63 
       
    64     def test_dump_bare_time(self):
       
    65         # This checks that an unwrapped datetime.time object can be handled
       
    66         # by the marshalling code.  This can't be done via test_dump_load()
       
    67         # since the unmarshaller produces a datetime object
       
    68         t = datetime.datetime(2005, 02, 10, 11, 41, 23).time()
       
    69         s = xmlrpclib.dumps((t,))
       
    70         (newt,), m = xmlrpclib.loads(s, use_datetime=1)
       
    71         today = datetime.datetime.now().date().strftime("%Y%m%d")
       
    72         self.assertEquals(newt.time(), t)
       
    73         self.assertEquals(newt.date(), datetime.datetime.now().date())
       
    74         self.assertEquals(m, None)
       
    75 
       
    76         (newdt,), m = xmlrpclib.loads(s, use_datetime=0)
       
    77         self.assertEquals(newdt, xmlrpclib.DateTime('%sT11:41:23'%today))
       
    78 
       
    79     def test_bug_1164912 (self):
       
    80         d = xmlrpclib.DateTime()
       
    81         ((new_d,), dummy) = xmlrpclib.loads(xmlrpclib.dumps((d,),
       
    82                                             methodresponse=True))
       
    83         self.assert_(isinstance(new_d.value, str))
       
    84 
       
    85         # Check that the output of dumps() is still an 8-bit string
       
    86         s = xmlrpclib.dumps((new_d,), methodresponse=True)
       
    87         self.assert_(isinstance(s, str))
       
    88 
       
    89     def test_dump_big_long(self):
       
    90         self.assertRaises(OverflowError, xmlrpclib.dumps, (2L**99,))
       
    91 
       
    92     def test_dump_bad_dict(self):
       
    93         self.assertRaises(TypeError, xmlrpclib.dumps, ({(1,2,3): 1},))
       
    94 
       
    95     def test_dump_big_int(self):
       
    96         if sys.maxint > 2L**31-1:
       
    97             self.assertRaises(OverflowError, xmlrpclib.dumps,
       
    98                               (int(2L**34),))
       
    99 
       
   100     def test_dump_none(self):
       
   101         value = alist + [None]
       
   102         arg1 = (alist + [None],)
       
   103         strg = xmlrpclib.dumps(arg1, allow_none=True)
       
   104         self.assertEquals(value,
       
   105                           xmlrpclib.loads(strg)[0][0])
       
   106         self.assertRaises(TypeError, xmlrpclib.dumps, (arg1,))
       
   107 
       
   108     def test_default_encoding_issues(self):
       
   109         # SF bug #1115989: wrong decoding in '_stringify'
       
   110         utf8 = """<?xml version='1.0' encoding='iso-8859-1'?>
       
   111                   <params>
       
   112                     <param><value>
       
   113                       <string>abc \x95</string>
       
   114                       </value></param>
       
   115                     <param><value>
       
   116                       <struct>
       
   117                         <member>
       
   118                           <name>def \x96</name>
       
   119                           <value><string>ghi \x97</string></value>
       
   120                           </member>
       
   121                         </struct>
       
   122                       </value></param>
       
   123                   </params>
       
   124                   """
       
   125 
       
   126         # sys.setdefaultencoding() normally doesn't exist after site.py is
       
   127         # loaded.  reload(sys) is the way to get it back.
       
   128         old_encoding = sys.getdefaultencoding()
       
   129         setdefaultencoding_existed = hasattr(sys, "setdefaultencoding")
       
   130         reload(sys) # ugh!
       
   131         sys.setdefaultencoding("iso-8859-1")
       
   132         try:
       
   133             (s, d), m = xmlrpclib.loads(utf8)
       
   134         finally:
       
   135             sys.setdefaultencoding(old_encoding)
       
   136             if not setdefaultencoding_existed:
       
   137                 del sys.setdefaultencoding
       
   138 
       
   139         items = d.items()
       
   140         if have_unicode:
       
   141             self.assertEquals(s, u"abc \x95")
       
   142             self.assert_(isinstance(s, unicode))
       
   143             self.assertEquals(items, [(u"def \x96", u"ghi \x97")])
       
   144             self.assert_(isinstance(items[0][0], unicode))
       
   145             self.assert_(isinstance(items[0][1], unicode))
       
   146         else:
       
   147             self.assertEquals(s, "abc \xc2\x95")
       
   148             self.assertEquals(items, [("def \xc2\x96", "ghi \xc2\x97")])
       
   149 
       
   150 def test_main():
       
   151     test_support.run_unittest(XMLRPCTestCase)
       
   152 
       
   153 
       
   154 if __name__ == "__main__":
       
   155     test_main()