
    daf(                         d 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Z e ed             Z e ed             Z G d	 d
e
      Z G d de
      Zedk(  r e        yy)z/
   Test cases for pyclbr.py
   Nick Mathewson
    N)dedent)FunctionType
MethodTypeBuiltinFunctionType)TestCasemain)utilc                       y N r       +/root/Python-3.12.4/Lib/test/test_pyclbr.py<lambda>r          r   c                      y r   r   )cs    r   r   r      r   r   c                   D    e Zd Zd Zd Zd Zd ZddZd Zd Z	d	 Z
d
 Zy)
PyclbrTestc                     t        |      t        |      z  t        |      z
  }|rGt        d|d|d|t        j                         | j	                  d|j                         z         yy)z0 succeed iff {l1} - {ignore} == {l2} - {ignore} zl1=z
l2=z
ignore=filez
%r missingN)setprintsysstderrfailpop)selfl1l2ignoremissings        r   assertListEqzPyclbrTest.assertListEq   sQ    r7SW$F3r2v>SZZPIIlW[[]23 r   c                     ||v ryt        ||      st        d|       | j                  t        ||      d|d|d       y)z2 succeed iff hasattr(obj,attr) or attr in ignore. Nz???zexpected hasattr(z, ))hasattrr   
assertTrue)r   objattrr!   s       r   assertHasattrzPyclbrTest.assertHasattr"   s<    6>6sD!5#5T*694@	Br   c                 r    ||v ry||vrt        d|t        j                         | j                  ||       y)z* succeed iff key in obj or key in ignore. Nz***r   )r   r   r   assertIn)r   r(   keyr!   s       r   assertHaskeyzPyclbrTest.assertHaskey*   s0    &=&c>%#**-c3r   c                 <    ||vr||vr| j                  ||       yyy)z2 succeed iff a == b or a in ignore or b in ignore N)assertEqual)r   abr!   s       r   assertEqualsOrIgnoredz PyclbrTest.assertEqualsOrIgnored1   s&    F?qQ"  /?r   Nc           	      <   t        |      t        dg      z  }|t        |t               i dg      }t        j                  |      }d }|j                         D ]  \  }}||v r| j                  |||       t        ||      }t        |t        j                        rS| j                  |t        t        f       |j                  |k7  rq| j                  |j                  |j                         | j                  |t                |j                  |k7  r|j"                  D 	cg c]  }	|	j$                   }
}	|j&                  D 	cg c]  }	t        |	d|	       }}		 | j)                  |
||       g }|j0                  j3                         D ](  } ||t        ||      |      s|j5                  |       * g }|j6                  j3                         D ];  }|dd d	k(  r |d
d d	k7  r|j5                  d|z   |z          +|j5                  |       = 	 | j)                  |||       | j                  |j                  |j                         | j9                  |j$                  |j:                  |        d }t=        |      D ]B  }t        ||      }t        |t         t        f      s& |||      s0| j?                  |||       D yc c}	w c c}	w #  t+        d|z  t,        j.                          xY w#  t+        d|z  t,        j.                          xY w)z succeed iff pyclbr.readmodule_ex(modulename) corresponds
            to the actual module object, module.  Any identifiers in
            ignore are ignored.   If no module is provided, the appropriate
            module is loaded with __import__.objectNz<silly>c                 (   | j                   }t        |t              r"t        ||   t              r|j                  | uryt        |t
              sy|j                  }|j                  d      r"|j                  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LL. \2llG!!$'0@0@0F%+__g>d?"r   rA   zclass=%sr      r7   r8   c                     t        | t              r| j                  |j                  k(  S t        | t              r| j
                  |j                  u S y)NF)r:   type
__module__r=   r   __globals__r9   )itemmodules     r   
defined_inz*PyclbrTest.checkModule.<locals>.defined_in   sA    $%&//99$-''6??::r   ) r   
__import__globalspyclbrreadmodule_exitemsr*   getattrr:   FunctionassertIsInstancer   r   rI   r0   rL   rH   	__bases__r=   superr#   r   r   r   r9   keysappendmethodsr3   rA   dirr.   )r   
moduleNamerL   r!   dictrD   rA   valuepy_itembase
real_basespyclbr_basesactualMethodsmfoundMethodsrM   rK   s                    r   checkModulezPyclbrTest.checkModule6   s    VsH:.>  
GIrI;GF##J/	#   ::< -	KD%v~vtV4fd+G%1%%g>Q/RS%%3  !3!3U\\B%%gt4%%38?8I8IJdmmJ
J-2[[ ;%) ")vt!<  ;  ;%%j,G
 !# ))..0 0A!)<a@%,,Q/0  "++- /A!u}234$++CHQJ7$++A.	/	%%lM6J$$W%7%7F..w/?/?/57Q-	`	 K 	:D64(D$$!56dF+%%dD&9		:O K ;
*w.SZZ@(*w.SZZ@s%   &K	K KA K:!K7:!Lc                 r    | j                  d       | j                  dd       | j                  dd       y )NrP   doctest)TestResults	_SpoofOutDocTestCase_DocTestSuiter!   difflib)Matchrf   r   s    r   	test_easyzPyclbrTest.test_easy   s?    " 	 ,L 	M:6r   c                 ,    | j                  ddg       y )Nztest.pyclbr_inputomrm   rp   rq   s    r   test_decoratorszPyclbrTest.test_decorators   s    ,dV<r   c                     t         dddi d f\  }}}}}t        d      }j                  ||||||      }j                  |d|dd      }j	                  |d	d
d      }	j	                  |	ddd      }
j                  |ddd      }j                  |dd |dd      }j	                  |ddd      }j                  |ddd      }j                  |ddd      }j	                  |ddd      }||d} fd d |d |       y )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f1rE      f2   c1C0      F1   
   C1   C2   F3)ry   r   c                 P   j                  |j                         |j                                |j                         D ]  }j                  |j                  |          |j                         D ]  }j                  |j                  |         |j                         D ]  }||   ||   }}t        |      |j                  |j                  |j                  |j                  |j                  f}t        |      |j                  |j                  |j                  |j                  |j                  f}	j                  ||	       t        |      j                  u r&j                  |j                  |j                          
