a
    ¼3jä  ã                   @   sˆ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl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 d dlmZ d dlm Z  d dlm!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dlm*Z* G dd„ dƒZ+ej,j-r2d	Z.nd
Z.d /¡ Z0e1dd„ e.D ƒƒZ2d /¡ Z3e1dd„ e.D ƒƒZ4d 5de j6¡Z7dZ8d /¡ Z9d /¡ Z:d /¡ Z;d /¡ Z<d /¡ Z=dd„ Z>dd„ Z?dd„ Z@dd„ ZAd d!„ ZBG d"d#„ d#ejCƒZDG d$d%„ d%ejCƒZEG d&d'„ d'eDƒZFG d(d)„ d)ejCƒZGG d*d+„ d+ejCƒZHG d,d-„ d-eDƒZIG d.d/„ d/ejCƒZJG d0d1„ d1ejCƒZKG d2d3„ d3ejCƒZLd4d5„ ZMeNd6kr„e O¡  dS )7é    N)ÚStringIO)Ú
namedtuple)Úassert_python_ok)	ÚTESTFNÚrmtreeÚreap_childrenÚreap_threadsÚcaptured_outputÚcaptured_stdoutÚcaptured_stderrÚunlinkÚrequires_docstrings)Ú	pydoc_modc                   @   s   e Zd ZdS )ÚnonasciiN©Ú__name__Ú
__module__Ú__qualname__© r   r   úK/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_pydoc.pyr   #   s   r   )ú.dictionary for instance variables (if defined)ú2list of weak references to the object (if defined)r   r   )Ú r   r   r   aq  
NAME
    test.pydoc_mod - This is a test module for test_pydoc
%s
CLASSES
    builtins.object
        A
        B
        C
    
    class A(builtins.object)
     |  Hello and goodbye
     |  
     |  Methods defined here:
     |  
     |  __init__()
     |      Wow, I have no function!
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  __dict__%s
     |  
     |  __weakref__%s
    
    class B(builtins.object)
     |  Data descriptors defined here:
     |  
     |  __dict__%s
     |  
     |  __weakref__%s
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes defined here:
     |  
     |  NO_MEANING = 'eggs'
     |  
     |  __annotations__ = {'NO_MEANING': <class 'str'>}
    
    class C(builtins.object)
     |  Methods defined here:
     |  
     |  get_answer(self)
     |      Return say_no()
     |  
     |  is_it_true(self)
     |      Return self.get_answer()
     |  
     |  say_no(self)
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  __dict__
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)

FUNCTIONS
    doc_func()
        This function solves all of the world's problems:
        hunger
        lack of Python
        war
    
    nodoc_func()

DATA
    __xyz__ = 'X, Y and Z'

VERSION
    1.2.3.4

AUTHOR
    Benjamin Peterson

CREDITS
    Nobody

FILE
    %s
c                 c   s   | ]}|rd | ndV  qdS )z
     |      r   Nr   ©Ú.0Úsr   r   r   Ú	<genexpr>ƒ   s   ÿr   a*  
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="test.html"><font color="#ffffff">test</font></a>.pydoc_mod</strong></big></big> (version 1.2.3.4)</font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:%s">%s</a>%s</font></td></tr></table>
    <p><tt>This&nbsp;is&nbsp;a&nbsp;test&nbsp;module&nbsp;for&nbsp;test_pydoc</tt></p>
<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
    
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl>
<dt><font face="helvetica, arial"><a href="builtins.html#object">builtins.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="test.pydoc_mod.html#A">A</a>
</font></dt><dt><font face="helvetica, arial"><a href="test.pydoc_mod.html#B">B</a>
</font></dt><dt><font face="helvetica, arial"><a href="test.pydoc_mod.html#C">C</a>
</font></dt></dl>
</dd>
</dl>
 <p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="A">class <strong>A</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
    
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>Hello&nbsp;and&nbsp;goodbye<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%%">Methods defined here:<br>
<dl><dt><a name="A-__init__"><strong>__init__</strong></a>()</dt><dd><tt>Wow,&nbsp;I&nbsp;have&nbsp;no&nbsp;function!</tt></dd></dl>

<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>%s</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>%s</tt></dd>
</dl>
</td></tr></table> <p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="B">class <strong>B</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
    
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>%s</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>%s</tt></dd>
</dl>
<hr>
Data and other attributes defined here:<br>
<dl><dt><strong>NO_MEANING</strong> = 'eggs'</dl>

<dl><dt><strong>__annotations__</strong> = {'NO_MEANING': &lt;class 'str'&gt;}</dl>

</td></tr></table> <p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="C">class <strong>C</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
    
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">Methods defined here:<br>
<dl><dt><a name="C-get_answer"><strong>get_answer</strong></a>(self)</dt><dd><tt>Return&nbsp;<a href="#C-say_no">say_no</a>()</tt></dd></dl>

<dl><dt><a name="C-is_it_true"><strong>is_it_true</strong></a>(self)</dt><dd><tt>Return&nbsp;self.<a href="#C-get_answer">get_answer</a>()</tt></dd></dl>

<dl><dt><a name="C-say_no"><strong>say_no</strong></a>(self)</dt></dl>

<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></table></td></tr></table><p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt><a name="-doc_func"><strong>doc_func</strong></a>()</dt><dd><tt>This&nbsp;function&nbsp;solves&nbsp;all&nbsp;of&nbsp;the&nbsp;world's&nbsp;problems:<br>
hunger<br>
lack&nbsp;of&nbsp;Python<br>
war</tt></dd></dl>
 <dl><dt><a name="-nodoc_func"><strong>nodoc_func</strong></a>()</dt></dl>
</td></tr></table><p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#55aa55">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
    
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><strong>__xyz__</strong> = 'X, Y and Z'</td></tr></table><p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#7799ee">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
    
<tr><td bgcolor="#7799ee"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">Benjamin&nbsp;Peterson</td></tr></table><p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#7799ee">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Credits</strong></big></font></td></tr>
    
<tr><td bgcolor="#7799ee"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%">Nobody</td></tr></table>
c                 c   s   | ]}|  d d¡V  qdS )ú z&nbsp;N)Úreplacer   r   r   r   r     s   ÿz~No Python documentation found for %r.
Use help() to get the interactive help utility.
Use help(str) for help on the str class.Ú
z7problem in %s - ModuleNotFoundError: No module named %ra/  
Help on class DA in module %s:

class DA(builtins.object)
 |  Data descriptors defined here:
 |  
 |  __dict__%s
 |  
 |  __weakref__%s
 |  
 |  ham
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes inherited from Meta:
 |  
 |  ham = 'spam'
z‡
Help on class Class in module %s:

class Class(builtins.object)
 |  Data and other attributes inherited from Meta:
 |  
 |  LIFE = 42
zˆ
Help on class Class1 in module %s:

class Class1(builtins.object)
 |  Data and other attributes inherited from Meta1:
 |  
 |  one = 1
a  
Help on class Class2 in module %s:

class Class2(Class1)
 |  Method resolution order:
 |      Class2
 |      Class1
 |      builtins.object
 |  
 |  Data and other attributes inherited from Meta1:
 |  
 |  one = 1
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes inherited from Meta3:
 |  
 |  three = 3
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes inherited from Meta2:
 |  
 |  two = 2
z€
Help on class C in module %s:

class C(builtins.object)
 |  Data and other attributes defined here:
 |  
 |  here = 'present!'
c                 O   s2   || f }t dtjg|¢R i |¤Ž\}}}| ¡ S )Nz-B)r   ÚpydocÚ__file__Ústrip)Úmodule_nameÚargsÚenvÚrcÚoutÚerrr   r   r   Ú	run_pydocR  s    
 r)   c                 C   s<   t  ¡ }| | ¡}| t¡pd}|r0d| d }| ¡ |fS )Nr   z<br><a href="z">Module Docs</a>)r    ÚHTMLDocÚ	docmoduleÚ	getdoclocr   r"   )ÚmoduleÚdocÚoutputÚlocr   r   r   Úget_pydoc_html\  s    
