
    z%ie$                         d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	  e	j                  d       d Zd Z G d d	ej                        Zed
k(  r ej                           yy)    )DocXMLRPCServerN)supportT)modulec                     | sd S fd}|S )Nc                     | S N )funcs    G/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_docxmlrpc.py<lambda>z)make_request_and_skipIf.<locals>.<lambda>   s    D     c                     fd}|S )Nc                     | j                   j                  dd       | j                   j                          t        j                        )NGET/)clientrequestgetresponseunittestSkipTest)selfreasons    r   make_request_and_skipzImake_request_and_skipIf.<locals>.decorator.<locals>.make_request_and_skip   s8    KKs+KK##%##F++r   r	   )r
   r   r   s     r   	decoratorz*make_request_and_skipIf.<locals>.decorator   s    	, %$r   r	   )	conditionr   r   s    ` r   make_request_and_skipIfr      s       % r   c                     t        dd      } 	 | j                  d       | j                  d       | j                  d        G d dt              }| j                          | j                   |              d	 }d
t        fd} G d d      }| j                  |       | j                  d        | j                  |       | j                   |              | S #  | j                           xY w)N)	localhostr   F)logRequestsz"DocXMLRPCServer Test DocumentationzDocXMLRPCServer Test DocszmThis is an XML-RPC server's documentation, but the server can be used by POSTing to /RPC2. Try self.add, too.c                       e Zd Zd Zy)make_server.<locals>.TestClassc                     	 || _         y r   )arg)r   r#   s     r   test_methodz*make_server.<locals>.TestClass.test_method&   s    Mr   N)__name__
__module____qualname__r$   r	   r   r   	TestClassr!   %   s    r   r(   c                     	 | |z   S r   r	   xys     r   addzmake_server.<locals>.add-   s    
 q5Lr   r+   c                     	 | S r   r	   )r+   s    r   
annotationzmake_server.<locals>.annotation5   s
    -Hr   c                       e Zd ZdefdZy)(make_server.<locals>.ClassWithAnnotationr+   c                 "    |j                         S r   )decode)r   r+   s     r   method_annotationz:make_server.<locals>.ClassWithAnnotation.method_annotation:   s    xxz!r   N)r%   r&   r'   bytesr4   r	   r   r   ClassWithAnnotationr1   9   s    "5 "r   r6   c                     | |z
  S r   r	   r*   s     r   r   zmake_server.<locals>.<lambda>>   s
    AaC r   )
r   set_server_titleset_server_nameset_server_documentationobject register_introspection_functionsregister_instanceintregister_functionserver_close)servr(   r-   r/   r6   s        r   make_serverrB      s    +?D(BC89%%B	C
	 	
 	--/y{+		# 		" 	" 	s#/0z*245s   C
C C-c                       e Zd Zd Zd Zd Zd Zd Zd Z e	e
j                  j                  dk\  d      d	        Z e	e
j                  j                  dk\  d      d
        Zd Zd Zd Zy)DocXMLRPCHTTPGETServerc                 J   dt         _        t               | _        t	        j
                  | j                  j                        | _        | j                  j                          | j                  j                  d   }t        j                  j                  d|z        | _        y )NT)target   zlocalhost:%d)r   _send_traceback_headerrB   rA   	threadingThreadserve_foreverthreadstartserver_addresshttpr   HTTPConnection)r   PORTs     r   setUpzDocXMLRPCHTTPGETServer.setUpG   sn    15.M	&&dii.E.EFyy''*kk00$1FGr   c                     | j                   j                          dt        _        | j                  j                          | j                  j                          | j                  j                          y )NF)	r   closer   rH   rA   shutdownrL   joinr@   )r   s    r   tearDownzDocXMLRPCHTTPGETServer.tearDownR   sL     27.				 r   c                 
   | j                   j                  dd       | j                   j                         }| j                  |j                  d       | j                  |j                  d      d       |j                          y )Nr   r      Content-typeztext/html; charset=UTF-8r   r   r   assertEqualstatus	getheaderreadr   responses     r   test_valid_get_responsez.DocXMLRPCHTTPGETServer.test_valid_get_response[   sc    E3';;**,#.++N;=WX 	r   c                 
   | j                   j                  dd       | j                   j                         }| j                  |j                  d       | j                  |j                  d      d       |j                          y )Nr   z
/pydoc.cssrY   rZ   ztext/css; charset=UTF-8r[   r`   s     r   test_get_cssz#DocXMLRPCHTTPGETServer.test_get_csse   sc    E<0;;**,#.++N;=VW 	r   c                 
   | j                   j                  dd       | j                   j                         }| j                  |j                  d       | j                  |j                  d      d       |j                          y )Nr   z/spami  rZ   z
