a 5êdg±"ã@sjddlmZddlZddlZddlZddlZddlZdd„Zdd„Z Gdd„dej ƒZ e d krfe  ¡dS) é)ÚDocXMLRPCServerNcs|s dd„S‡fdd„}|S)NcSs|S©N©)Úfuncrrú//usr/local/lib/python3.9/test/test_docxmlrpc.pyÚ óz)make_request_and_skipIf..cs‡fdd„}|S)Ncs&|j dd¡|j ¡t ˆ¡‚dS)NÚGETú/)ÚclientÚrequestÚ getresponseÚunittestZSkipTest©Úself©ÚreasonrrÚmake_request_and_skips zImake_request_and_skipIf..decorator..make_request_and_skipr)rrrrrÚ decorator s z*make_request_and_skipIf..decoratorr)Z conditionrrrrrÚmake_request_and_skipIfs rcCsÂtddd}zš| d¡| d¡| d¡Gdd„dtƒ}| ¡| |ƒ¡d d „}td œd d „}Gdd„dƒ}| |¡| dd„¡| |¡| |ƒ¡|WS|  ¡‚Yn0dS)N)Ú localhostrF)Z logRequestsz"DocXMLRPCServer Test DocumentationzDocXMLRPCServer Test DocszmThis is an XML-RPC server's documentation, but the server can be used by POSTing to /RPC2. Try self.add, too.c@seZdZdd„ZdS)zmake_server..TestClasscSs ||_dSr)Úarg)rrrrrÚ test_method#sz*make_server..TestClass.test_methodN)Ú__name__Ú __module__Ú __qualname__rrrrrÚ TestClass"srcSs||Srr©ÚxÚyrrrÚadd*szmake_server..add©rcSs|Srrr!rrrÚ annotation2szmake_server..annotationc@seZdZedœdd„ZdS)z(make_server..ClassWithAnnotationr!cSs| ¡Sr)Údecode)rrrrrÚmethod_annotation7sz:make_server..ClassWithAnnotation.method_annotationN)rrrÚbytesr$rrrrÚClassWithAnnotation6sr&cSs||Srrrrrrr;rzmake_server..) rÚset_server_titleZset_server_nameÚset_server_documentationÚobjectZ register_introspection_functionsZregister_instanceÚintZregister_functionÚ server_close)Úservrr r"r&rrrÚ make_servers*   ÿ    r-c@s€eZdZdd„Zdd„Zdd„Zdd„Zd d „Zee j j d kd ƒd d„ƒZ ee j j d kd ƒdd„ƒZ dd„Zdd„Zdd„ZdS)ÚDocXMLRPCHTTPGETServercCsLdt_tƒ|_tj|jjd|_|j ¡|jj d}t j   d|¡|_ dS)NT)Útargetéz localhost:%d) rÚ_send_traceback_headerr-r,Ú threadingÚThreadZ serve_foreverÚthreadÚstartZserver_addressÚhttpr ZHTTPConnection)rZPORTrrrÚsetUpDs   zDocXMLRPCHTTPGETServer.setUpcCs2|j ¡dt_|j ¡|j ¡|j ¡dS)NF) r Úcloserr1r,Úshutdownr4Újoinr+rrrrÚtearDownOs    zDocXMLRPCHTTPGETServer.tearDowncCsD|j dd¡|j ¡}| |jd¡| | d¡d¡| ¡dS)Nr r éÈú Content-typez text/html©r r r Ú assertEqualÚstatusZ getheaderÚread©rÚresponserrrÚtest_valid_get_responseXs  z.DocXMLRPCHTTPGETServer.test_valid_get_responsecCsD|j dd¡|j ¡}| |jd¡| | d¡d¡| ¡dS)Nr z/spami”r=z text/plainr>rBrrrÚtest_invalid_get_responsebs  z0DocXMLRPCHTTPGETServer.test_invalid_get_responsecCs,|j dd¡|j ¡}| d| ¡¡dS)Nr r sU
<lambda>(x, y)
©r r r ÚassertInrArBrrrÚ test_lambdaks  þz"DocXMLRPCHTTPGETServer.test_lambdaéz)Docstrings are omitted with -O2 and abovecCs,|j dd¡|j ¡ ¡}| d|¡dS)Nr r sM
add(x, y)
Add two instances together. This follows PEP008, but has nothing
to do with RFC1952. Case should matter: pEp008 and rFC1952.  Things
that start with http and ftp should be auto-linked, too:
http://google.com.
©r r r rArGrBrrrÚtest_autolinkingys  öz'DocXMLRPCHTTPGETServer.test_autolinkingcCs,|j dd¡|j ¡ ¡}| d|¡dS)Nr r sÕ
system.methodHelp(method_name)
system.methodHelp('add') => "Adds two integers together"
 
Returns a string containing documentation for the specified method.
system.methodSignature(method_name)
system.methodSignature('add') => [double, int, int]
 
Returns a list describing the signature of the method. In the
above example, the add method takes two integers as arguments
and returns a double result.
 
This server does NOT support system.methodSignature.
rJrBrrrÚtest_system_methods‘s ðz*DocXMLRPCHTTPGETServer.test_system_methodscCs,|j dd¡|j ¡}| d| ¡¡dS)Nr r s-Try self.add, too.rFrBrrrÚtest_autolink_dotted_methods®s  ÿz3DocXMLRPCHTTPGETServer.test_autolink_dotted_methodscCsH|j dd¡|j ¡}tjjdkr(dnd}| d|d| ¡¡dS)Nr r rIrs5
Use function annotations.
sJ
annotation(x: int)
se
method_annotation(x: bytes)
)r r r ÚsysÚflagsÚoptimizerGrA)rrCZ docstringrrrÚtest_annotations·s ÿÿÿûz'DocXMLRPCHTTPGETServer.test_annotationscCs~|j d¡|j d¡| d|jj¡| d|jj¡|j ¡}t d|¡  ¡}t d|¡  ¡}| d|¡| d|¡dS)Nztest_title