
    <e`&                         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
                     dS dS )    Nc                 d   t          j        |           }|D ]}t           j                            | |          }t           j                            |          r/t           j                            |          st          |           pt          j        |           t          j        |            d S N)	oslistdirpathjoinisdirislinkcleanoutremovermdir)rootnamesnamefullnames       $/usr/lib/python3.11/test/test_pkg.pyr   r      s    JtE    7<<d++7=="" 	 27>>(+C+C 	 XIhHTNNNNN    c                 j    d| v r|                      d           d| v r|                      d           | S )N__builtins____initializing__)r   )lsts    r   fixdirr      sB    

>"""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dS )TestPkgc                     d | _         d | _        t          t          j                  | _        t                      | _        d S r   )r   pkgnamelistsysr   syspathsetmodules_to_cleanup)selfs    r   setUpzTestPkg.setUp0   s1    	CH~~"%%%r   c                      j         t          j        d d <    j        D ]}|t          j        v rt          j        |=  j        rt           j                    j        r* fdt          j        D             }|D ]}t          j        |= d S d S )Nc                 L    g | ] }j         |                    d           v |!S ).)r   split).0r   r"   s     r   
<listcomp>z$TestPkg.tearDown.<locals>.<listcomp>@   s9     ; ; ;,$**S//99 999r   )r   r   r   r!   modulesr   r   r   )r"   
modulenamer*   r   s   `   r   tearDownzTestPkg.tearDown6   s    l1 	, 	,JS[((K
+9 	 TY < 	&; ; ; ; ; ; ;G & &K%%		& 	&& &r   c                 h    t          t          j        |          t                      d| i           d S )Nr"   )exectextwrapdedentglobals)r"   codes     r   run_codezTestPkg.run_codeE   s,    X_T""GII~>>>>>r   c                    t          j                    }t          j                            d|           t
          j                            |          st          j        |           |D ]\  }}|                                }| j	        
                    d                    |                     |}|D ]"}t
          j                            ||          }#|t          j        |           t          |d          5 }|                    |           |                    d          s|                    d           d d d            n# 1 swxY w Y   || _        |d         d         | _        d S )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   w}}T"" 	HTNNN# 	& 	&ND(JJLLE#''888H 5 57<<!44""""(C(( &AGGH%%%#,,T22 && & & & & & & & & & & & & & & 	Qx{s   =A E		E	E	c                 @    ddg}|                      |           dd l}d S )N)t1N)zt1 __init__.py r   )rD   rF   )r"   hierrF   s      r   test_1zTestPkg.test_1^   s,    45D					r   c                 d   g d}|                      |           dd l}dd l}|                     |j        d           |                     |j        j        d           |                     |j        j        j        d           d}|                     |           ddlm} ddlm} dd	lm	} |                     |j        d           |                     |j        d           |                     |j        j        d           d
D ]-}| 
                    t                      d         d|z             .dd l}dd l}|                     |j        d           |                     |j        j        d           |                     |j        j        j        d           d}|                     |           d S )N))t2N)zt2 __init__.pyz'doc for t2')zt2 subN)zt2 sub __init__.pyrG   )zt2 sub subsubN)zt2 sub subsub __init__.pyspam = 1r   rK   zt2.subzt2.sub.subsubz{
            import t2
            from t2 import *
            self.assertEqual(dir(), ['self', 'sub', 't2'])
            subsubsubspam)rR   rN   rP   rK   r   zFailed to import %sz_
            from t2 import *
            self.assertEqual(dir(), ['self', 'sub'])
            )rD   t2.subt2.sub.subsubassertEqual__name__rN   rP   r3   rK   rR   