text/plainr[   r`   s     r   test_invalid_get_responsez0DocXMLRPCHTTPGETServer.test_invalid_get_responseo   s`    E7+;;**,#.++N;\Jr   c                     	 | j                   j                  dd       | j                   j                         }| j                  d|j	                                y )Nr   r   sU   <dl><dt><a name="-&lt;lambda&gt;"><strong>&lt;lambda&gt;</strong></a>(x, y)</dt></dl>r   r   r   assertInr_   r`   s     r   test_lambdaz"DocXMLRPCHTTPGETServer.test_lambdax   sJ    	 	E3';;**, Fmmo	'r      z)Docstrings are omitted with -O2 and abovec                     	 | j                   j                  dd       | j                   j                         j                         }| j	                  d|       y )Nr   r   sG  <dl><dt><a name="-add"><strong>add</strong></a>(x, y)</dt><dd><tt>Add&nbsp;two&nbsp;instances&nbsp;together.&nbsp;This&nbsp;follows&nbsp;<a href="https://peps.python.org/pep-0008/">PEP008</a>,&nbsp;but&nbsp;has&nbsp;nothing<br>
to&nbsp;do&nbsp;with&nbsp;<a href="https://www.rfc-editor.org/rfc/rfc1952.txt">RFC1952</a>.&nbsp;Case&nbsp;should&nbsp;matter:&nbsp;pEp008&nbsp;and&nbsp;rFC1952.&nbsp;&nbsp;Things<br>
that&nbsp;start&nbsp;with&nbsp;http&nbsp;and&nbsp;ftp&nbsp;should&nbsp;be&nbsp;auto-linked,&nbsp;too:<br>
<a href="http://google.com">http://google.com</a>.</tt></dd></dl>r   r   r   r_   ri   r`   s     r   test_autolinkingz'DocXMLRPCHTTPGETServer.test_autolinking   sP    	 	E3';;**,113	6 9A
	Br   c                     	 | j                   j                  dd       | j                   j                         j                         }| j	                  d|       y )Nr   r   s  <dl><dt><a name="-system.methodHelp"><strong>system.methodHelp</strong></a>(method_name)</dt><dd><tt><a href="#-system.methodHelp">system.methodHelp</a>('add')&nbsp;=&gt;&nbsp;"Adds&nbsp;two&nbsp;integers&nbsp;together"<br>
&nbsp;<br>
Returns&nbsp;a&nbsp;string&nbsp;containing&nbsp;documentation&nbsp;for&nbsp;the&nbsp;specified&nbsp;method.</tt></dd></dl>
<dl><dt><a name="-system.methodSignature"><strong>system.methodSignature</strong></a>(method_name)</dt><dd><tt><a href="#-system.methodSignature">system.methodSignature</a>('add')&nbsp;=&gt;&nbsp;[double,&nbsp;int,&nbsp;int]<br>
&nbsp;<br>
Returns&nbsp;a&nbsp;list&nbsp;describing&nbsp;the&nbsp;signature&nbsp;of&nbsp;the&nbsp;method.&nbsp;In&nbsp;the<br>
above&nbsp;example,&nbsp;the&nbsp;add&nbsp;method&nbsp;takes&nbsp;two&nbsp;integers&nbsp;as&nbsp;arguments<br>
and&nbsp;returns&nbsp;a&nbsp;double&nbsp;result.<br>
&nbsp;<br>
This&nbsp;server&nbsp;does&nbsp;NOT&nbsp;support&nbsp;system.methodSignature.</tt></dd></dl>rm   r`   s     r   test_system_methodsz*DocXMLRPCHTTPGETServer.test_system_methods   sN    	
 	E3';;**,1131 4<!	=r   c                     	 | j                   j                  dd       | j                   j                         }| j                  d|j	                                y )Nr   r   s-   Try&nbsp;self.<strong>add</strong>,&nbsp;too.rh   r`   s     r   test_autolink_dotted_methodsz3DocXMLRPCHTTPGETServer.test_autolink_dotted_methods   sE    	E3';;**,Jmmo	'r   c                     	 | j                   j                  dd       | j                   j                         }t        j                  j
                  dk\  rdnd}| j                  d|z   dz   |j                                y )Nr   r   rk   r   s5   <dd><tt>Use&nbsp;function&nbsp;annotations.</tt></dd>sJ   <dl><dt><a name="-annotation"><strong>annotation</strong></a>(x: int)</dt>se   </dl>
<dl><dt><a name="-method_annotation"><strong>method_annotation</strong></a>(x: bytes)</dt></dl>)r   r   r   sysflagsoptimizeri   r_   )r   ra   	docstrings      r   test_annotationsz'DocXMLRPCHTTPGETServer.test_annotations   sw    7E3';;**,II..!3SM 	 )*-CC MMO	r   c                    | j                   j                  d       | j                   j                  d       | j                  d| j                   j                         | j                  d| j                   j
                         | j                   j                         }t        j                  d|      j                         }t        j                  d|      j                         }| j                  d|       | j                  d|       y )Nztest_title<script>ztest_documentation<script>z<title>(.+?)</title>z<p><tt>(.+?)</tt></p>z/<title>Python: test_title&lt;script&gt;</title>z0<p><tt>test_documentation&lt;script&gt;</tt></p>)
rA   r8   r:   r\   server_titleserver_documentationgenerate_html_documentationresearchgroup)r   	generatedtitledocumentations       r   test_server_title_escapez/DocXMLRPCHTTPGETServer.test_server_title_escape   s     			""#78		**+GH-tyy/E/EF5		..	0 II99;			19=CCE		":IFLLNJERK][r   N)r%   r&   r'   rR   rW   rb   rd   rf   rj   r   rt   ru   rv   rn   rp   rr   rx   r   r	   r   r   rD   rD   F   s    	H!' SYY//14@BBBB, SYY//14@B=B=6'\r   rD   __main__)xmlrpc.serverr   http.clientrO   r}   rt   rI   r   testr   requires_working_socketr   rB   TestCaserD   r%   mainr	   r   r   <module>r      sf    )  	 
      t ,+ZX\X.. X\v zHMMO r   