a
    äze`&  ã                   @   s^   d dl Z d dlZd dlZd dlZd dlZdd„ Zdd„ ZG dd„ dejƒZe	dkrZe 
¡  dS )	é    Nc                 C   s\   t  | ¡}|D ]>}t j | |¡}t j |¡rBt j |¡sBt|ƒ qt  |¡ qt  | ¡ d S ©N)	ÚosÚlistdirÚpathÚjoinÚisdirÚislinkÚcleanoutÚremoveÚrmdir)ÚrootÚnamesÚnameÚfullname© r   ú#/usr/lib/python3.9/test/test_pkg.pyr	      s    

r	   c                 C   s(   d| v r|   d¡ d| v r$|   d¡ | S )NÚ__builtins__Ú__initializing__)r
   )Zlstr   r   r   Úfixdir   s
    

r   c                   @   s€   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Ze ejjdkd¡dd„ ƒZdS )ÚTestPkgc                 C   s$   d | _ d | _ttjƒ| _tƒ | _d S r   )r   ÚpkgnameÚlistÚsysr   ÚsyspathÚsetÚmodules_to_cleanup©Úselfr   r   r   ÚsetUp0   s    zTestPkg.setUpc                    sn   ˆ j tjd d …< ˆ jD ]}|tjv rtj|= qˆ jr>tˆ jƒ ˆ jrj‡ fdd„tjD ƒ}|D ]}tj|= q\d S )Nc                    s    g | ]}ˆ j | d ¡v r|‘qS )Ú.)r   Úsplit)Ú.0r   r   r   r   Ú
<listcomp>@   s   ÿz$TestPkg.tearDown.<locals>.<listcomp>)r   r   r   r   Úmodulesr   r	   r   )r   Z
modulenamer#   r   r   r   r   ÚtearDown6   s    



zTestPkg.tearDownc                 C   s   t t |¡tƒ d| iƒ d S )Nr   )ÚexecÚtextwrapÚdedentÚglobals)r   Úcoder   r   r   Úrun_codeE   s    zTestPkg.run_codec           	   	   C   sä   t  ¡ }tj d|¡ tj |¡s,t |¡ |D ]š\}}| ¡ }| j	 
d |¡¡ |}|D ]}tj ||¡}qZ|d u r‚t |¡ q0t|dƒ.}| |¡ | d¡s¬| d¡ W d   ƒ q01 sÀ0    Y  q0|| _|d d | _d S )Nr   r   ÚwÚ
)ÚtempfileÚmkdtempr   r   Úinsertr   r   Úmkdirr    r   Úaddr   ÚopenÚwriteÚendswithr   r   )	r   Zdescrr   r   ÚcontentsÚcompsr   ÚcÚfr   r   r   ÚmkhierH   s$    


*zTestPkg.mkhierc                 C   s   ddg}|   |¡ dd l}d S )N)Út1N)zt1 __init__.pyÚ r   )r9   r:   )r   Úhierr:   r   r   r   Útest_1^   s    
zTestPkg.test_1c                 C   s"  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| ¡ q´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__.pyr;   )zt2 sub subsubN)zt2 sub subsub __init__.pyúspam = 1r   r>   zt2.subzt2.sub.subsubz{
            import t2
            from t2 import *
            self.assertEqual(dir(), ['self', 'sub', 't2'])
            ©Úsub©Úsubsub©Úspam)rE   rA   rC   r>   r   zFailed to import %sz_
            from t2 import *
            self.assertEqual(dir(), ['self', 'sub'])
            )r9   Zt2.subZt2.sub.subsubÚassertEqualÚ__name__rA   rC   r*   r>   rE   Z
assertTrueÚlocals)r   r<   r>   ÚsrA   rC   rE   r   r   r   r   Útest_2c   s0    

zTestPkg.test_2c                 C   sN   g d¢}|   |¡ dd l}|  |jd¡ |  |jjd¡ |  |jjjd¡ d S )N))Út3N)zt3 __init__.pyr;   )zt3 subN)zt3 sub __init__.pyr;   )zt3 sub subsubN)zt3 sub subsub __init__.pyr?   r   rK   zt3.subzt3.sub.subsub)r9   Zt3.sub.subsubrF   rG   rA   rC   )r   r<   rK   r   r   r   Útest_3’   s    
zTestPkg.test_3c                 C   s$   g d¢}|   |¡ d}|  |¡ d S )N)	)zt4.pyz)raise RuntimeError('Shouldnt load t4.py'))Zt4N)zt4 __init__.pyr;   )z	t4 sub.pyú*raise RuntimeError('Shouldnt load sub.py'))zt4 subN)zt4 sub __init__.pyr;   )zt4 sub subsub.pyú-raise RuntimeError('Shouldnt load subsub.py'))zt4 sub subsubN)zt4 sub subsub __init__.pyr?   z[
            from t4.sub.subsub import *
            self.assertEqual(spam, 1)
            )r9   r*   )r   r<   rI   r   r   r   Útest_4¢   s    
zTestPkg.test_4c                 C   s€   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.pyr?   )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__rG   Ú__package__Ú__path__Ú__spec__ÚfooÚstringrP   )rQ   rR   rS   rT   rG   rU   rW   rY   )rQ   rR   rS   rT   rG   rU   rW   rE   )r9   rP   r*   rF   r   ÚdirrX   rY   )r   r<   rP   rI   r   r   r   Útest_5·   s    

ÿÿÿzTestPkg.test_5c                 C   sD   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.pyr;   )z	t6 ham.pyr;   )z
t6 eggs.pyr;   r   )	Ú__all__rQ   rR   rS   rT   rG   rU   rV   rW   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'])
            )r9   r\   rF   r   rZ   r*   )r   r<   r\   rI   r   r   r   Útest_6Ô   s    
ÿ	zTestPkg.test_6c           	      C   sú   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.pyr;   )Út7N)zt7 __init__.pyr;   )z	t7 sub.pyrM   )zt7 subN)zt7 sub __init__.pyr;   )z
t7 sub .pyrN   )zt7 sub subsubN)zt7 sub subsub __init__.pyr?   )NNNr   )rQ   rR   rS   rT   rG   rU   rV   rW   r@   rB   )	rQ   rR   rS   rT   rG   rU   rV   rW   rE   rD   é   )r9   r_   rF   r   rZ   ZassertFalserA   Zt7.subrC   Zt7.sub.subsubrE   )	r   r<   r_   rA   rC   ZtasZsubparZ	subsubsubZhamr   r   r   Útest_7ï   s4    

ÿ
ÿ

ÿ




zTestPkg.test_7é   z)Docstrings are omitted with -O2 and abovec                 C   s:   ddt j d dfg}|  |¡ dd l}|  |jd¡ d S )N)Út8Nzt8 __init__Úpyz'doc for t8'r   z
doc for t8)r   Úextsepr9   rc   rF   rR   )r   r<   rc   r   r   r   Útest_8  s    þ
zTestPkg.test_8N)rG   Ú
__module__Ú__qualname__r   r$   r*   r9   r=   rJ   rL   rO   r[   r^   ra   ÚunittestZskipIfr   ÚflagsÚoptimizerf   r   r   r   r   r   .   s   /,ÿr   Ú__main__)r   r   r-   r&   ri   r	   r   ZTestCaser   rG   Úmainr   r   r   r   Ú<module>   s   
 z