
    daf`&                         d dl Z d dlZd dlZd dlZd dlZd Zd Z G d dej                        Ze	dk(  r ej                          yy)    Nc                 d   t        j                  |       }|D ]  }t         j                  j                  | |      }t         j                  j	                  |      r+t         j                  j                  |      st        |       mt        j                  |        t        j                  |        y N)	oslistdirpathjoinisdirislinkcleanoutremovermdir)rootnamesnamefullnames       (/root/Python-3.12.4/Lib/test/test_pkg.pyr   r      ss    JJtE  77<<d+77=="277>>(+CXIIh  HHTN    c                 Z    d| v r| j                  d       d| v r| j                  d       | S )N__builtins____initializing__)r   )lsts    r   fixdirr      s0    

>"S 

%&Jr   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z ej                  ej"                  j$                  dk\  d      d        Zy)TestPkgc                 z    d | _         d | _        t        t        j                        | _        t               | _        y r   )r   pkgnamelistsysr   syspathsetmodules_to_cleanup)selfs    r   setUpzTestPkg.setUp0   s)    	CHH~"%%r   c                    | j                   t        j                  d d  | j                  D ]&  }|t        j                  v st        j                  |= ( | j
                  rt        | j
                         | j                  rSt        j                  D cg c]!  }| j                  |j                  d      v r|# }}|D ]  }t        j                  |=  y y c c}w )N.)	r   r   r   r!   modulesr   r   r   split)r"   
modulenamer   r&   s       r   tearDownzTestPkg.tearDown6   s    ll11 	,JS[[(KK
+	, 99TYY <<(+ ;,,$**S/9  ;G ; &KK%& ;s   &Cc                 X    t        t        j                  |      t               d| i       y )Nr"   )exectextwrapdedentglobals)r"   codes     r   run_codezTestPkg.run_codeE   s    X__T"GI~>r   c                    t        j                         }t        j                  j	                  d|       t
        j                  j                  |      st        j                  |       |D ]  \  }}|j                         }| j                  j                  dj                  |             |}|D ]"  }t
        j                  j                  ||      }$ |t        j                  |       t        |d      5 }|j                  |       |j                  d      s|j                  d       d d d         || _        |d   d   | _        y # 1 sw Y   xY w)Nr   r%   w
)tempfilemkdtempr   r   insertr   r	   mkdirr'   r!   addr   openwriteendswithr   r   )	r"   descrr   r   contentscompsr   cfs	            r   mkhierzTestPkg.mkhierH   s   !4 ww}}T"HHTN# 	&ND(JJLE##''8H 577<<!45"(C( &AGGH%#,,T2& &	& 	Qx{& &s   84EE	c                 6    ddg}| j                  |       dd l}y )N)t1N)zt1 __init__.py r   )rA   rC   )r"   hierrC   s      r   test_1zTestPkg.test_1^   s    45Dr   c                    g d}| j                  |       dd l}dd l}| j                  |j                  d       | j                  |j
                  j                  d       | j                  |j
                  j                  j                  d       d}| j                  |       ddlm} ddlm} dd	lm	} | j                  |j                  d       | j                  |j                  d       | j                  |j                  j                  d       d
D ]"  }| j                  t               d   d|z         $ dd l}dd l}| j                  |j                  d       | j                  |j
                  j                  d       | j                  |j
                  j                  j                  d       d}| j                  |       y )N))t2N)zt2 __init__.pyz'doc for t2')zt2 subN)zt2 sub __init__.pyrD   )zt2 sub subsubN)zt2 sub subsub __init__.pyspam = 1r   rH   zt2.subzt2.sub.subsubz{
            import t2
            from t2 import *
            self.assertEqual(dir(), ['self', 'sub', 't2'])
            subsubsubspam)rO   rK   rM   rH   r   zFailed to import %sz_
            from t2 import *
            self.assertEqual(dir(), ['self', 'sub'])
            )rA   t2.subt2.sub.subsubassertEqual__name__rK   rM   r0   rH   rO   
assertTruelocals)r"   rE   rH   srK   rM   rO   r   s           r   test_2zTestPkg.test_2c   sZ   
 	Dd+(3//A
 	a!&x0/:,,o>3 	LDOOFHV,.Cd.JK	L 	d+(3//A 	ar   c                    g d}| j                  |       dd l}| j                  |j                  d       | j                  |j                  j                  d       | j                  |j                  j
                  j                  d       y )N))t3N)zt3 __init__.pyrD   )zt3 subN)zt3 sub __init__.pyrD   )zt3 sub subsubN)zt3 sub subsub __init__.pyrI   r   rY   zt3.subzt3.sub.subsub)rA   t3.sub.subsubrR   rS   rK   rM   )r"   rE   rY   s      r   test_3zTestPkg.test_3   sd     	Dd+(3//Ar   c                 T    g d}| j                  |       d}| j                  |       y )N)	)zt4.pyz)raise RuntimeError('Shouldnt load t4.py'))t4N)zt4 __init__.pyrD   )z	t4 sub.py*raise RuntimeError('Shouldnt load sub.py'))zt4 subN)zt4 sub __init__.pyrD   )zt4 sub subsub.py-raise RuntimeError('Shouldnt load subsub.py'))zt4 sub subsubN)zt4 sub subsub __init__.pyrI   z[
            from t4.sub.subsub import *
            self.assertEqual(spam, 1)
            )rA   r0   )r"   rE   rV   s      r   test_4zTestPkg.test_4   s,     	D 	ar   c                 p   g d}| j                  |       dd l}d}| j                  |       dd l}| j                  t	        t        |            g d       | j                  t	        t        |j                              g d       | j                  t	        t        |j                              g d       y )N))t5N)zt5 __init__.pyzimport t5.foo)zt5 string.pyrI   )z	t5 foo.pyz-from . import string; assert string.spam == 1r   zo
            from t5 import *
            self.assertEqual(dir(), ['foo', 'self', 'string', 't5'])
            )
__cached____doc____file__
__loader__rS   __package____path____spec__foostringrb   )rc   rd   re   rf   rS   rg   ri   rk   )rc   rd   re   rf   rS   rg   ri   rO   )rA   rb   r0   rR   r   dirrj   rk   )r"   rE   rb   rV   s       r   test_5zTestPkg.test_5   s     	D 	aB1	2 	BFF,K	L 	BII/I	Jr   c                     g d}| j                  |       dd l}| j                  t        t	        |            g d       d}| j                  |       y )N))t6N)zt6 __init__.pyz!__all__ = ['spam', 'ham', 'eggs'])z
t6 spam.pyrD   )z	t6 ham.pyrD   )z
t6 eggs.pyrD   r   )	__all__rc   rd   re   rf   rS   rg   rh   ri   a  
            import t6
            from t6 import *
            self.assertEqual(fixdir(dir(t6)),
                             ['__all__', '__cached__', '__doc__', '__file__',
                              '__loader__', '__name__', '__package__',
                              '__path__', '__spec__', 'eggs', 'ham', 'spam'])
            self.assertEqual(dir(), ['eggs', 'ham', 'self', 'spam', 't6'])
            )rA   ro   rR   r   rl   r0   )r"   rE   ro   rV   s       r   test_6zTestPkg.test_6   sL     	DB&	' 	ar   c                    g d}| j                  |       d\  }}}dd l}| j                  t        t	        |            g d       | j                  |       ddlm} | j                  t        t	        |            g d       | j                  |       | j                  |       ddlm} | j                  t        t	        |            g d       | j                  |       | j                  |       | j                  |       ddl	m
} | j                  |d	       | j                  |       | j                  |       | j                  |       y )
N)	)zt7.pyrD   )t7N)zt7 __init__.pyrD   )z	t7 sub.pyr^   )zt7 subN)zt7 sub __init__.pyrD   )z
t7 sub .pyr_   )zt7 sub subsubN)zt7 sub subsub __init__.pyrI   )NNNr   )rc   rd   re   rf   rS   rg   rh   ri   rJ   rL   )	rc   rd   re   rf   rS   rg   rh   ri   rO   rN      )rA   rs   rR   r   rl   assertFalserK   t7.subrM   t7.sub.subsubrO   )	r"   rE   rs   rK   rM   tassubpar	subsubsubhams	            r   test_7zTestPkg.test_7   s"    	D +CC)M	N 	$F,M	N 	.I/"	# 	 -a  r      z)Docstrings are omitted with -O2 and abovec                     ddt         j                  z   dz   dfg}| j                  |       dd l}| j	                  |j
                  d       y )N)t8Nzt8 __init__pyz'doc for t8'r   z
doc for t8)r   extseprA   r   rR   rd   )r"   rE   r   s      r   test_8zTestPkg.test_8  sI     ryy(-~> 	D\2r   N)rS   
__module____qualname__r#   r)   r0   rA   rF   rW   r[   r`   rm   rq   r|   unittestskipIfr   flagsoptimizer    r   r   r   r   .   sr    (&?#,
-^B *J:6*!X X__SYY''1,@B3B3r   r   __main__)r   r   r4   r,   r   r   r   TestCaser   rS   mainr   r   r   <module>r      sO     	   
0w3h w3r zHMMO r   