@@ -184,19 +184,26 @@ def test_dump_none(self):
184184 self .assertRaises (TypeError , xmlrpclib .dumps , (arg1 ,))
185185
186186 def test_dump_encoding (self ):
187- value = '\u20ac '
187+ value = {'key\u20ac \xa4 ' :
188+ 'value\u20ac \xa4 ' }
188189 strg = xmlrpclib .dumps ((value ,), encoding = 'iso-8859-15' )
189190 strg = "<?xml version='1.0' encoding='iso-8859-15'?>" + strg
190191 self .assertEqual (xmlrpclib .loads (strg )[0 ][0 ], value )
191- strg = strg .encode ('iso-8859-15' )
192+ strg = strg .encode ('iso-8859-15' , 'xmlcharrefreplace' )
192193 self .assertEqual (xmlrpclib .loads (strg )[0 ][0 ], value )
193194
194195 strg = xmlrpclib .dumps ((value ,), encoding = 'iso-8859-15' ,
195196 methodresponse = True )
196197 self .assertEqual (xmlrpclib .loads (strg )[0 ][0 ], value )
197- strg = strg .encode ('iso-8859-15' )
198+ strg = strg .encode ('iso-8859-15' , 'xmlcharrefreplace' )
198199 self .assertEqual (xmlrpclib .loads (strg )[0 ][0 ], value )
199200
201+ methodname = 'method\u20ac \xa4 '
202+ strg = xmlrpclib .dumps ((value ,), encoding = 'iso-8859-15' ,
203+ methodname = methodname )
204+ self .assertEqual (xmlrpclib .loads (strg )[0 ][0 ], value )
205+ self .assertEqual (xmlrpclib .loads (strg )[1 ], methodname )
206+
200207 def test_dump_bytes (self ):
201208 sample = b"my dog has fleas"
202209 self .assertEqual (sample , xmlrpclib .Binary (sample ))
@@ -430,6 +437,7 @@ def get_request(self):
430437 serv .register_multicall_functions ()
431438 serv .register_function (pow )
432439 serv .register_function (lambda x ,y : x + y , 'add' )
440+ serv .register_function (lambda x : x , 'têšt' )
433441 serv .register_function (my_function )
434442 testInstance = TestInstanceClass ()
435443 serv .register_instance (testInstance , allow_dotted_names = True )
@@ -599,7 +607,7 @@ def test_nonascii(self):
599607
600608 def test_client_encoding (self ):
601609 start_string = '\u20ac '
602- end_string = '\xa3 '
610+ end_string = '\xa4 '
603611
604612 try :
605613 p = xmlrpclib .ServerProxy (URL , encoding = 'iso-8859-15' )
@@ -611,6 +619,16 @@ def test_client_encoding(self):
611619 # protocol error; provide additional information in test output
612620 self .fail ("%s\n %s" % (e , getattr (e , "headers" , "" )))
613621
622+ def test_nonascii_methodname (self ):
623+ try :
624+ p = xmlrpclib .ServerProxy (URL , encoding = 'ascii' )
625+ self .assertEqual (p .têšt (42 ), 42 )
626+ except (xmlrpclib .ProtocolError , socket .error ) as e :
627+ # ignore failures due to non-blocking socket unavailable errors.
628+ if not is_unavailable_exception (e ):
629+ # protocol error; provide additional information in test output
630+ self .fail ("%s\n %s" % (e , getattr (e , "headers" , "" )))
631+
614632 # [ch] The test 404 is causing lots of false alarms.
615633 def XXXtest_404 (self ):
616634 # send POST with http.client, it should return 404 header and
@@ -624,7 +642,7 @@ def XXXtest_404(self):
624642 self .assertEqual (response .reason , 'Not Found' )
625643
626644 def test_introspection1 (self ):
627- expected_methods = set (['pow' , 'div' , 'my_function' , 'add' ,
645+ expected_methods = set (['pow' , 'div' , 'my_function' , 'add' , 'têšt' ,
628646 'system.listMethods' , 'system.methodHelp' ,
629647 'system.methodSignature' , 'system.multicall' ,
630648 'Fixture' ])
@@ -767,7 +785,7 @@ def threadFunc(evt, numrequests, requestHandler=None, encoding=None):
767785
768786 def test_server_encoding (self ):
769787 start_string = '\u20ac '
770- end_string = '\xa3 '
788+ end_string = '\xa4 '
771789
772790 try :
773791 p = xmlrpclib .ServerProxy (URL )
0 commit comments