r1   c                 C   s:   t jj}t jj}|||tƒƒƒ}t ¡ }|j| |d}|S )N)Úbasedir)ÚosÚpathÚabspathÚdirnamer!   r    ÚTextDocr,   )r-   r5   r6   r2   r.   r0   r   r   r   Úget_pydoc_linke  s    r8   c                 C   sR   t  ¡ }| t¡pd}|r&d| d }| | ¡}t d¡}| d|¡}| ¡ |fS )Nr   z
MODULE DOCS
    r   ú.)	r    r7   r,   r   r+   ÚreÚcompileÚsubr"   )r-   r.   r0   r/   Zpattr   r   r   Úget_pydoc_textn  s    

r=   c                 C   s4   |   d¡\}}}|  d¡\}}}|  d¡\}}}|S )Nz</head>z<title>z</title>)Ú	partition)ÚtextÚheaderÚ_Útitler   r   r   Úget_html_title|  s    rC   c                   @   s.   e Zd Zddd„Zejd	dd„ƒZdd„ ZdS )
ÚPydocBaseTestNc                    s&   |pt j t¡g‰ d‡ ‡fdd„	}|S )Nr   c                    s   ˆ| pˆ ||ƒS ©Nr   )r4   ÚprefixÚonerror©Zdefault_pathÚwalk_packagesr   r   ÚwrapperŒ  s    z8PydocBaseTest._restricted_walk_packages.<locals>.wrapper)Nr   N)r3   r4   r6   r!   )ÚselfrI   r4   rJ   r   rH   r   Ú_restricted_walk_packages†  s    z'PydocBaseTest._restricted_walk_packagesc                 c   s2   t j}|  ||¡t _zd V  W |t _n|t _0 d S rE   )ÚpkgutilrI   rL   )rK   r4   rI   r   r   r   Úrestrict_walk_packages  s    ÿz$PydocBaseTest.restrict_walk_packagesc                 C   s&   t  |d¡}t|ƒ}|  |||¡ |S )Nz	text/html)r    Ú_url_handlerrC   ÚassertEqual)rK   ÚurlZexpected_titler?   Úresultr   r   r   Úcall_url_handlerš  s    zPydocBaseTest.call_url_handler)N)N)r   r   r   rL   Ú
contextlibÚcontextmanagerrN   rS   r   r   r   r   rD   „  s   

	rD   c                   @   s¨  e Zd ZdZe ejjdkd¡e e	edƒo2e 
¡ d¡edd„ ƒƒƒZe ejjdkd¡e e	edƒole 
¡ d¡edd	„ ƒƒƒZd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze ejjdkd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Ze ejjdkd¡e e	edƒo,e 
¡ d¡ed'd(„ ƒƒƒZd)d*„ Zd+d,„ Zd-d.„ Ze ejjdkd¡d/d0„ ƒZ d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;d<„ Z&dS )=ÚPydocDocTestNé   ú)Docstrings are omitted with -O2 and aboveÚgettraceú1trace function introduces __locals__ unexpectedlyc                 C   sD   t tƒ\}}t t¡}tj |¡}t|||ft  }|  	||¡ d S rE   )
r1   r   ÚinspectÚ
getabsfileÚurllibÚparseÚquoteÚexpected_html_patternÚexpected_html_data_docstringsrP   )rK   rR   Údoc_locZmod_fileZmod_urlZexpected_htmlr   r   r   Útest_html_doc¥  s    
ÿÿzPydocDocTest.test_html_docc                 C   s6   t tƒ\}}t|ft t t¡f  }|  ||¡ d S rE   )r=   r   Úexpected_text_patternÚexpected_text_data_docstringsr[   r\   rP   )rK   rR   rb   Úexpected_textr   r   r   Útest_text_doc³  s    ÿ
þÿzPydocDocTest.test_text_docc                 C   s4   dd l }G dd„ d|jƒ}t |¡}|  d|¡ d S )Nr   c                   @   s   e Zd ZdZdZdS )zIPydocDocTest.test_text_enum_member_with_value_zero.<locals>.BinaryIntegerr   é   N)r   r   r   ZzeroÚoner   r   r   r   ÚBinaryIntegerÄ  s   rj   z<BinaryInteger.zero: 0>)ÚenumÚIntEnumr    Ú
render_docÚassertIn)rK   rk   rj   r.   r   r   r   Ú%test_text_enum_member_with_value_zeroÀ  s    
z2PydocDocTest.test_text_enum_member_with_value_zeroc                 C   s   t tjjƒ}|  d|¡ d S )Nzxml.etree.elementtree)r8   ÚxmlÚetreeZElementTreern   )rK   Zdoc_linkr   r   r   Ú,test_mixed_case_module_names_are_lower_casedÊ  s    z9PydocDocTest.test_mixed_case_module_names_are_lower_casedc                 C   s    t tjƒ\}}|  |dd¡ d S )Nr   z'MODULE DOCS incorrectly includes a link)r=   rp   rq   rP   )rK   rR   rb   r   r   r   Útest_issue8225Ï  s    zPydocDocTest.test_issue8225c                 C   s,   t j}zd t _t ¡  W |t _n|t _0 d S rE   )ÚsysÚstdinr    Úgetpager)rK   Zprevious_stdinr   r   r   Útest_getpager_with_stdin_noneÔ  s
    
z*PydocDocTest.test_getpager_with_stdin_nonec                 C   sL   G dd„ dƒ}G dd„ dƒ}t  |ƒ ¡}t  |ƒ ¡}|  | dd¡|¡ d S )Nc                   @   s   e Zd ZdZ dS )z)PydocDocTest.test_non_str_name.<locals>.Aé*   Nr   r   r   r   r   ÚAà  s   ry   c                   @   s   e Zd ZdS )z)PydocDocTest.test_non_str_name.<locals>.BNr   r   r   r   r   ÚBâ  s   rz   )r    rm   rP   r   )rK   ry   rz   ZadocZbdocr   r   r   Útest_non_str_nameÜ  s
    zPydocDocTest.test_non_str_namec                 C   s,   d}t t|ƒdƒ}t| }|  ||d¡ d S )Nútest.i_am_not_hereÚasciiz&documentation for missing module found)Ústrr)   Úmissing_patternrP   ©rK   Zmissing_modulerR   Úexpectedr   r   r   Útest_not_hereè  s    ÿzPydocDocTest.test_not_herez)Docstrings are omitted with -OO and abovec                 C   s*   t ddd}tj dd¡}|  ||¡ d S )Nztest.test_pydoc.nonasciir}   )ZPYTHONIOENCODINGÚbackslashreplace)r)   r   Ú__doc__Úencodern   )rK   rR   Úencodedr   r   r   Útest_not_asciiï  s    zPydocDocTest.test_not_asciic                 C   s.   d}t t|ƒdƒ}t| ¡  }|  ||¡ d S )Nz test.i_am_not_here r}   )r~   r)   r   r"   rP   r€   r   r   r   Útest_input_stripö  s    zPydocDocTest.test_input_stripc                 C   sJ   t j}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ d S )Nz<function stripid at 0x88dcee4>z<function stripid>z <function stripid at 0x01F65390>Z42z<type 'exceptions.Exception'>)r    ÚstripidrP   )rK   r‰   r   r   r   Útest_stripidü  s    
ÿ
ÿ
ÿzPydocDocTest.test_stripidc                 C   s&   t  ¡ }| t¡}d}|  ||¡ d S )Nz  |  Built-in subclasses:
 |      async_generator
 |      BaseException
 |      builtin_function_or_method
 |      bytearray
 |      ... and \d+ other subclasses)r    r7   ÚdocclassÚobjectZassertRegex©rK   r.   r?   Zsnipr   r   r   Ú)test_builtin_with_more_than_four_children	  s    
