
    0hhn(                         S r SSKrSSKJr  SSKJrJrJr  SSKrSSK	J
r
Jr  SSKJr  SSKrSSKJr  \" \" S 5      5      r\" \" S	 5      5      r " S
 S\
\5      r " S S\
5      r\S:X  a  \" 5         gg)z)
Test cases for pyclbr.py
Nick Mathewson
    N)dedent)FunctionType
MethodTypeBuiltinFunctionType)TestCasemain)util)ExtraAssertionsc                      g N r       9/opt/python-3.13.8/usr/lib/python3.13/test/test_pyclbr.py<lambda>r          Tr   c                     g r   r   )cs    r   r   r      r   r   c                   H    \ rS rSrS rS rS rSS jrS rS	 r	S
 r
S rSrg)
PyclbrTest   c                     [        U5      [        U5      -  [        U5      -
  nU(       aG  [        SU< SU< SU< 3[        R                  S9  U R	                  SUR                  5       -  5        gg)z/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   assertListEqPyclbrTest.assertListEq   sQ    r7SW$F3r2v>SZZPIIlW[[]23 r   c                 n    X#;   a  gX!;  a  [        SU[        R                  S9  U R                  X!5        g)z)succeed iff key in obj or key in ignore. Nz***r   )r   r   r   assertIn)r    objkeyr#   s       r   assertHaskeyPyclbrTest.assertHaskey#   s*    =&>%#**-cr   c                 >    X;  a  X#;  a  U R                  X5        ggg)z1succeed iff a == b or a in ignore or b in ignore N)assertEqual)r    abr#   s       r   assertEqualsOrIgnored PyclbrTest.assertEqualsOrIgnored*   s     ?qQ"  /?r   Nr   c           	      *   [        U5      [        S/5      -  nUc  [        U[        5       0 S/5      n[        R                  " U5      nS nUR                  5        GH  u  pgXc;   a  M  U R                  X&U5        [        X&5      n[        U[        R                  5      (       aV  U R                  U[        [        45        UR                  U:w  a  Mw  U R                  UR                  UR                  5        M  U R                  U[         5        UR                  U:w  a  M  UR"                   V	s/ s H  oR$                  PM     n
n	UR&                   V	s/ s H  n	[        U	SU	5      PM     nn	 U R)                  XU5        / nUR0                  R3                  5        H.  nU" U[        X5      U5      (       d  M  UR5                  U5        M0     UR7                  S5      =n(       ay  / nUR8                  R3                  5        HX  nUR;                  S	5      (       a.  UR=                  S	5      (       d  UR5                  SU U 35        MG  UR5                  U5        MZ     O#[?        UR8                  R3                  5       5      n U R)                  XU5        U R                  UR                  UR                  5        U RA                  UR$                  URB                  U5        GM     S
 n[E        U5       HM  n[        X&5      n[        U[         [        45      (       d  M+  U" UU5      (       d  M;  U RG                  XFU5        MO     gs  sn	f s  sn	f !   [+        SU-  [,        R.                  S9  e = f!   [+        SU-  [,        R.                  S9  e = f)zsucceed 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                    U R                   n[        U[        5      (       a(  [        X2   [        5      (       a  UR                  U La  gO[        U[
        5      (       d  gUR                  nUR                  S5      (       a?  UR                  S5      (       d)  U R                  R                  S5      =n(       a  SU U 3nXB:H  $ )NF___)
__dict__
isinstancer   ClassMethodType__self__r   __name__
startswithendswithlstrip)oclassr)   name	classdictobjnamestripped_typenames         r   ismethod(PyclbrTest.checkModule.<locals>.ismethod>   s    I#z**"9?ODDLL.  /\22llG!!$''0@0@0F0F(.(>(>s(CC$C !"3!4WI>G?"r   rA   zclass=%sr   r7   r6   c                     [        U [        5      (       a  U R                  UR                  :H  $ [        U [        5      (       a  U R
                  UR                  L $ g)NF)r9   type
__module__r<   r   __globals__r8   )itemmodules     r   
defined_in*PyclbrTest.checkModule.<locals>.defined_in   sG    $%%&//99$--''6??::r   )$r   
__import__globalspyclbrreadmodule_exitemsassertHasAttrgetattrr9   FunctionassertIsInstancer   r   rI   r.   rL   rH   	__bases__r<   superr%   r   r   r   r8   keysappendr?   methodsr=   r>   listr1   rA   dirr+   )r    
moduleNamerL   r#   dictrE   rA   valuepy_itembase
real_basespyclbr_basesactualMethodsmrD   foundMethodsrM   rK   s                     r   checkModulePyclbrTest.checkModule/   s    VsH:.>  
GIrI;GF##J/	#"  ::<KD~vV4f+G%11%%g>Q/RS%%3  !3!3U\\B%%gt4%%38?8I8IJ8Imm8I
J-2[[ ;-8T ")vt!<-8   ;%%jG
 !# ))..0A)<a@@%,,Q/ 1 )-C(88$8#%L"]]//1<<--ajj6F6F(//!4E3Fqc0JK(//2	 2 $((:(:(<#=L	%%l6J$$W%7%7F..w/?/?/57Y (h	 KD6(D$$!566dF++%%d&9	  W K ;
*w.SZZ@0*w.SZZ@s%   1M	M0MAM4M14Nc                 f    U R                  S5        U R                  SSS9  U R                  SSS9  g )NrQ   doctest)TestResults	_SpoofOutDocTestCase_DocTestSuiter#   difflib)Matchri   r    s    r   	test_easyPyclbrTest.test_easy   s?    " 	 ,L 	M:6r   c                 (    U R                  SSS/S9  g )Nztest.pyclbr_inputomfrq   rt   ru   s    r   
test_casesPyclbrTest.test_cases   s    ,dC[Ar   c           	        ^ ^^ [         mSSS0 S 4u  pp4n[        S5      nTR                  XX6XE5      nTR                  USUSSS9nTR	                  US	S
S5      n	TR	                  U	SSS5      n
TR                  USSS5      nTR                  USS USSS9nTR	                  USSS5      nTR                  USSS5      nTR                  USSS5      nTR	                  USSS5      nXS.nUUU 4S jmT" S US U5        g )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f1      f2   c1C0      F1   
   C1   C2   F3)r   r   c                 N  > TR                  UR                  5       UR                  5       5        UR                  5        H  nTR                  UR                  U 5        M!     UR                  5        H  nTR                  UR                  U5        M!     UR                  5        H  nX   X5   pv[        U5      UR                  UR                  UR                  UR                  UR                  4n[        U5      UR                  UR                  UR                  UR                  UR                  4n	TR                  X5        [        U5      TR                  L a&  TR                  UR                  UR                  5        T
" XfR                  XwR                  5        M     g)a9  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)r.   rZ   valuesassertIsparentrH   rA   r   rL   linenor   Classr\   children)parent1	children1parent2	children2obr*   o1o2t1t2comparembr    s             r   r   'PyclbrTest.test_nested.<locals>.compare   s%    Y^^-y~~/?@&&(bii1 )&&(bii1 ) ~~'"B"XrwwBIIr}}T"XrwwBIIr}}T  (8rxx'$$RZZ<KK[[9 (r   )rQ   r   _create_treerV   _nest_function_nest_classr   )r    rg   prz   tisourceactualr   r   r   r   r   r   r   r   r   expectedr   r   s   `                 @@r   test_nestedPyclbrTest.test_nested   s&   Ir47aA  " 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                    U R                   nU" SSS9  U" SSS9  [        R                  " 5          [        R                  " S[        5        U" SSS9  S S S 5        U" S	S
S9  U" SSS9  U" S5        U" S5        g ! , (       d  f       N-= f)Nrandom)Randomrq   pickle)partialPickleBufferr#   	sre_parse)dumpgroupspospdb)Union_ModuleTarget_ScriptTarget
_ZipTargetrlcompleterpydoc)inputoutputzemail.parserztest.test_pyclbr)ri   warningscatch_warningssimplefilterDeprecationWarning)r    cms     r   test_othersPyclbrTest.test_others   s     	8K(
878$$&!!(,>?{#<= ' 	[	

 	7/0 	>
 '&s   #A::
B)Nr   )r<   rI   __qualname____firstlineno__r%   r+   r1   ri   rv   r{   r   r   __static_attributes__r   r   r   r   r      s.    4 #
^:@7B;.zr   r   c                   ,    \ rS rSrS rS rS rS rSrg)ReadmoduleTests   c                 J    [         R                  R                  5       U l        g r   )rQ   _modulescopyru   s    r   setUpReadmoduleTests.setUp   s    ,,.r   c                 .    U R                   [        l         g r   )r   rQ   ru   s    r   tearDownReadmoduleTests.tearDown   s    --r   c                 N    U R                  [        [        R                  S5        g )Nzasyncio.foo)assertRaisesImportErrorrQ   rR   ru   s    r   test_dotted_name_not_a_package.ReadmoduleTests.test_dotted_name_not_a_package   s    
 	+v';';]Kr   c                    SnU[         R                  ;  d   e[        R                  " U5         U R	                  [
        5         [         R                  " U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Ndoesnotexist)rQ   r   test_importlib_utiluncacher   ModuleNotFoundErrorrR   )r    module_names     r   test_module_has_no_spec'ReadmoduleTests.test_module_has_no_spec   sa    $&//111 ((5""#67$$[1 8 6577 65s#   A>A-A>-
A;	7A>>
B)r   N)	r<   rI   r   r   r   r   r   r   r   r   r   r   r   r      s    /(L2r   r   __main__)__doc__r   textwrapr   typesr   r   r   rQ   unittestr   r   unittest_maintest.test_importlibr	   r   r   test.support.testcaser
   rH   staticmethodStaticMethodTypeclassmethodr:   r   r   r<   r   r   r   <module>r      sy   
   ? ?  4 ;  1 \23 {>23P? Pf2h 20 zO r   