a
    e=                     @   s   d 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
 ddlmZ ddlmZ ddlmZ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.file_util.    N)patch)	move_file	copy_file)log)support)DistutilsFileError)run_unittestunlinkc                       sX   e Zd Zdd Z fddZ fddZdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )FileUtilTestCasec                 G   s.   t |dkr| j||  n| j| d S )Nr   )len_logsappend)selfmsgargs r   /lib/python3.9/distutils/tests/test_file_util.py_log   s    zFileUtilTestCase._logc                    s`   t t|   g | _tj| _| jt_|  }t	j
|d| _t	j
|d| _t	j
|d| _d S )Nf1f2Zd1)superr
   setUpr   r   infoold_logr   Zmkdtempospathjoinsourcetarget
target_dir)r   Ztmp_dir	__class__r   r   r      s    zFileUtilTestCase.setUpc                    s   | j t_tt|   d S N)r   r   r   r   r
   tearDown)r   r    r   r   r#      s    zFileUtilTestCase.tearDownc                 C   s   t | jd}z|d W |  n
|  0 t| j| jdd g }| | j| t| j| jdd t| j| jdd d| j| jf g}| | j| t| j| jdd g | _t	| j
 t| j| j
dd d| j| j
f g}| | j| d S )Nwsome contentr   verbose   zmoving %s -> %s)openr   writecloser   r   assertEqualr   r   mkdirr   )r   fZwantedr   r   r   test_move_file_verbosity#   s"    z)FileUtilTestCase.test_move_file_verbosityc              
   C   s   t dtddd | tX t| jd}|d W d    n1 sL0    Y  t| j| jdd W d    n1 s|0    Y  W d    n1 s0    Y  d S )	N	os.renamewrongr(   Zside_effectr$   	spam eggsr   r&   )	r   OSErrorassertRaisesr   r)   r   r*   r   r   r   Zfobjr   r   r   )test_move_file_exception_unpacking_rename?   s    (z:FileUtilTestCase.test_move_file_exception_unpacking_renamec                 C   s   t dttjdd t dtddd | tX t| jd}|d W d    n1 sb0    Y  t	| j| j
dd	 W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )
Nr0   r1   r2   z	os.unlinkr(   r$   r3   r   r&   )r   r4   errnoZEXDEVr5   r   r)   r   r*   r   r   r6   r   r   r   )test_move_file_exception_unpacking_unlinkG   s    (z:FileUtilTestCase.test_move_file_exception_unpacking_unlinkc              
   C   s4  t | jd}|d W d    n1 s,0    Y  zt| j| j W n2 ty| } z| d|  W Y d }~nd }~0 0 t| j t	| j}t
| j| jdd t	| j}t	| j}| tj||||f | tj||||f t | jd }| | d W d    n1 s&0    Y  d S )Nr$   r%   zos.link: %shardlinkr)r)   r   r*   r   r<   r   r4   ZskipTestr	   statr   
assertTruer   samestatr,   read)r   r.   estst2st3r   r   r   test_copy_file_hard_linkP   s    ($
z)FileUtilTestCase.test_copy_file_hard_linkc              	   C   s$  t | jd}|d W d    n1 s,0    Y  t| j}tdtddd" t| j| jdd W d    n1 s|0    Y  t| j}t| j}| 	tj
||||f | tj
||||f | j| jfD ]@}t |d	 }| | d W d    q1 s0    Y  qd S )
Nr$   r%   zos.linkr   zlinking unsupportedr2   r:   r;   r=   )r)   r   r*   r   r>   r   r4   r   r   r?   r   r@   ZassertFalser,   rA   )r   r.   rC   rD   rE   fnr   r   r    test_copy_file_hard_link_failured   s    (0z1FileUtilTestCase.test_copy_file_hard_link_failure)__name__
__module____qualname__r   r   r#   r/   r7   r9   rF   rH   __classcell__r   r   r    r   r
      s   
	r
   c                   C   s
   t tS r"   )unittestZ	makeSuiter
   r   r   r   r   
test_suitev   s    rN   __main__)__doc__rM   r   r8   Zunittest.mockr   Zdistutils.file_utilr   r   Z	distutilsr   Zdistutils.testsr   Zdistutils.errorsr   Ztest.supportr   r	   ZTempdirManagerZTestCaser
   rN   rI   r   r   r   r   <module>   s   i