z6PydocDocTest.test_builtin_with_more_than_four_childrenc                 C   s&   t  ¡ }| t¡}d}|  ||¡ d S )Nzc |  Built-in subclasses:
 |      FloatingPointError
 |      OverflowError
 |      ZeroDivisionError)r    r7   r‹   ÚArithmeticErrorrn   r   r   r   r   Útest_builtin_with_child(  s    
z$PydocDocTest.test_builtin_with_childc                 C   s2   t  ¡ }| t¡}d}|  ||¡ |  d|¡ d S )Nz^ |  Built-in subclasses:
 |      ArithmeticError
 |      AssertionError
 |      AttributeErrorÚZeroDivisionError)r    r7   r‹   Ú	Exceptionrn   ÚassertNotInr   r   r   r   Útest_builtin_with_grandchildC  s
    
z)PydocDocTest.test_builtin_with_grandchildc                 C   s"   t  ¡ }| t¡}|  d|¡ d S ©NzBuilt-in subclasses)r    r7   r‹   r‘   r“   ©rK   r.   r?   r   r   r   Útest_builtin_no_childc  s    
z"PydocDocTest.test_builtin_no_childc                 C   s"   t  ¡ }| t¡}|  d|¡ d S r•   )r    r7   r‹   Útyper“   r–   r   r   r   Útest_builtin_on_metaclasses  s    
z(PydocDocTest.test_builtin_on_metaclassesc              	   C   s  t }tj}dd„ }d | _tƒ }tj|d}ttƒ\}}d}d ¡ }	t	 
|	¡}	|	t  }
|t_z¶tdƒ”}tdƒl}| |¡ | ¡  ¡ }|
|ft t t¡f  }|  d| ¡ ¡ |  d| ¡ ¡ |  ||¡ W d   ƒ n1 sà0    Y  W d   ƒ n1 sþ0    Y  W |t_n|t_0 d S )	Nc                   S   s   dd„ S )Nc                 S   s   | S rE   r   )Úxr   r   r   Ú<lambda>”  ó    zJPydocDocTest.test_help_output_redirect.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r›   ”  rœ   z8PydocDocTest.test_help_output_redirect.<locals>.<lambda>©r/   ztest.pydoc_modz9
        Help on module test.pydoc_mod in test:

        ÚstdoutÚstderrr   )rd   r    rv   ÚmaxDiffr   ÚHelperr=   r   ÚlstripÚtextwrapÚdedentr	   ÚhelpÚgetvaluer"   re   r[   r\   rP   )rK   Zold_patternZgetpager_oldZgetpager_newÚbufÚhelperZunusedrb   r-   Zhelp_headerZexpected_help_patternr/   r(   rR   rf   r   r   r   Útest_help_output_redirectŠ  s<    

ÿ
ÿ
þÿJz&PydocDocTest.test_help_output_redirectc                 C   sz   t dddgƒ}tƒ }t |¡ W d   ƒ n1 s40    Y  | ¡ }|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NÚPersonÚnicknameÚ	firstnamezAlias for field number 0zAlias for field number 1©r   r
   r    r¥   r¦   rn   )rK   rª   Úhelp_ioÚhelptextr   r   r   Útest_namedtuple_fields²  s    (z#PydocDocTest.test_namedtuple_fieldsc                 C   sr   t dddgdd}tƒ }t |¡ W d   ƒ n1 s80    Y  | ¡ }|  d|¡ |  d|¡ |  d|¡ d S )	NÚNTÚabcÚdefT)ÚrenameZ_1Ú_replaceÚ_asdictr­   )rK   r±   r®   r¯   r   r   r   Ú!test_namedtuple_public_underscore¼  s    (z.PydocDocTest.test_namedtuple_public_underscorec              	   C   s’   |   tt¡ dD ]|}ttd|dB}|dkr>td |¡|d td|d td|d W d   ƒ n1 sj0    Y  t ti ¡}|  |d	¡ qd S )
N)z
ISO-8859-1úUTF-8Úw©Úencodingr¸   z#coding: {})Úfileu   """line 1: hÃ©zline 2: hi"""u   line 1: hÃ©)	Ú
addCleanupr   r   ÚopenÚprintÚformatr    ÚsynopsisrP   )rK   r»   ZscriptrÁ   r   r   r   Útest_synopsisÅ  s    *zPydocDocTest.test_synopsisc                 C   s.   t j ¡ d }t j}t |¡}|  ||¡ d S )Nr   )r3   r„   Ú
splitlinesÚ
__cached__r    rÁ   rP   )rK   r   ÚfilenamerÁ   r   r   r   Útest_synopsis_sourcelessÐ  s    
z%PydocDocTest.test_synopsis_sourcelessc              	   C   s²   t j ¡ ”}tj |d¡}tj |¡}t	|dƒ}| 
d¡ W d   ƒ n1 sP0    Y  t |¡ t |i ¡}|  |¡ t |i ¡}|  |¡ W d   ƒ n1 s¤0    Y  d S )Nzfoomod42.pyr¹   úfoo = 1)ÚtestÚsupportÚtemp_cwdr3   r4   ÚjoinÚ	importlibÚutilÚcache_from_sourcer¾   ÚwriteÚ
py_compiler;   r    rÁ   ÚassertIsNone)rK   Útest_dirÚ	init_pathZcached_pathÚfobjrÁ   Zsynopsis_cachedr   r   r   Ú"test_synopsis_sourceless_empty_docÙ  s    (

z/PydocDocTest.test_synopsis_sourceless_empty_docc                 C   s   d}|   t |¡d¡ d S )Nz#I Am A Doc


