B
    \.                 @   s   d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZmZmZmZmZ ddlmZ ddlmZ ddlmZ G d	d
 d
ejejZdd Zedkree  dS )zTests for distutils.dir_util.    N)patch)dir_utilerrors)mkpathremove_treecreate_tree	copy_treeensure_relative)log)support)run_unittestc                   s|   e Zd Zdd Z fddZ fddZdd Zee	j
d	d
dd Zdd Zdd Zdd Zdd Zdd Z  ZS )DirUtilTestCasec             G   s.   t |dkr| j||  n| j| d S )Nr   )len_logsappend)selfmsgargs r   .lib/python3.7/distutils/tests/test_dir_util.py_log   s    zDirUtilTestCase._logc                sb   t t|   g | _|  }tj|d| _tj| jd| _	tj|d| _
tj| _| jt_d S )NZdeephereZdeep2)superr   setUpr   Zmkdtempospathjoinroot_targettargettarget2r
   infoold_logr   )r   Ztmp_dir)	__class__r   r   r      s    zDirUtilTestCase.setUpc                s   | j t_tt|   d S )N)r!   r
   r    r   r   tearDown)r   )r"   r   r   r#   #   s    zDirUtilTestCase.tearDownc             C   s   t | jdd g }| | j| t| jdd t | jdd d| j d| j g}| | j| g | _t| jdd d| j g}| | j| d S )Nr   )verbose   zcreating %sz'removing '%s' (and everything under it))r   r   assertEqualr   r   r   )r   wantedr   r   r   !test_mkpath_remove_tree_verbosity'   s    z1DirUtilTestCase.test_mkpath_remove_tree_verbositywinz5This test is only appropriate for POSIX-like systems.c             C   st   t d}t | t| jd | tt | jjd| @  t| jd | tt | jjd| @  d S )N   i  im  )	r   umaskr   r   r&   statS_IMODEst_moder   )r   r+   r   r   r   test_mkpath_with_custom_mode8   s    

z,DirUtilTestCase.test_mkpath_with_custom_modec             C   st   t | jdddgdd | | jg  t| jdd d| j g}t | jdddgdd | | j| t| jdd d S )NZoneZtwoZthreer   )r$   zcreating %sr%   )r   r   r&   r   r   )r   r'   r   r   r   test_create_tree_verbosityE   s    z*DirUtilTestCase.test_create_tree_verbosityc          	   C   s   t | jdd t| j| jdd | | jg  t| jdd t | jdd tj	
| jd}t|d}|d W d Q R X d|| jf g}t| j| jdd | | j| t| jdd t| jdd d S )Nr   )r$   zok.txtwzsome contentzcopying %s -> %sr%   )r   r   r   r   r&   r   r   r   r   r   r   openwrite)r   a_filefr'   r   r   r   test_copy_tree_verbosityQ   s    z(DirUtilTestCase.test_copy_tree_verbosityc          
   C   s   t | jdd tj| jd}tj| jd}x0||fD ]$}t|d}|d W d Q R X q8W t| j| j | 	t
| jdg t| jdd t| jdd d S )Nr   )r$   zok.txtz
.nfs123abcr1   zsome content)r   r   r   r   r   r2   r3   r   r   r&   listdirr   r   )r   r4   Znfs_filer5   Zfhr   r   r   #test_copy_tree_skips_nfs_temp_filesf   s    z3DirUtilTestCase.test_copy_tree_skips_nfs_temp_filesc             C   sP   t jdkr,| tdd | tdd n | tdd | tdd d S )N/z	/home/foozhome/fooz	some/pathzc:\home\fooz
c:home\foozhome\foo)r   sepr&   r	   )r   r   r   r   test_ensure_relativeu   s
    
z$DirUtilTestCase.test_ensure_relativec          
   C   sL   t dt d4 | tj | jd }t|d W dQ R X W dQ R X dS )zK
        An exception in listdir should raise a DistutilsFileError
        z
os.listdir)Zside_effectN)r   OSErrorZassertRaisesr   ZDistutilsFileErrorZtempdirsr   r   )r   srcr   r   r   #test_copy_tree_exception_in_listdir}   s    
z3DirUtilTestCase.test_copy_tree_exception_in_listdir)__name__
__module____qualname__r   r   r#   r(   unittestZskipIfsysplatform
startswithr/   r0   r6   r8   r;   r?   __classcell__r   r   )r"   r   r      s   
r   c               C   s
   t tS )N)rC   Z	makeSuiter   r   r   r   r   
test_suite   s    rH   __main__)__doc__rC   r   r,   rD   Zunittest.mockr   Z	distutilsr   r   Zdistutils.dir_utilr   r   r   r   r	   r
   Zdistutils.testsr   Ztest.supportr   ZTempdirManagerZTestCaser   rH   r@   r   r   r   r   <module>   s   v