o
    HXh^'                     @   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rPe  dS dS )    N)dedent)FunctionType
MethodTypeBuiltinFunctionType)TestCasemain)utilc                   C      d S N r   r   r   :/opt/python-3.10.19/usr/lib/python3.10/test/test_pyclbr.py<lambda>       r   c                 C   r	   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   sP   	 t |t |A t | }|r&td|||f tjd | d|   d S 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   s6   	 ||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 d S d S r
   )assertEqual)r   abr   r   r   r   assertEqualsOrIgnored0   s   z PyclbrTest.assertEqualsOrIgnoredNr   c                 C   s2  	 t |t dgB }|d u rt|t i dg}t|}dd }| D ]\}}||v r-q$| ||| t||}t|tj	rV| 
|ttf |j|krMq$| |j|j q$| 
|t |j|krbq$dd |jD }	dd |jD }
z	| |	|
| W n   td| tjd	  g }|j D ]}||t|||r|| qg }|j D ]!}|d d
 dkr|dd  dkr|d| |  q|| qz| ||| | |j|j | |j|j| W q$   td| tjd	  dd }t|D ]}t||}t|ttfr|||r| ||| qd 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r2|ds2d| 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   s    z*PyclbrTest.checkModule.<locals>.<listcomp>c                 S   s   g | ]}t |d |qS )r1   )getattrr4   r   r   r   r7   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!   r8   r+   FunctionZassertIsInstancer   r   r=   r$   r@   r<   	__bases__superr   r   r   r   r*   keysappendmethodsr'   r.   r1   dirr#   )r   Z
moduleNamer@   r   dictr3   r1   valueZpy_itemZ
real_basesZpyclbr_basesZactualMethodsmZfoundMethodsrA   r?   r   r   r   checkModule5   sn   




 
zPyclbrTest.checkModulec                 C   s*   |  d | j ddd | j ddd d S )NrD   doctest)ZTestResultsZ	_SpoofOutZDocTestCaseZ_DocTestSuiter   Zdifflib)MatchrQ   r   r   r   r   	test_easy   s   
zPyclbrTest.test_easyc                 C   s   | j ddgd d S )Nztest.pyclbr_inputZomrS   rU   rV   r   r   r   test_decorators   s   zPyclbrTest.test_decoratorsc                    s   t dddi d f\}}}}}td}||||||}j|d|ddd}|d	d
d}	|	ddd}
|ddd}j|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      )
end_linenof1r9      f2   c1C0      F1   
   C1   C2   F3)r[   rd   c           
         s   	  | |  | D ]	}|j|  q| D ]	}|j| q| D ]G}|| || }}t||j|j|j|j	|j
f}t||j|j|j|j	|j
f}	 ||	 t|ju ri |j|j  ||j||j q+d S r
   )r$   rJ   valuesZassertIsparentr<   r1   r   r@   linenor^   ClassrL   children)
Zparent1Z	children1Zparent2Z	children2obr"   Zo1Zo2t1t2compareZmbr   r   r   rx      s   z'PyclbrTest.test_nested.<locals>.compare)rD   r   Z_create_treerG   Z_nest_functionZ_nest_classrr   )r   rP   pftisourceactualr[   r_   ra   rc   rd   rg   rj   rl   rn   Zexpectedr   rw   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)RandomrS   Zcgi)logpickle)partialPickleBufferZaifc)Z_aifc_params	sre_parse)dumpgroupsposZpdbpydoc)inputoutputzemail.parserztest.test_pyclbrrU   )r   cmr   r   r   test_others   s   zPyclbrTest.test_others)Nr   )r.   r=   __qualname__r   r!   r#   r'   rQ   rW   rX   r   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
   )rD   _modulescopyrV   r   r   r   setUp   s   zReadmoduleTests.setUpc                 C   s   | j t_ d S r
   )r   rD   rV   r   r   r   tearDown   s   zReadmoduleTests.tearDownc                 C   s   |  ttjd d S )Nzasyncio.foo)assertRaisesImportErrorrD   rE   rV   r   r   r   test_dotted_name_not_a_package   s   z.ReadmoduleTests.test_dotted_name_not_a_packagec              	   C   sx   d}t |+ | t t| W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )NZdoesnotexist)test_importlib_utilZuncacher   ModuleNotFoundErrorrD   rE   )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   rD   Zunittestr   r   Zunittest_mainZtest.test_importlibr   r   r<   staticmethodZStaticMethodTypeclassmethodr,   r   r   r.   r   r   r   r   <module>   s    	 R