Here is my description)z
I Am A Docz
Here is my description)rP   r    Zsplitdoc)rK   Zexample_stringr   r   r   Útest_splitdoc_with_descriptionå  s    ÿz+PydocDocTest.test_splitdoc_with_descriptionc                 C   s>   t j ¡  }|  t |¡¡ W d   ƒ n1 s00    Y  d S rE   )rÈ   rÉ   rÊ   ZassertFalser    Ú	ispackage)rK   rÒ   r   r   r   Ú test_is_package_when_not_packageê  s    z-PydocDocTest.test_is_package_when_not_packagec                 C   sd   t j ¡ F}tj |d¡}t|dƒ ¡  |  t	 
|¡¡ t |¡ W d   ƒ n1 sV0    Y  d S )Nú__init__.pyr¹   )rÈ   rÉ   rÊ   r3   r4   rË   r¾   ÚcloseÚ
assertTruer    r×   Úremove)rK   rÒ   rÓ   r   r   r   Útest_is_package_when_is_packageî  s
    z,PydocDocTest.test_is_package_when_is_packagec                 C   s`   G dd„ dt ƒ}ttt ƒƒ}|j|d< |d= |d= |j|d< |j|d< t |¡}|  ||¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z/PydocDocTest.test_allmethods.<locals>.TestClassc                 S   s   dS )NTr   ©rK   r   r   r   Úmethod_returning_trueü  s    zEPydocDocTest.test_allmethods.<locals>.TestClass.method_returning_trueN)r   r   r   rß   r   r   r   r   Ú	TestClassû  s   rà   rß   r„   Ú	__class__Ú__subclasshook__Ú__init_subclass__)	rŒ   ÚdictÚvarsrß   râ   rã   r    Z
allmethodsZassertDictEqual)rK   rà   r   Úmethodsr   r   r   Útest_allmethodsõ  s    



zPydocDocTest.test_allmethodsc                    sp   G dd„ dƒ‰ G ‡ fdd„dˆ ƒ}t  |¡}t dd|¡}|  |dt ¡ t j|t  ¡ d}|  |d	t ¡ d S )
Nc                   @   s"   e Zd Zddd„ZeZdd„ ZdS )z+PydocDocTest.test_method_aliases.<locals>.ANc                 S   s   d S rE   r   )rK   Z	aboveThisr   r   r   Útkraise  s    z3PydocDocTest.test_method_aliases.<locals>.A.tkraisec                 S   s   d S rE   r   rÞ   r   r   r   Úa_size  s    z2PydocDocTest.test_method_aliases.<locals>.A.a_size)N)r   r   r   rè   Zliftré   r   r   r   r   ry     s   
ry   c                       s    e Zd Zddd„ZeZ” jZdS )z+PydocDocTest.test_method_aliases.<locals>.BNc                 [   s   d S rE   r   )rK   ZtagOrIdZcnfÚkwr   r   r   Úitemconfigure  s    z9PydocDocTest.test_method_aliases.<locals>.B.itemconfigure)N)r   r   r   rë   Z
itemconfigré   Zb_sizer   ©ry   r   r   rz     s   
rz   r9   r   a  Python Library Documentation: class B in module %s

class B(A)
 |  Method resolution order:
 |      B
 |      A
 |      builtins.object
 |  
 |  Methods defined here:
 |  
 |  b_size = a_size(self)
 |  
 |  itemconfig = itemconfigure(self, tagOrId, cnf=None, **kw)
 |  
 |  itemconfigure(self, tagOrId, cnf=None, **kw)
 |      Configure resources of an item TAGORID.
 |  
 |  ----------------------------------------------------------------------
 |  Methods inherited from A:
 |  
 |  a_size(self)
 |      Return size
 |  
 |  lift = tkraise(self, aboveThis=None)
 |  
 |  tkraise(self, aboveThis=None)
 |      Raise this widget in the stacking order.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from A:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)
)Zrenderera  Python Library Documentation: class B in module %s

<p>
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="B">class <strong>B</strong></a>(A)</font></td></tr>
    
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%%"><dl><dt>Method resolution order:</dt>
<dd>B</dd>
<dd>A</dd>
<dd><a href="builtins.html#object">builtins.object</a></dd>
</dl>
<hr>
Methods defined here:<br>
<dl><dt><a name="B-b_size"><strong>b_size</strong></a> = <a href="#B-a_size">a_size</a>(self)</dt></dl>

<dl><dt><a name="B-itemconfig"><strong>itemconfig</strong></a> = <a href="#B-itemconfigure">itemconfigure</a>(self, tagOrId, cnf=None, **kw)</dt></dl>

<dl><dt><a name="B-itemconfigure"><strong>itemconfigure</strong></a>(self, tagOrId, cnf=None, **kw)</dt><dd><tt>Configure&nbsp;resources&nbsp;of&nbsp;an&nbsp;item&nbsp;TAGORID.</tt></dd></dl>

<hr>
Methods inherited from A:<br>
<dl><dt><a name="B-a_size"><strong>a_size</strong></a>(self)</dt><dd><tt>Return&nbsp;size</tt></dd></dl>

<dl><dt><a name="B-lift"><strong>lift</strong></a> = <a href="#B-tkraise">tkraise</a>(self, aboveThis=None)</dt></dl>

<dl><dt><a name="B-tkraise"><strong>tkraise</strong></a>(self, aboveThis=None)</dt><dd><tt>Raise&nbsp;this&nbsp;widget&nbsp;in&nbsp;the&nbsp;stacking&nbsp;order.</tt></dd></dl>

<hr>
Data descriptors inherited from A:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></table>)r    rm   r:   r<   rP   r   r*   )rK   rz   r.   r   rì   r   Útest_method_aliases  s    
%Û'(Øz PydocDocTest.test_method_aliases)'r   r   r   r    ÚunittestÚskipIfrt   ÚflagsÚoptimizeÚhasattrrY   r   rc   rg   ro   rr   rs   rw   r{   r‚   r‡   rˆ   rŠ   rŽ   r   r”   r—   r™   r©   r°   r·   rÂ   rÆ   rÕ   rÖ   rØ   rÝ   rç   rí   r   r   r   r   rV   ¢  sn   ÿÿ	ÿÿ
ÿ
 ÿÿ#
	ÿ
rV   c                   @   sz   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	 
d¡dd„ ƒZe	 
d¡dd„ ƒZe	 
d¡dd„ ƒZdd„ ZdS )ÚPydocImportTestc                 C   s$   t  t¡| _|  tt¡ t ¡  d S rE   )r3   Úmkdirr   rÒ   r½   r   rÌ   Úinvalidate_cachesrÞ   r   r   r   ÚsetUps  s    zPydocImportTest.setUpc           	   	   C   sº   d}dddd  |¡dfd  |¡d  |¡ff}tj t|¡tj d }|D ]l\}}t|d	ƒ }| d
  |¡¡ W d   ƒ n1 s€0    Y  t|td 	d¡}t
||f }|  ||¡ qHd S )NZtestmod_xyzzy)Úi_am_not_herer÷   )útest.i_am_not_here_eitherrø   )ztest.i_am_not_here.neither_am_ir|   zi_am_not_here.{}r÷   ztest.{}Úpyr¹   z
import {}
)Z
PYTHONPATHr}   )rÀ   r3   r4   rË   r   Úextsepr¾   rÏ   r)   ÚdecodeÚbadimport_patternrP   )	rK   ÚmodnameZ	testpairsZsourcefnZimportstringZexpectedinmsgÚfrR   r   r   r   r   Útest_badimportx  s    û.zPydocImportTest.test_badimportc              
   C   sŽ  t j td¡}t  |¡ t j |d¡t j d }t|dƒ}| d¡ W d   ƒ n1 sZ0    Y  | jtgd t	ƒ @}t
ƒ }t d¡ W d   ƒ n1 s¤0    Y  W d   ƒ n1 sÂ0    Y  |  | ¡ d¡ |  | ¡ d¡ t	ƒ B}t
ƒ }t d¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s<0    Y  |  | ¡  ¡ d¡ |  | ¡ d¡ W d   ƒ n1 s€0    Y  d S )	NZ	syntaxerrÚ__init__rù   r¹   zinvalid python syntax = $1
©r4   Zxyzzyr   )r3   r4   rË   r   rô   rú   r¾   rÏ   rN   r
   r   r    ÚaproposrP   r¦   r"   )rK   ÚpkgdirZ	badsyntaxrþ   r'   r(   r   r   r   Útest_apropos_with_bad_package  s     
(FJz-PydocImportTest.test_apropos_with_bad_packagec              
   C   sÖ   t j td¡| _t  | jd¡ |  t j| j¡ | jtgdf t	ƒ @}t
ƒ }t d¡ W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  |  | ¡ d¡ |  | ¡ d¡ d S )NZ
unreadabler   r  ZSOMEKEYr   )r3   r4   rË   r   Zunreadable_dirrô   r½   ÚrmdirrN   r
   r   r    r  rP   r¦   )rK   r'   r(   r   r   r   Ú test_apropos_with_unreadable_dir¢  s    dz0PydocImportTest.test_apropos_with_unreadable_dirc              
   C   s  t j td¡}t  |¡ |  t|¡ t j |d¡}t|dƒ}| d¡ W d   ƒ n1 s\0    Y  t	 
t  	|¡j¡}z’t  ||t	j @ ¡ | jtgd@ tƒ }t d¡ W d   ƒ n1 sÄ0    Y  W d   ƒ n1 sâ0    Y  |  d| ¡ ¡ W t  ||¡ nt  ||¡ 0 d S )NZwalkpkgrÙ   r¹   rÇ   r  r   )r3   r4   rË   r   rô   r½   r   r¾   rÏ   ÚstatÚS_IMODEÚst_modeÚchmodÚS_IEXECrN   r
   r    r  rn   r¦   )rK   r  rÓ   rÔ   Zcurrent_moderž   r   r   r   Útest_apropos_empty_doc±  s    
(Fz&PydocImportTest.test_apropos_empty_docc                 C   s  t j td¡}t  |¡ t j |d¡}t|ddd}| d¡ W d   ƒ n1 sT0    Y  | jtgdœ tt	jƒ}t	j 
dt¡ zb|  td	¡ dd l}W d   ƒ n1 s²0    Y  |  d
d¡}d}|  ||¡ W |t	jd d …< n|t	jd d …< 0 W d   ƒ n1 s0    Y  d S )NÚtest_error_packagerÙ   Zwtr}   rº   zraise ValueError("ouch")
r  r   Zouchzsearch?key=test_error_packageúPydoc: Search Resultsz8<a href="test_error_package.html">test_error_package</a>)r3   r4   rË   r   rô   r¾   rÏ   rN   Útuplert   ÚinsertZassertRaisesRegexÚ
ValueErrorr  rS   rn   )rK   r  Úinitrþ   Zsaved_pathsr  r?   Úfoundr   r   r   Útest_url_search_package_errorÁ  s"    
(
&ÿz-PydocImportTest.test_url_search_package_errorz(causes undesirable side-effects (#20128)c           	      C   sZ   d}d}d}|| | }t ƒ }tj|d}|dƒ | ¡  ¡ }t| ¡ ƒ}|  ||¡ d S )NrW   é   é   r   Úmodules)r   r    r¡   r¦   r"   ÚlenrÃ   ZassertGreaterEqual)	rK   Znum_header_linesZnum_module_lines_minZnum_footer_linesr   r/   r¨   rR   Z	num_linesr   r   r   Útest_modulesØ  s    zPydocImportTest.test_modulesc                 C   s\   d}t ƒ }tj|d}tƒ }|dƒ W d   ƒ n1 s:0    Y  | ¡ }|  ||¡ d S )Nzpydoc - r   zmodules pydoc)r   r    r¡   r
   r¦   rn   ©rK   r   r/   r¨   r®   rR   r   r   r   Útest_modules_searchè  s    &z#PydocImportTest.test_modules_searchz+some buildbots are not cooperating (#20128)c                 C   s`   d}t ƒ }tj|d}tƒ }|dƒ W d   ƒ n1 s:0    Y  | ¡ }|  | |¡¡ d S )Nzgc - r   zmodules garbage)r   r    r¡   r
   r¦   rÛ   Ú
