B
    u9a%                 @   s   d dl Z 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 d dlmZ eedd Zeed	d ZG d
d de
Zedkre  dS )    N)dedent)FunctionType
MethodTypeBuiltinFunctionType)TestCasemain)support)partialc               C   s   d S )N r
   r
   r
   !/usr/lib/python3.7/test_pyclbr.py<lambda>       r   c             C   s   d S )Nr
   )cr
   r
   r   r      r   c               @   s^   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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>   ||k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   ||krd S ||k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    ||kr||kr|  || d S )N)assertEqual)r   abr   r
   r
   r   assertEqualsOrIgnored1   s    z PyclbrTest.assertEqualsOrIgnoredNr
   c             C   s^  t |t dgB }|d kr,t|t i dg}t|}dd }x| D ]\}}||kr^qJ| ||| t||}t|tj	r| 
|ttf |j|krqJ| |j|j qJ| 
|t |j|krqJdd |jD }	dd |jD }
y| |	|
| W n    td| tjd	  Y nX g }x2|j D ]$}||t|||r,|| q,W g }xV|j D ]H}|d d
 dkr|dd  dkr|d| |  n
|| qdW y4| ||| | |j|j | |j|j| W qJ   td| tjd	  Y qJX qJW dd }xFt|D ]:}t||}t|ttfr|||r| ||| qW d S )Nobjectz<silly>c             S   sl   | j }t|tr.t|| tr(|j| k	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   ismethodE   s    


z(PyclbrTest.checkModule.<locals>.ismethodc             S   s   g | ]
}|j qS r
   )r,   ).0baser
   r
   r   
<listcomp>d   s    z*PyclbrTest.checkModule.<locals>.<listcomp>c             S   s   g | ]}t |d |qS )r/   )getattr)r2   r3   r
   r
   r   r4   e   s   zclass=%s)r      r'   _c             S   s0   t | tr| j|jkS t | tr,| j|jk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   r5   r)   FunctionZassertIsInstancer   r   r:   r"   r=   r9   	__bases__superr   r   r   r   r(   keysappendmethodsr%   r,   r/   dirr!   )r   Z
moduleNamer=   r   dictr1   r/   valueZpy_itemZ
real_basesZpyclbr_basesZactualMethodsmZfoundMethodsr>   r<   r
   r
   r   checkModule6   sb    




$

zPyclbrTest.checkModulec             C   s4   |  d |  d | j ddd | j ddd d S )NrA   ZastZdoctest)ZTestResultsZ	_SpoofOutZDocTestCaseZ_DocTestSuite)r   Zdifflib)Match)rN   )r   r
   r
   r   	test_easy   s    

zPyclbrTest.test_easyc             C   s   | j ddgd d S )Nztest.pyclbr_inputZom)r   )rN   )r   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   f1r6   f2   c1   C0   F1   C1   C2   F3   )rT   r[   c       
         s    | |  x| D ]}|j|  qW x| D ]}|j| q>W x| D ]}|| ||  }}t||j|j|j|j	f}t||j|j|j|j	f}	 ||	 t|j
kr҈ |j|j  ||j||j q^W d S )N)r"   rG   valuesZassertIsparentr9   r/   r   r=   linenoClassrI   Zchildren)
Zparent1Z	children1Zparent2Z	children2Zobr    Zo1Zo2Zt1Zt2)comparembr   r
   r   ri      s    	z'PyclbrTest.test_nested.<locals>.compare)rA   r   Z_create_treerD   Z_nest_functionZ_nest_classrh   )r   rM   pftisourceactualrT   rV   rW   rY   r[   r]   r_   ra   rc   Zexpectedr
   )ri   rj   r   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 )NZrandom)ZRandom)r   Zcgi)logpickle)r	   Zaifc)ZopenfpZ_aifc_params	sre_parse)dumpgroupsposZpdbpydoc)inputoutputzemail.parserztest.test_pyclbr)rN   )r   cmr
   r
   r   test_others   s    zPyclbrTest.test_othersc             C   s   |  ttjd d S )Nzasyncore.foo)ZassertRaisesImportErrorrA   rB   )r   r
   r
   r   test_issue_14798   s    zPyclbrTest.test_issue_14798)Nr
   )r,   r:   __qualname__r   r   r!   r%   rN   rP   rQ   rq   r|   r~   r
   r
   r
   r   r      s   
[=r   __main__)osr   textwrapr   typesr   r   r   rA   Zunittestr   r   Zunittest_mainrR   r   	functoolsr	   r9   staticmethodZStaticMethodTypeclassmethodr*   r   r,   r
   r
   r
   r   <module>   s   	 [