a
    ze'                     @   s   d dl Z d dlmZ d dlmZmZmZ d dlZd dlm	Z	m
Z d dlmZ eedd Zeedd ZG d	d
 d
e	ZG dd de	Zedkre  dS )    N)dedent)FunctionType
MethodTypeBuiltinFunctionType)TestCasemain)utilc                   C   s   d S N r
   r
   r
   &/usr/lib/python3.9/test/test_pyclbr.py<lambda>       r   c                 C   s   d S r	   r
   )cr
   r
   r   r      r   c                   @   sV   e Zd Zdd Zdd Zdd Zdd ZdddZdd Zdd Z	dd Z
dd Zd	S )
PyclbrTestc                 C   sJ   t |t |A t | }|rFtd|||f tjd | d|   d S )Nzl1=%r
l2=%r
ignore=%rfilez
%r missing)setprintsysstderrZfailpop)selfl1l2ignoremissingr
   r
   r   assertListEq   s    zPyclbrTest.assertListEqc                 C   s>   ||v rd S t ||s td| | t ||d||f  d S )Nz???zexpected hasattr(%r, %r))hasattrr   Z
assertTrue)r   objattrr   r
   r
   r   assertHasattr!   s
    
zPyclbrTest.assertHasattrc                 C   s4   ||v rd S ||vr$t d|tjd | || d S )Nz***r   )r   r   r   ZassertIn)r   r   keyr   r
   r
   r   assertHaskey)   s    zPyclbrTest.assertHaskeyc                 C   s    ||vr||vr|  || d S r	   )assertEqual)r   abr   r
   r
   r   assertEqualsOrIgnored0   s    z PyclbrTest.assertEqualsOrIgnoredNr
   c                 C   sL  t |t dgB }|d u r,t|t i dg}t|}dd }| D ]\}}||v rZqF| ||| t||}t|tj	r| 
|ttf |j|krqF| |j|j qF| 
|t |j|krqFdd |jD }	dd |jD }
z| |	|
| W n    td| tjd	  Y n0 g }|j D ]$}||t|||r&|| q&g }|j D ]H}|d d
 dkr|dd  dkr|d| |  n
|| qZz4| ||| | |j|j | |j|j| W qF   td| tjd	  Y qF0 qFdd }t|D ]:}t||}t|ttfr|||r| ||| qd S )Nobjectz<silly>c                 S   sl   | j }t|tr.t|| tr(|j| ur<dS nt|ts<dS |j}|drd|dsdd| j|f }||kS )NF__z_%s%s)	__dict__
isinstancer   ClassMethodType__self__r   __name__
startswithendswith)Zoclassr   name	classdictZobjnamer
   r
   r   ismethodD   s    

z(PyclbrTest.checkModule.<locals>.ismethodc                 S   s   g | ]
}|j qS r
   )r-   .0baser
   r
   r   
<listcomp>c   r   z*PyclbrTest.checkModule.<locals>.<listcomp>c                 S   s   g | ]}t |d |qS )r0   )getattrr3   r
   r
   r   r6   d   s   zclass=%sr      r(   _c                 S   s0   t | tr| j|jkS t | tr,| j|ju S dS )NF)r*   type
__module__r-   r   __globals__r)   )itemmoduler
   r
   r   
defined_in   s
    

z*PyclbrTest.checkModule.<locals>.defined_in) r   
__import__globalspyclbrreadmodule_exitemsr    r7   r*   FunctionZassertIsInstancer   r   r<   r#   r?   r;   	__bases__superr   r   r   r   r)   keysappendmethodsr&   r-   r0   dirr"   )r   Z
moduleNamer?   r   dictr2   r0   valueZpy_itemZ
real_basesZpyclbr_basesZactualMethodsmZfoundMethodsr@   r>   r
   r
   r   checkModule5   sf    



$

zPyclbrTest.checkModulec                 C   s*   |  d | j ddd | j ddd d S )NrC   doctest)ZTestResultsZ	_SpoofOutZDocTestCaseZ_DocTestSuiter   Zdifflib)MatchrP   r   r
   r
   r   	test_easy   s    
zPyclbrTest.test_easyc                 C   s   | j ddgd d S )Nztest.pyclbr_inputZomrR   rT   rU   r
   r
   r   test_decorators   s    zPyclbrTest.test_decoratorsc                    s   t dddi d f\}}}}}td}||||||}|d|d}|dd}	|	d	d
}
|dd}|dd |d}|dd}|dd}|dd}|dd}||d} fdd  d |d | d S )Ntest ztest.pya          def f0:
            def f1(a,b,c):
                def f2(a=1, b=2, c=3): pass
                    return f1(a,b,d)
            class c1: pass
        class C0:
            "Test class."
            def F1():
                "Method."
                return 'return'
            class C1():
                class C2:
                    "Class nested within nested class."
                    def F3(): return 1+1

        f0   f1r8   f2   c1   C0   F1   C1   C2   F3   )rZ   ra   c           
         s    | |  | D ]}|j|  q| D ]}|j| q8| D ]}|| ||  }}t||j|j|j|j	f}t||j|j|j|j	f}	 ||	 t|j
u rȈ |j|j  ||j||j qTd S r	   )r#   rI   valuesZassertIsparentr;   r0   r   r?   linenoClassrK   Zchildren)
Zparent1Z	children1Zparent2Z	children2obr!   Zo1Zo2t1t2compareZmbr   r
   r   rs      s    	z'PyclbrTest.test_nested.<locals>.compare)rC   r   Z_create_treerF   Z_nest_functionZ_nest_classrn   )r   rO   pftisourceactualrZ   r\   r]   r_   ra   rc   re   rg   ri   Zexpectedr
   rr   r   test_nested   s     
zPyclbrTest.test_nestedc                 C   sj   | j }|ddd |ddd |ddd |dd	d |d
dd |d |ddd |d |d d S )Nrandom)RandomrR   Zcgi)logpickle)partialPickleBufferZaifc)Z_aifc_params	sre_parse)dumpgroupsposZpdbpydoc)inputoutputzemail.parserztest.test_pyclbrrT   )r   cmr
   r
   r   test_others   s    zPyclbrTest.test_others)Nr
   )r-   r<   __qualname__r   r    r"   r&   rP   rV   rW   rz   r   r
   r
   r
   r   r      s   
[=r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ReadmoduleTestsc                 C   s   t j | _d S r	   )rC   _modulescopyrU   r
   r
   r   setUp   s    zReadmoduleTests.setUpc                 C   s   | j t_ d S r	   )r   rC   rU   r
   r
   r   tearDown   s    zReadmoduleTests.tearDownc                 C   s   |  ttjd d S )Nzasyncio.foo)assertRaisesImportErrorrC   rD   rU   r
   r
   r   test_dotted_name_not_a_package   s    z.ReadmoduleTests.test_dotted_name_not_a_packagec              	   C   sf   d}t |D | t t| W d    n1 s:0    Y  W d    n1 sX0    Y  d S )NZdoesnotexist)test_importlib_utilZuncacher   ModuleNotFoundErrorrC   rD   )r   module_namer
   r
   r   test_module_has_no_spec   s    z'ReadmoduleTests.test_module_has_no_specN)r-   r<   r   r   r   r   r   r
   r
   r
   r   r      s   r   __main__)r   textwrapr   typesr   r   r   rC   Zunittestr   r   Zunittest_mainZtest.test_importlibr   r   r;   staticmethodZStaticMethodTypeclassmethodr+   r   r   r-   r
   r
   r
   r   <module>   s   	 U