startswithr  r   r   r   Útest_modules_search_builtinõ  s    &z+PydocImportTest.test_modules_search_builtinc                 C   sJ   t  t j¡}|  |t ¡ |  |jd¡ |  |jt j¡ |  |jt j¡ d S )Nr    )r    Z
importfiler!   ZassertIsNotrP   r   Ú__spec__)rK   Zloaded_pydocr   r   r   Útest_importfile  s
    zPydocImportTest.test_importfileN)r   r   r   rö   rÿ   r  r  r  r  rî   Úskipr  r  r  r  r   r   r   r   ró   q  s   


ró   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZedd„ ƒZ	dd„ Z
edd„ ƒZdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZd/d0„ Zd1d2„ Zd3d4„ Zd5S )6ÚTestDescriptionsc                 C   s&   ddl m} t |¡}|  d|¡ d S )Nr   )Úpydocfodderr"  )rÈ   r"  r    rm   rn   )rK   r"  r.   r   r   r   Útest_module  s    
zTestDescriptions.test_modulec                 C   sV   G dd„ dƒ}|ƒ }|   t |¡d¡ |   t |¡d¡ dt }|  |t |¡¡ d S )Nc                   @   s   e Zd ZdS )z&TestDescriptions.test_class.<locals>.CNr   r   r   r   r   ÚC  rœ   r$  zclass CzC in module %s object)rP   r    Zdescriber   rn   rm   )rK   r$  Úcr   r   r   r   Ú
test_class  s    zTestDescriptions.test_classc                 C   s   t jt j tt jt jtt jf  dœdd„}t  d¡}G dd„ dt j| t jtt	f ƒ}|  
t |¡ ¡ d d¡ |  
t |¡ ¡ d	 d
¡ d S )N)Údatarš   Úreturnc                 S   s   d S rE   r   )r'  rš   r   r   r   Úfoo  s    z/TestDescriptions.test_typing_pydoc.<locals>.fooÚTc                   @   s   e Zd ZdS )z-TestDescriptions.test_typing_pydoc.<locals>.CNr   r   r   r   r   r$     rœ   r$  éÿÿÿÿz?ffoooo(data: List[Any], x: int) -> Iterator[Tuple[int, Any]]rW   z2class CC(collections.abc.Mapping, typing.Generic))ÚtypingÚListÚAnyÚintÚIteratorÚTupleÚTypeVarÚGenericÚMappingr~   rP   r    rm   rÃ   )rK   r)  r*  r$  r   r   r   Útest_typing_pydoc  s    
ÿ
"ÿÿz"TestDescriptions.test_typing_pydocc              	   C   sz   dD ]F}|   t |¡¡ zt |¡ W q tyH   |  d |¡¡ Y q0 qdD ]$}|  t |¡¡ |  ttj|¡ qPd S )N)r~   zstr.translatezbuiltins.strzbuiltins.str.translatezfinding the doc of {!r} failed)ZnotbuiltinsZstrrrzstrr.translatezstr.trrrranslatezbuiltins.strrrzbuiltins.str.trrranslate)	ZassertIsNotNoner    Zlocaterm   ÚImportErrorZfailrÀ   rÑ   ÚassertRaises©rK   Únamer   r   r   Útest_builtin'  s    zTestDescriptions.test_builtinc                 C   s"   t  t  | ¡¡}| d¡}|d S ©Nr   rW   )r    Úplainrm   Úsplit©Úor?   Úlinesr   r   r   Ú_get_summary_line8  s    
z"TestDescriptions._get_summary_linec                 C   s,   t  t  | ¡¡}| d¡}d |dd … ¡S r;  )r    r<  rm   r=  rË   r>  r   r   r   Ú_get_summary_lines?  s    
z#TestDescriptions._get_summary_linesc                 C   s   |   |  tjj¡d¡ d S )Nzwrap(self, text))rP   rA  r£   ÚTextWrapperÚwraprÞ   r   r   r   Útest_unbound_python_methodF  s    ÿz+TestDescriptions.test_unbound_python_methodc                 C   s   |   |  tjj¡d¡ d S )Nzdump(self, obj, /))rP   rA  Ú_pickleÚPicklerÚdumprÞ   r   r   r   Útest_unbound_builtin_methodJ  s    ÿz,TestDescriptions.test_unbound_builtin_methodc                 C   s    t  ¡ }|  |  |j¡d¡ d S )Nz2wrap(text) method of textwrap.TextWrapper instance)r£   rC  rP   rA  rD  )rK   Útr   r   r   Útest_bound_python_methodP  s    ÿz)TestDescriptions.test_bound_python_methodc                 C   s|   t dg d¢ƒ}t |¡}|  | d¡| d¡¡ |  | d¡| d¡¡ G dd„ dƒ}G dd	„ d	ƒ}t |¡ t |¡ d S )
Nrª   )r«   r¬   Úagegroupr«   r¬   rL  c                   @   s   e Zd ZdZdS )zMTestDescriptions.test_field_order_for_named_tuples.<locals>.NonIterableFieldsN©r   r   r   Ú_fieldsr   r   r   r   ÚNonIterableFieldsZ  s   rO  c                   @   s   e Zd Zg gZdS )zMTestDescriptions.test_field_order_for_named_tuples.<locals>.NonHashableFieldsNrM  r   r   r   r   ÚNonHashableFields]  s   rP  )r   r    rm   Z
assertLessÚindex)rK   rª   r   rO  rP  r   r   r   Ú!test_field_order_for_named_tuplesT  s    

z2TestDescriptions.test_field_order_for_named_tuplesc                 C   s(   t ƒ }t |¡}|  |  |j¡d¡ d S )Nz/dump(obj, /) method of _pickle.Pickler instance)r   rF  rG  rP   rA  rH  )rK   r   Úpr   r   r   Útest_bound_builtin_methodd  s
    
ÿz*TestDescriptions.test_bound_builtin_methodc                 C   s   |   |  tj¡d¡ d S )Nz0stat(path, *, dir_fd=None, follow_symlinks=True))rP   rA  r3   r  rÞ   r   r   r   Útest_module_level_callablel  s    ÿz+TestDescriptions.test_module_level_callablec                 C   sV   G dd„ dƒ}|   |  |jd ¡d¡ |   |  |j¡d¡ |  dt t |¡¡¡ d S )Nc                   @   s   e Zd Zedd„ ƒZdS )z-TestDescriptions.test_staticmethod.<locals>.Xc                 S   s   d S rE   r   ©rš   Úyr   r   r   Úsmt  s    z0TestDescriptions.test_staticmethod.<locals>.X.smN)r   r   r   ÚstaticmethodrX  r   r   r   r   ÚXs  s   rZ  rX  z<staticmethod object>zsm(x, y)
    A static method