assertTruelocals)r"   rH   rK   srN   rP   rR   r   s           r   test_2zTestPkg.test_2c   s   
 
 
 	Dd+++(333/AAA
 	a!!!!!!&&&&&&x000/:::,o>>>3 	L 	LDOOFHHV,.Cd.JKKKKd+++(333/AAA 	ar   c                     g d}|                      |           dd l}|                     |j        d           |                     |j        j        d           |                     |j        j        j        d           d S )N))t3N)zt3 __init__.pyrG   )zt3 subN)zt3 sub __init__.pyrG   )zt3 sub subsubN)zt3 sub subsub __init__.pyrL   r   r\   zt3.subzt3.sub.subsub)rD   t3.sub.subsubrU   rV   rN   rP   )r"   rH   r\   s      r   test_3zTestPkg.test_3   s       	Dd+++(333/AAAAAr   c                 f    g d}|                      |           d}|                     |           d S )N)	)zt4.pyz)raise RuntimeError('Shouldnt load t4.py'))t4N)zt4 __init__.pyrG   )z	t4 sub.py*raise RuntimeError('Shouldnt load sub.py'))zt4 subN)zt4 sub __init__.pyrG   )zt4 sub subsub.py-raise RuntimeError('Shouldnt load subsub.py'))zt4 sub subsubN)zt4 sub subsub __init__.pyrL   z[
            from t4.sub.subsub import *
            self.assertEqual(spam, 1)
            )rD   r3   )r"   rH   rY   s      r   test_4zTestPkg.test_4   sH       	D 	ar   c                    g d}|                      |           dd l}d}|                     |           dd l}|                     t	          t          |                    g d           |                     t	          t          |j                            g d           |                     t	          t          |j                            g d           d S )N))t5N)zt5 __init__.pyzimport t5.foo)zt5 string.pyrL   )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__rV   __package____path____spec__foostringre   )rf   rg   rh   ri   rV   rj   rl   rn   )rf   rg   rh   ri   rV   rj   rl   rR   )rD   re   r3   rU   r   dirrm   rn   )r"   rH   re   rY   s       r   test_5zTestPkg.test_5   s      	D			 	a			B1 1 1	2 	2 	2 	BF,,K K K	L 	L 	L 	BI//I I I	J 	J 	J 	J 	Jr   c                     g d}|                      |           dd l}|                     t          t	          |                    g d           d}|                     |           d S )N))t6N)zt6 __init__.pyz!__all__ = ['spam', 'ham', 'eggs'])z
t6 spam.pyrG   )z	t6 ham.pyrG   )z
t6 eggs.pyrG   r   )	__all__rf   rg   rh   ri   rV   rj   rk   rl   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'])
            )rD   rr   rU   r   ro   r3   )r"   rH   rr   rY   s       r   test_6zTestPkg.test_6   s       	D			B& & &	' 	' 	' 	ar   c                 B   g d}|                      |           d\  }}}dd l}|                     t          t	          |                    g d           |                     |           ddlm} |                     t          t	          |                    g d           |                     |           |                     |           ddlm} |                     t          t	          |                    g d           |                     |           |                     |           |                     |           ddl	m
} |                     |d	           |                     |           |                     |           |                     |           d S )
N)	)zt7.pyrG   )t7N)zt7 __init__.pyrG   )z	t7 sub.pyra   )zt7 subN)zt7 sub __init__.pyrG   )z
t7 sub .pyrb   )zt7 sub subsubN)zt7 sub subsub __init__.pyrL   )NNNr   )rf   rg   rh   ri   rV   rj   rk   rl   rM   rO   )	rf   rg   rh   ri   rV   rj   rk   rl   rR   rQ      )rD   rv   rU   r   ro   assertFalserN   t7.subrP   t7.sub.subsubrR   )	r"   rH   rv   rN   rP   tassubpar	subsubsubhams	            r   test_7zTestPkg.test_7   s      	D +CC))M M M	N 	N 	N 	$$$$$$F,,M M M	N 	N 	N 	......I//" " "	# 	# 	# 	   ------a        r      z)Docstrings are omitted with -O2 and abovec                     ddt           j        z   dz   dfg}|                     |           dd l}|                     |j        d           d S )N)t8Nzt8 __init__pyz'doc for t8'r   z
doc for t8)r   extseprD   r   rU   rg   )r"   rH   r   s      r   test_8zTestPkg.test_8  s]     ry(-~> 	D			\22222r   N)rV   
__module____qualname__r#   r,   r3   rD   rI   rZ   r^   rc   rp   rt   r   unittestskipIfr   flagsoptimizer    r   r   r   r   .   s        ( ( (& & &? ? ?# # #,  
- - -^B B B   *J J J:  6*! *! *!X X_SY'1,@B B3 3B B3 3 3r   r   __main__)r   r   r7   r/   r   r   r   TestCaser   rV   mainr   r   r   <module>r      s    


 				   
    0w3 w3 w3 w3 w3h w3 w3 w3r zHMOOOOO r   