
    <e(                        	 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Z e ed                     Z e ed                     Z G d d	e	          Z G d
 de	          Zedk    r e             dS dS )    N)dedent)FunctionType
MethodTypeBuiltinFunctionType)TestCasemain)utilc                      d S N r       '/usr/lib/python3.11/test/test_pyclbr.py<lambda>r          T r   c                     d S r   r   )cs    r   r   r      r   r   c                   F    e Zd Zd Zd Zd Zd ZddZd Zd	 Z	d
 Z
d ZdS )
PyclbrTestc                 
   	 t          |          t          |          z  t          |          z
  }|rPt          d|d|d|t          j                   |                     d|                                z             d S d S )Nzl1=z
l2=z
ignore=filez
%r missing)setprintsysstderrfailpop)selfl1l2ignoremissings        r   assertListEqzPyclbrTest.assertListEq   s    >r77SWW$F3 	4Errr222vv>SZPPPPIIlW[[]]233333	4 	4r   c                     	 ||v rd S t          ||          st          d|           |                     t          ||          d|d|d           d S )Nz???zexpected hasattr(z, ))hasattrr   
assertTrue)r   objattrr!   s       r   assertHasattrzPyclbrTest.assertHasattr"   su    @6>>66sD!!55#5#5#5T***69cc444@	B 	B 	B 	B 	Br   c                     	 ||v rd S ||vrt          d|t          j                   |                     ||           d S )Nz***r   )r   r   r   assertIn)r   r(   keyr!   s       r   assertHaskeyzPyclbrTest.assertHaskey*   sL    8&==&&c>>%#*----c3r   c                 L    	 ||vr||vr|                      ||           d S d S d S r   )assertEqual)r   abr!   s       r   assertEqualsOrIgnoredz PyclbrTest.assertEqualsOrIgnored1   s=    @F??qQ""""" ?r   Nr   c           	      Z   	 t          |          t          dg          z  }|t          |t                      i dg          }t          j        |          }d }|                                D ]W\  }}||v r|                     |||           t          ||          }t          |t          j	                  rO| 
                    |t          t          f           |j        |k    rz|                     |j        |j                   | 
                    |t                      |j        |k    rd |j        D             }	d |j        D             }
	 |                     |	|
|           n$#  t)          d|z  t*          j                    xY wg }|j                                        D ]2} ||t          ||          |          r|                    |           3g }|j                                        D ]O}|d d         d	k    r*|d
d          d	k    r|                    d|z   |z              :|                    |           P	 |                     |||           |                     |j        |j                   |                     |j        |j        |           5#  t)          d|z  t*          j                    xY wd }t=          |          D ]Q}t          ||          }t          |t           t          f          r# |||          r|                     |||           Rd S )Nobjectz<silly>c                 <   | j         }t          |t                    r't          ||         t                    r	|j        | urdS nt          |t
                    sdS |j        }|                    d          r!|                    d          sd| j        |}||k    S )NF___)	__dict__
isinstancer   ClassMethodType__self__r   __name__
startswithendswith)oclassr(   name	classdictobjnames        r   ismethodz(PyclbrTest.checkModule.<locals>.ismethodE   s    I#z** "9T?ODD !L.. 5 /\22 ulG!!$'' ?0@0@0F0F ? ?%+__gg>d?"r   c                     g | ]	}|j         
S r   )r=   .0bases     r   
<listcomp>z*PyclbrTest.checkModule.<locals>.<listcomp>d   s    JJJdmJJJr   c                 0    g | ]}t          |d |          S )rA   )getattrrF   s     r   rI   z*PyclbrTest.checkModule.<locals>.<listcomp>e   s4      ;  ;  ;%) ")vt!<!<  ;  ;  ;r   zclass=%sr      r7   r8   c                     t          | t                    r| j        |j        k    S t          | t                    r| j        |j        u S dS )NF)r:   type
__module__r=   r   __globals__r9   )itemmodules     r   
defined_inz*PyclbrTest.checkModule.<locals>.defined_in   sJ    $%% :&/99$-- ;'6?::5r   ) r   
__import__globalspyclbrreadmodule_exitemsr*   rK   r:   FunctionassertIsInstancer   r   rP   r0   rS   rO   	__bases__superr#   r   r   r   r9   keysappendmethodsr3   r=   rA   dirr.   )r   
moduleNamerS   r!   dictrD   rA   valuepy_item
real_basespyclbr_basesactualMethodsmfoundMethodsrT   rR   s                   r   checkModulezPyclbrTest.checkModule6   s   	1
 VsH:.>  
GIIrI;GGF#J//	# 	# 	#   ::<< -	 -	KD%v~~vtV444fd++G%11 (%%g>Q/RSSS%33  !3U\BBBB%%gt444%33JJ8IJJJ
 ;  ;-2[ ;  ;  ;%%j,GGGG*w.SZ@@@@ " )..00 0 0Ax!)<)<a@@ 0%,,Q///!++-- / /A!u}}2334$++CHQJ7777$++A....	%%lM6JJJ$$W%7FFF..w/?/57 7 7 7*w.SZ@@@@	 	 	 KK 	: 	:D64((D$$!566 ::dF++ :%%dD&999		: 	:s   E++!F	AJ##!Kc                     |                      d           |                      dd           |                      dd           d S )NrW   doctest)TestResults	_SpoofOutDocTestCase_DocTestSuiter!   difflib)Matchrk   r   s    r   	test_easyzPyclbrTest.test_easy   s]    """ 	 ,L 	M 	M 	M:66666r   c                 6    |                      ddg           d S )Nztest.pyclbr_inputomrr   ru   rv   s    r   test_decoratorszPyclbrTest.test_decorators   s$    ,dV<<<<<r   c                 t    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dd          }                    |ddd          }                    |ddd          }||d} f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f1rL      f2   c1C0      F1   
   C1   C2   F3)r~   r   c                    	                      |                                |                                           |                                D ]}                    |j        |            |                                D ]}                    |j        |           |                                D ]}||         ||         }}t          |          |j        |j        |j        |j	        |j
        f}t          |          |j        |j        |j        |j	        |j
        f}	                     ||	           t          |          j        u r                      |j        |j                    