zL
 |  Static methods defined here:
 |  
 |  sm(x, y)
 |      A static method
)rP   rB  Ú__dict__rX  rn   r    r<  rm   ©rK   rZ  r   r   r   Útest_staticmethodq  s    ÿûz"TestDescriptions.test_staticmethodc                 C   sV   G dd„ dƒ}|   |  |jd ¡d¡ |   |  |j¡d¡ |  dt t |¡¡¡ d S )Nc                   @   s   e Zd Zedd„ ƒZdS )z,TestDescriptions.test_classmethod.<locals>.Xc                 S   s   d S rE   r   )Úclsrš   r   r   r   Úcmˆ  s    z/TestDescriptions.test_classmethod.<locals>.X.cmN)r   r   r   Úclassmethodr_  r   r   r   r   rZ  ‡  s   rZ  r_  z<classmethod object>z:cm(x) method of builtins.type instance
    A class method
zZ
 |  Class methods defined here:
 |  
 |  cm(x) from builtins.type
 |      A class method
)rP   rB  r[  r_  rn   r    r<  rm   r\  r   r   r   Útest_classmethod…  s    ÿûz!TestDescriptions.test_classmethodc                 C   sT   |   |  tj¡d¡ |   |  tj¡d¡ |   |  tj¡d¡ |   |  tj	¡d¡ d S )NÚ	numeratorÚrealr$   Úobj)
rP   rA  r/  rb  Úfloatrc  r’   r$   Ú
memoryviewrd  rÞ   r   r   r   Útest_getset_descriptor™  s    z'TestDescriptions.test_getset_descriptorc                 C   sh   |   |  tj¡d¡ |   |  tj¡d¡ |   |  tj¡d¡ |   |  tj¡d¡ |   |  t	j
¡d¡ d S )Nrc  ÚstartÚfgetÚvalue)rP   rA  Úcomplexrc  Úrangerh  ÚsliceÚpropertyri  ÚStopIterationrj  rÞ   r   r   r   Útest_member_descriptor¢  s
    z'TestDescriptions.test_member_descriptorc                 C   s&   G dd„ dƒ}|   |  |j¡d¡ d S )Nc                   @   s   e Zd ZdZdS )z4TestDescriptions.test_slot_descriptor.<locals>.PointrV  N)r   r   r   Ú	__slots__r   r   r   r   ÚPoint®  s   rr  rš   )rP   rA  rš   )rK   rr  r   r   r   Útest_slot_descriptor¬  s    z%TestDescriptions.test_slot_descriptorc                 C   s*   G dd„ dƒ}|   |  |jd ¡d¡ d S )Nc                   @   s   e Zd ZdS )z6TestDescriptions.test_dict_attr_descriptor.<locals>.NSNr   r   r   r   r   ÚNS´  s   rt  r[  )rP   rA  r[  )rK   rt  r   r   r   Útest_dict_attr_descriptor²  s    ÿz*TestDescriptions.test_dict_attr_descriptorc                 C   sl   |   |  ttjƒj¡d¡ |   |  ttjƒj¡d¡ |   |  ttjƒj	¡d¡ |   |  ttj
ƒj¡d¡ d S )NÚwidthÚdebugÚmajorÚmax)rP   rA  r˜   rt   Ú	hash_inforv  rð   rw  Úversion_inforx  Ú
float_infory  rÞ   r   r   r   Ú test_structseq_member_descriptor¹  s    ÿÿÿÿz1TestDescriptions.test_structseq_member_descriptorc                 C   s"   t ddƒ}|  |  |j¡d¡ d S )NÚBox)rv  Zheightz    Alias for field number 0
)r   rP   rB  rv  )rK   r~  r   r   r   Ú test_namedtuple_field_descriptorÄ  s    
z1TestDescriptions.test_namedtuple_field_descriptorc                 C   s>   G dd„ dƒ}|   |  |j¡d¡ |  dt t |¡¡¡ d S )Nc                   @   s   e Zd Zedd„ ƒZdS )z,TestDescriptions.test_property.<locals>.Rectc                 S   s   | j | j S rE   )r¹   ÚhrÞ   r   r   r   ÚareaÎ  s    z1TestDescriptions.test_property.<locals>.Rect.areaN)r   r   r   rn  r  r   r   r   r   ÚRectÍ  s   r‚  z    Area of the rect
z#
 |  area
 |      Area of the rect
)rP   rB  r  rn   r    r<  rm   )rK   r‚  r   r   r   Útest_propertyË  s
    ýzTestDescriptions.test_propertyc                    sp   G dd„ dƒ‰ G ‡ fdd„dƒ}|   |  |j¡d¡ d|j_|   |  |j¡d¡ d|j_|   |  |j¡d	¡ d S )
Nc                   @   s   e Zd Zdd„ ZdS )z?TestDescriptions.test_custom_non_data_descriptor.<locals>.Descrc                 S   s   |d u r| S dS ©Nrx   r   ©rK   rd  r^  r   r   r   Ú__get__Þ  s    zGTestDescriptions.test_custom_non_data_descriptor.<locals>.Descr.__get__N)r   r   r   r†  r   r   r   r   ÚDescrÝ  s   r‡  c                       s   e Zd Z” ƒ ZdS )z;TestDescriptions.test_custom_non_data_descriptor.<locals>.XN©r   r   r   Úattrr   ©r‡  r   r   rZ  â  s   rZ  zX<test.test_pydoc.TestDescriptions.test_custom_non_data_descriptor.<locals>.Descr object>úCustom descriptorzo<test.test_pydoc.TestDescriptions.test_custom_non_data_descriptor.<locals>.Descr object>
    Custom descriptor
r)  zfoo(...)
    Custom descriptor
©rP   rB  r‰  r„   r   r\  r   rŠ  r   Útest_custom_non_data_descriptorÛ  s    z0TestDescriptions.test_custom_non_data_descriptorc                    sp   G dd„ dƒ‰ G ‡ fdd„dƒ}|   |  |j¡d¡ d|j_|   |  |j¡d¡ d|j_|   |  |j¡d	¡ d S )
Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z;TestDescriptions.test_custom_data_descriptor.<locals>.Descrc                 S   s   |d u r| S dS r„  r   r…  r   r   r   r†  ÷  s    zCTestDescriptions.test_custom_data_descriptor.<locals>.Descr.__get__c                 S   s   dd  d S )Nrh   r   r   r…  r   r   r   Ú__set__û  s    zCTestDescriptions.test_custom_data_descriptor.<locals>.Descr.__set__N)r   r   r   r†  rŽ  r   r   r   r   r‡  ö  s   r‡  c                       s   e Zd Z” ƒ ZdS )z7TestDescriptions.test_custom_data_descriptor.<locals>.XNrˆ  r   rŠ  r   r   rZ  ý  s   rZ  r   r‹  z    Custom descriptor
r)  zfoo
    Custom descriptor
rŒ  r\  r   rŠ  r   Útest_custom_data_descriptorô  s    z,TestDescriptions.test_custom_data_descriptorc                 C   sJ   t dœdd„}t tj |¡¡}|  d|¡ t ¡  |¡}|  d|¡ d S )N)r(  c                 Ó   s   dS ©Nrh   r   )Zignr   r   r   Úcoro_function  s    z=TestDescriptions.test_async_annotation.<locals>.coro_functionzasync coro_functionz4async <a name="-coro_function"><strong>coro_function)r/  r    r<  Ú	plaintextÚdocumentrn   r*   )rK   r‘  r?   Úhtmlr   r   r   Útest_async_annotation  s    þz&TestDescriptions.test_async_annotationc                 C   sD   dd„ }t  t j |¡¡}|  d|¡ t  ¡  |¡}|  d|¡ d S )Nc                   S  s
   dV  d S r  r   r   r   r   r   Úan_async_generator  s    zLTestDescriptions.test_async_generator_annotation.<locals>.an_async_generatorzasync an_async_generatorz>async <a name="-an_async_generator"><strong>an_async_generator)r    r<  r’  r“  rn   r*   )rK   r–  r?   r”  r   r   r   Útest_async_generator_annotation  s    þz0TestDescriptions.test_async_generator_annotationc                 C   s&   dd„ }t  ¡  |¡}|  d|¡ d S )Nc                   S   s   d S rE   r   r   r   r   r   Úa_fn_with_https_link&  s    zHTestDescriptions.test_html_for_https_links.<locals>.a_fn_with_https_linkz3<a href="https://localhost/">https://localhost/</a>)r    r*   r“  rn   )rK   r˜  r”  r   r   r   Útest_html_for_https_links%  s    þz*TestDescriptions.test_html_for_https_linksN)r   r   r   r#  r&  r5  r:  rY  rA  rB  rE  r   rI  rK  rR  rT  rU  r]  ra  rg  rp  rs  ru  r}  r  rƒ  r  r  r•  r—  r™  r   r   r   r   r!  
  sT   	








	