||j                  ||j                          y)a  Return equality of tree pairs.

            Each parent,children pair define a tree.  The parents are
            assumed equal.  Comparing the children dictionaries as such
            does not work due to comparison by identity and double
            linkage.  We separate comparing string and number attributes
            from comparing the children of input children.
            N)r0   rX   valuesassertIsparentrH   rA   r   rL   linenor|   ClassrZ   children)parent1	children1parent2	children2obr-   o1o2t1t2comparembr   s             r   r   z'PyclbrTest.test_nested.<locals>.compare   s@    Y^^-y~~/?@&&( 2bii12&&( 2bii12 ~~' :"33B"XrwwBIIr}}T"XrwwBIIr}}T  R(8rxx'$$RZZ<BKKR[[9:r   )rP   r   _create_treerT   _nest_function_nest_classr   )r   rd   pftisourceactualry   r}   r   r   r   r   r   r   r   expectedr   r   s   `                 @@r   test_nestedzPyclbrTest.test_nested   s2   Ir471aA  " Aq&!Q7 [[D!Q1[5r4A.r4A.^^Ba+XXatQbX9r4B/^^Bb"-^^Bb"-r4R0"%	:0 	fdH-r   c                    | j                   } |dd       t        j                         5  t        j                  dt                |dd       d d d         |dd       t        j                         5  t        j                  dt                |d	d
       d d d         |dd        |dd        |d        |d       y # 1 sw Y   yxY w# 1 sw Y   :xY w)Nrandom)Randomrm   r!   cgi)logpickle)partialPickleBuffer	sre_parse)dumpgroupspospdb)Union_ModuleTarget_ScriptTargetpydoc)inputoutputzemail.parserztest.test_pyclbr)rf   warningscatch_warningssimplefilterDeprecationWarning)r   cms     r   test_otherszPyclbrTest.test_others   s     	8K($$& 	'!!(,>?uX&	' 	878$$& 	>!!(,>?{#<=	> 	>	

 	7/0 	>
!	' 	'	> 	>s   %C6%CCC)Nr   )r=   rI   __qualname__r#   r*   r.   r3   rf   rr   ru   r   r   r   r   r   r   r      s3    4B #
Y:v7=;.zr   r   c                   $    e Zd Zd Zd Zd Zd Zy)ReadmoduleTestsc                 J    t         j                  j                         | _        y r   )rP   _modulescopyrq   s    r   setUpzReadmoduleTests.setUp   s    ,,.r   c                 .    | j                   t        _         y r   )r   rP   rq   s    r   tearDownzReadmoduleTests.tearDown   s    --r   c                 N    | j                  t        t        j                  d       y )Nzasyncio.foo)assertRaisesImportErrorrP   rQ   rq   s    r   test_dotted_name_not_a_packagez.ReadmoduleTests.test_dotted_name_not_a_package   s    
 	+v';';]Kr   c                    d}|t         j                  vsJ t        j                  |      5  | j	                  t
              5  t        j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ndoesnotexist)rP   r   test_importlib_utiluncacher   ModuleNotFoundErrorrQ   )r   module_names     r   test_module_has_no_specz'ReadmoduleTests.test_module_has_no_spec  ss    $&//111 ((5 	2""#67 2$$[12	2 	22 2	2 	2s#   A5A)A5)A2	.A55A>N)r=   rI   r   r   r   r   r   r   r   r   r   r      s    /(L2r   r   __main__)__doc__r   textwrapr   typesr   r   r   rP   unittestr   r   unittest_maintest.test_importlibr	   r   r   rH   staticmethodStaticMethodTypeclassmethodr;   r   r   r=   r   r   r   <module>r      st   
   ? ?  4 ;  \23 {>23U Up2h 20 zO r   