||j        ||j                   d S r   )r0   r^   valuesassertIsparentrO   rA   r   rS   linenor   Classr`   children)parent1	children1parent2	children2obr-   o1o2t1t2comparembr   s             r   r   z'PyclbrTest.test_nested.<locals>.compare   st    Y^^--y~~/?/?@@@&&(( 2 2bi1111&&(( 2 2bi1111 ~~'' : :"33B"XXrwBIr}T"XXrwBIr}T  R(((88rx''$$RZ<<<BKR[9999: :r   )rW   r   _create_treerZ   _nest_function_nest_classr   )r   ri   pftisourceactualr~   r   r   r   r   r   r   r   r   expectedr   r   s   `                 @@r   test_nestedzPyclbrTest.test_nested   s   Ir471aA   " Aq&!Q77 [[D!Q1[55r4A..r4A..^^Ba++XXatQbX99r4B//^^Bb"--^^Bb"--r4R00"%%	: 	: 	: 	: 	: 	: 	:0 	fdH-----r   c                    | j         } |dd           t          j                    5  t          j        dt                      |dd           d d d            n# 1 swxY w Y    |dd           t          j                    5  t          j        dt                      |d	d
           d d d            n# 1 swxY w Y    |dd            |dd            |d            |d           d S )Nrandom)Randomrr   r!   cgi)logpickle)partialPickleBuffer	sre_parse)dumpgroupspospdb)Union_ModuleTarget_ScriptTargetpydoc)inputoutputzemail.parserztest.test_pyclbr)rk   warningscatch_warningssimplefilterDeprecationWarning)r   cms     r   test_otherszPyclbrTest.test_others   s    	8K(((($&& 	' 	'!(,>???BuX&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	878888$&& 	> 	>!(,>???B{#<====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>	
 	
 	
 	

 	7/0000 	>
s#   (AA #A (B;;B?B?)Nr   )r=   rP   __qualname__r#   r*   r.   r3   rk   rw   rz   r   r   r   r   r   r   r      s        4 4 4B B B     # # #
Y: Y: Y: Y:v7 7 7= = =;. ;. ;.z    r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )ReadmoduleTestsc                 L    t           j                                        | _        d S r   )rW   _modulescopyrv   s    r   setUpzReadmoduleTests.setUp   s    ,,..r   c                 (    | j         t          _         d S r   )r   rW   rv   s    r   tearDownzReadmoduleTests.tearDown   s    -r   c                 R    |                      t          t          j        d           d S )Nzasyncio.foo)assertRaisesImportErrorrW   rX   rv   s    r   test_dotted_name_not_a_packagez.ReadmoduleTests.test_dotted_name_not_a_package   s%    
 	+v';]KKKKKr   c                     d}t          j        |          5  |                     t                    5  t	          j        |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Ndoesnotexist)test_importlib_utiluncacher   ModuleNotFoundErrorrW   rX   )r   module_names     r   test_module_has_no_specz'ReadmoduleTests.test_module_has_no_spec  s    $ (55 	2 	2""#677 2 2$[1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s4   A+AA+A	A+A	A++A/2A/N)r=   rP   r   r   r   r   r   r   r   r   r   r      sS        / / /( ( (L L L2 2 2 2 2r   r   __main__)r   textwrapr   typesr   r   r   rW   unittestr   r   unittest_maintest.test_importlibr	   r   r   rO   staticmethodStaticMethodTypeclassmethodr;   r   r   r=   r   r   r   <module>r      s;  
 


       ? ? ? ? ? ? ? ? ? ?  4 4 4 4 4 4 4 4 ; ; ; ; ; ;  4\\2233 ${{>>2233U U U U U U U Up2 2 2 2 2h 2 2 20 zMOOOOO r   