r!  c                   @   s   e Zd Zdd„ ZdS )ÚPydocServerTestc                 C   s|   dd„ }t j|ddd}|  d|jj¡ t ¡ }tjj	}|j
rjt d¡ |j
r8t ¡ | |kr8| ¡  qjq8|  |jd ¡ d S )Nc                 S   s   d| |f }|S )Nzthe URL sent was: (%s, %s)r   )rQ   Zcontent_typer?   r   r   r   Úmy_url_handler6  s    z3PydocServerTest.test_server.<locals>.my_url_handlerz0.0.0.0r   )ÚhostnameÚportg{®Gáz„?)r    Z_start_serverrn   Z	docserverÚaddressÚtimeÚ	monotonicrÈ   rÉ   ZSHORT_TIMEOUTZservingÚsleepÚstoprP   Úerror)rK   r›  ZserverthreadZ	starttimeÚtimeoutr   r   r   Útest_server3  s    
zPydocServerTest.test_serverN)r   r   r   r¥  r   r   r   r   rš  0  s   rš  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚPydocUrlHandlerTestc                 C   s*   t j}|  t|dd¡ |  t|dd¡ d S )Nry   r   rz   Úfoobar)r    rO   r7  Ú	TypeError)rK   rþ   r   r   r   Útest_content_type_errL  s    z)PydocUrlHandlerTest.test_content_type_errc                 C   sN   g d¢}|   ¡ * |D ]\}}|  ||¡ qW d   ƒ n1 s@0    Y  d S )N))r   úPydoc: Index of Modules)zget?key=rª  )rQ  rª  )ZtopicszPydoc: Topics)ÚkeywordszPydoc: Keywords)r    úPydoc: module pydoc)zget?key=pydocr¬  )zsearch?key=pydocr  )ztopic?key=defzPydoc: KEYWORD def)ztopic?key=STRINGSzPydoc: TOPIC STRINGS)r§  zPydoc: Error - foobar)rN   rS   )rK   ZrequestsrQ   rB   r   r   r   Útest_url_requestsQ  s    
z%PydocUrlHandlerTest.test_url_requestsN)r   r   r   r©  r­  r   r   r   r   r¦  I  s   r¦  c                   @   s   e Zd Zdd„ ZdS )Ú
TestHelperc                 C   s   |   ttjjƒttjƒ¡ d S rE   )rP   Úsortedr    r¡   r«  ÚkeywordÚkwlistrÞ   r   r   r   Útest_keywordsi  s    ÿzTestHelper.test_keywordsN)r   r   r   r²  r   r   r   r   r®  h  s   r®  c                   @   sì   e Zd Ze ejjdkd¡e eedƒo.e 	¡ d¡dd„ ƒƒZ
e ejjdkd¡e eedƒode 	¡ d¡dd„ ƒƒZe ejjdkd¡e eedƒoše 	¡ d¡d	d
„ ƒƒZe ejjdkd¡e eedƒoÐe 	¡ d¡dd„ ƒƒZdd„ ZdS )ÚPydocWithMetaClassesrW   rX   rY   rZ   c                 C   s€   G dd„ dt ƒ}G dd„ d|d}tdd„ tD ƒƒ}tƒ }tj|d}||ƒ ttf|d d	…   }| ¡  	¡ }|  
||¡ d S )
Nc                       s   e Zd Z‡ fdd„Z‡  ZS )z=PydocWithMetaClasses.test_DynamicClassAttribute.<locals>.Metac                    s   |dkrdS t ƒ  |¡S )NÚhamZspam©ÚsuperÚ__getattr__r8  ©rá   r   r   r·  t  s    zIPydocWithMetaClasses.test_DynamicClassAttribute.<locals>.Meta.__getattr__)r   r   r   r·  Ú__classcell__r   r   r¸  r   ÚMetas  s   rº  c                   @   s   e Zd Zejdd„ ƒZdS )z;PydocWithMetaClasses.test_DynamicClassAttribute.<locals>.DAc                 S   s   dS )NZeggsr   rÞ   r   r   r   r´  y  s    z?PydocWithMetaClasses.test_DynamicClassAttribute.<locals>.DA.hamN)r   r   r   ÚtypesÚDynamicClassAttributer´  r   r   r   r   ÚDAx  s   r½  ©Ú	metaclassc                 s   s   | ]}|rd | ndV  qdS )z	
 |      r   Nr   r   r   r   r   r   |  s   ÿzBPydocWithMetaClasses.test_DynamicClassAttribute.<locals>.<genexpr>r   rW   )r˜   r  Úexpected_data_docstringsr   r    r¡   Ú!expected_dynamicattribute_patternr   r¦   r"   rP   )rK   rº  r½  re   r/   r¨   rf   rR   r   r   r   Útest_DynamicClassAttributen  s    ÿÿz/PydocWithMetaClasses.test_DynamicClassAttributec                 C   s`   G dd„ dt ƒ}G dd„ d|d}tƒ }tj|d}||ƒ tt }| ¡  ¡ }|  ||¡ d S )Nc                       s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )zHPydocWithMetaClasses.test_virtualClassAttributeWithOneMeta.<locals>.Metac                 S   s   g d¢S )N)rá   r   r   ÚLIFEr   ©r^  r   r   r   Ú__dir__Œ  s    zPPydocWithMetaClasses.test_virtualClassAttributeWithOneMeta.<locals>.Meta.__dir__c                    s   |dkrdS t ƒ  |¡S )NrÃ  rx   )r¶  Z_Meta__getattrr8  r¸  r   r   r·  Ž  s    zTPydocWithMetaClasses.test_virtualClassAttributeWithOneMeta.<locals>.Meta.__getattr__©r   r   r   rÅ  r·  r¹  r   r   r¸  r   rº  ‹  s   rº  c                   @   s   e Zd ZdS )zIPydocWithMetaClasses.test_virtualClassAttributeWithOneMeta.<locals>.ClassNr   r   r   r   r   ÚClass’  s   rÇ  r¾  r   )	r˜   r   r    r¡   Ú"expected_virtualattribute_pattern1r   r¦   r"   rP   )rK   rº  rÇ  r/   r¨   rf   rR   r   r   r   Ú%test_virtualClassAttributeWithOneMeta†  s    z:PydocWithMetaClasses.test_virtualClassAttributeWithOneMetac                    sÞ   G dd„ dt ƒ‰ G dd„ dt ƒ‰G ‡ ‡fdd„dˆ ˆƒ}G dd„ dˆ d	}G d
