o
    JAf`                     @   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 dd	lmZ G d
d dejejZdd ZedkrTee  dS 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   s0   t |dkr| j||  d S | j| d S )Nr   )len_logsappend)selfmsgargs r   5/usr/lib/python3.10/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   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|  w 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J | t, t| jd}|d W d    n1 s&w   Y  t| j| jdd W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   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_renameA   s   Pz:FileUtilTestCase.test_move_file_exception_unpacking_renamec                 C   s   t dttjddc t dtdddA | t, t| jd}|d W d    n1 s1w   Y  t	| j| j
dd	 W d    n1 sIw   Y  W d    n1 sXw   Y  W d    d S W d    d S 1 spw   Y  d S )
Nr1   r2   r3   z	os.unlinkr)   r%   r4   r   r'   )r   r5   errnoZEXDEVr6   r   r*   r   r+   r   r   r7   r   r   r   )test_move_file_exception_unpacking_unlinkI   s   P z:FileUtilTestCase.test_move_file_exception_unpacking_unlinkc              
   C   s4  t | jd}|d W d    n1 sw   Y  z
t| j| j W n ty> } z| d|  W Y d }~n
d }~ww 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    d S 1 sw   Y  d S )Nr%   r&   zos.link: %shardlinkr)r*   r   r+   r   r=   r   r5   ZskipTestr	   statr   
assertTruer   samestatr-   read)r   r/   estst2st3r   r   r   test_copy_file_hard_linkR   s&   
"z)FileUtilTestCase.test_copy_file_hard_linkc              	   C   s"  t | jd}|d W d    n1 sw   Y  t| j}tdtddd t| j| jdd W d    n1 s>w   Y  t| j}t| j}| 	tj
||||f | tj
||||f | j| jfD ]}t |d	}| | d W d    n1 sw   Y  qod S )
Nr%   r&   zos.linkr   zlinking unsupportedr3   r;   r<   r>   )r*   r   r+   r   r?   r   r5   r   r   r@   r   rA   ZassertFalser-   rB   )r   r/   rD   rE   rF   fnr   r   r    test_copy_file_hard_link_failuref   s"   z1FileUtilTestCase.test_copy_file_hard_link_failure)__name__
__module____qualname__r   r   r$   r0   r8   r:   rG   rI   __classcell__r   r   r!   r   r
      s    
	r
   c                   C   s
   t tS r#   )unittestZ	makeSuiter
   r   r   r   r   
test_suitex   s   
rO   __main__)__doc__rN   r   r9   Zunittest.mockr   Zdistutils.file_utilr   r   Z	distutilsr   Zdistutils.testsr   Zdistutils.errorsr   Ztest.supportr   Ztest.support.os_helperr	   ZTempdirManagerZTestCaser
   rO   rJ   r   r   r   r   <module>   s     i