d„ d||d	}d }}tƒ }tj|d}||ƒ tt }| ¡  ¡ }	|  ||	¡ tƒ }tj|d}||ƒ t	t }
| ¡  ¡ }|  |
|¡ d S )Nc                       s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )zIPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta1c                 S   s   g d¢S )N)rá   r   r   ri   r   rÄ  r   r   r   rÅ  ¡  s    zQPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta1.__dir__c                    s   |dkrdS t ƒ  |¡S )Nri   rh   rµ  r8  r¸  r   r   r·  £  s    zUPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta1.__getattr__rÆ  r   r   r¸  r   ÚMeta1   s   rÊ  c                       s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )zIPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta2c                 S   s   g d¢S )N)rá   r   r   Útwor   rÄ  r   r   r   rÅ  ¨  s    zQPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta2.__dir__c                    s   |dkrdS t ƒ  |¡S )NrË  rW   rµ  r8  r¸  r   r   r·  ª  s    zUPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta2.__getattr__rÆ  r   r   r¸  r   ÚMeta2§  s   rÌ  c                       s*   e Zd Z‡‡fdd„Z‡ fdd„Z‡  ZS )zIPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta3c                    s(   t ttg d¢ˆ  | ¡ ˆ | ¡ ƒƒƒS )N)rá   r   r   Úthree)Úlistr¯  ÚsetrÅ  rÄ  ©rÊ  rÌ  r   r   rÅ  ¯  s    ÿÿÿzQPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta3.__dir__c                    s   |dkrdS t ƒ  |¡S )NrÍ  r  rµ  r8  r¸  r   r   r·  ³  s    zUPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Meta3.__getattr__rÆ  r   rÐ  r¸  r   ÚMeta3®  s   rÑ  c                   @   s   e Zd ZdS )zJPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Class1Nr   r   r   r   r   ÚClass1·  s   rÒ  r¾  c                   @   s   e Zd ZdS )zJPydocWithMetaClasses.test_virtualClassAttributeWithTwoMeta.<locals>.Class2Nr   r   r   r   r   ÚClass2¹  s   rÓ  Fr   )
r˜   r   r    r¡   Ú"expected_virtualattribute_pattern2r   r¦   r"   rP   Ú"expected_virtualattribute_pattern3)rK   rÑ  rÒ  rÓ  Zfail1Zfail2r/   r¨   Zexpected_text1Zresult1Zexpected_text2Zresult2r   rÐ  r   Ú%test_virtualClassAttributeWithTwoMeta›  s$    	z:PydocWithMetaClasses.test_virtualClassAttributeWithTwoMetac                 C   s`   G dd„ dt ƒ}G dd„ d|d}tƒ }tj|d}||ƒ tt }| ¡  ¡ }|  ||¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z.PydocWithMetaClasses.test_buggy_dir.<locals>.Mc                 S   s   g d¢S )N)rá   r   ÚmissingÚherer   rÄ  r   r   r   rÅ  Ï  s    z6PydocWithMetaClasses.test_buggy_dir.<locals>.M.__dir__N)r   r   r   rÅ  r   r   r   r   ÚMÎ  s   rÙ  c                   @   s   e Zd ZdZdS )z.PydocWithMetaClasses.test_buggy_dir.<locals>.Czpresent!N)r   r   r   rØ  r   r   r   r   r$  Ñ  s   r$  r¾  r   )	r˜   r   r    r¡   Ú!expected_missingattribute_patternr   r¦   r"   rP   )rK   rÙ  r$  r/   r¨   rf   rR   r   r   r   Útest_buggy_dirÉ  s    z#PydocWithMetaClasses.test_buggy_dirc                 C   sH   t ƒ }t d¡ W d   ƒ n1 s&0    Y  | ¡ }|  d|¡ d S )Nz	enum.Enumz
class Enum)r
   r    r¥   r¦   rn   )rK   r®   r¯   r   r   r   Útest_resolve_falseÚ  s    (z'PydocWithMetaClasses.test_resolve_falseN)r   r   r   rî   rï   rt   rð   rñ   rò   rY   rÂ  rÉ  rÖ  rÛ  rÜ  r   r   r   r   r³  m  s:   ÿÿÿÿÿÿ*ÿÿr³  c                   @   sF   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚTestInternalUtilitiesc                 C   sN   t  ¡ }|j| _tj |jd¡| _|  |j	¡ t 
¡  | _}dtj|g| _d S )NZnonexistentr   )ÚtempfileÚTemporaryDirectoryr9  Úargv0dirr3   r4   rË   Úargv0r½   ÚcleanupÚgetcwdÚ
abs_curdirÚcurdirÚcurdir_spellings)rK   Ztmpdirrä  r   r   r   rö   å  s    zTestInternalUtilities.setUpNc                 C   s   |d u r| j }t ||¡S rE   )rá  r    Ú_get_revised_path)rK   Ú
given_pathrá  r   r   r   rç  í  s    z'TestInternalUtilities._get_revised_pathc                 C   s8   t j ¡ }| jD ]"}t| |¡ƒD ]}| |¡ q"q|S rE   )rt   r4   Úcopyræ  rl  ÚcountrÜ   )rK   Ú
clean_pathÚspellingÚ__r   r   r   Ú_get_starting_pathô  s
    

z(TestInternalUtilities._get_starting_pathc                 C   s*   |   ¡ }| jg| }|  |  |¡|¡ d S rE   )rî  rä  rP   rç  )rK   rë  Úexpected_pathr   r   r   Ú,test_sys_path_adjustment_adds_missing_curdirü  s    zBTestInternalUtilities.test_sys_path_adjustment_adds_missing_curdirc                 C   sT   |   ¡ }| jg| }| jg| }|  |  |¡|¡ || jg }|  |  |¡|¡ d S rE   )rî  rä  rà  rP   rç  )rK   rë  rï  Úleading_argv0dirÚtrailing_argv0dirr   r   r   Ú*test_sys_path_adjustment_removes_argv0_dir  s    z@TestInternalUtilities.test_sys_path_adjustment_removes_argv0_dirc                    sh   ‡ fdd„}ˆ   ¡ }ˆ jg| }ˆ jg| }ˆ  ||ƒ|¡ |ˆ jg }ˆ jg| }ˆ  ||ƒ|¡ d S )Nc                    s   ˆ j | tjdS )N)rá  )rç  r    r!   )rè  rÞ   r   r   rç    s    z\TestInternalUtilities.test_sys_path_adjustment_protects_pydoc_dir.<locals>._get_revised_path)rî  rà  rä  rP   )rK   rç  rë  rñ  rï  rò  r   rÞ   r   Ú+test_sys_path_adjustment_protects_pydoc_dir
  s    zATestInternalUtilities.test_sys_path_adjustment_protects_pydoc_dirc              	   C   s°   |   ¡ }| jD ]œ}| j|d| |g| }|  |  |¡¡ ||g }|  |  |¡¡ | jg| }|  |  |¡¡ || jg }|  |  |¡¡ W d   ƒ q1 s 0    Y  qd S )N)Zcurdir_spelling)rî  ræ  ZsubTestrÑ   rç  rà  )rK   rë  rì  Zleading_curdirZtrailing_curdirrñ  rò  r   r   r   Ú5test_sys_path_adjustment_when_curdir_already_included  s    


zKTestInternalUtilities.test_sys_path_adjustment_when_curdir_already_included)N)
r   r   r   rö   rç  rî  rð  ró  rô  rõ  r   r   r   r   rÝ  ã  s   
	rÝ  c                  C   s.   t j ¡ } tjt jjg| ¢R Ž  t t¡ d S rE   )rÈ   rÉ   Zthreading_setuprî   ZaddModuleCleanupZthreading_cleanupr   )Úthread_infor   r   r   ÚsetUpModule$  s    
r÷  Ú__main__)Pr3   rt   rT   Úimportlib.utilrÌ   r[   r    rÐ   r°  rF  rM   r:   r  ÚstringrÞ  Ztest.supportrÈ   rŸ  r»  r,  rî   Úurllib.parser]   Z	xml.etreerp   Zxml.etree.ElementTreer£   Úior   Úcollectionsr   Ztest.support.script_helperr   r   r   r   r   r	   r
   r   r   r   r   r   rÉ   ZHAVE_DOCSTRINGSrÀ  r"   rd   r  re   r`   ra   r   Úlinesepr   rü   rÁ  rÈ  rÔ  rÕ  rÚ  r)   r1   r8   r=   rC   ZTestCaserD   rV   ró   r!  rš  r¦  r®  r³  rÝ  r÷  r   Úmainr   r   r   r   Ú<module>   sŽ   ,
Tÿ{ÿý			
		   R   (vA
