U
    `t                     @   sv   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ zd dlZW n e	k
r`   dZY nX dd Z
dd ZdS )    N)supportc              	   C   s  zt j }W n ttfk
r*   d }Y nZX tjd|d g }ttdrT|	tj
 ttdrj|	tj |D ]}tj|d|d qnt  tt j | jrt jdtj| j t j D ]P}t|drt|jD ]\}}tj||j|< qt|dd rtj|j|_q| jr d	tj_| j d k	r8t!| j  | j"d k	rPt#$| j" t%| j&od| j&d
k | j't_'tt drdd }t (| d S )NT)Zall_threadsfileSIGALRMSIGUSR1)chainr   r   __path____file__F   addaudithookc                 S   s   d S N )nameargsr   r   ,/usr/lib/python3.8/test/libregrtest/setup.py_test_audit_hookL   s    z%setup_tests.<locals>._test_audit_hook))sys
__stderr__fileno
ValueErrorAttributeErrorfaulthandlerZenablehasattrsignalappendr   r   registerreplace_stdoutr   Zrecord_original_stdoutstdoutZtestdirpathinsertosabspathmodulesvalues	enumerater   getattrr   Z
huntrleaksunittestZBaseTestSuiteZ_cleanupZmemlimitZset_memlimitZ	thresholdgcZset_thresholdZsuppress_msvcrt_assertsverboseZuse_resourcesr
   )nsZ	stderr_fdZsignalsZsignummoduleindexr   r   r   r   r   setup_tests   sB    



r+   c                     s\   t j z  } W n tk
r(   Y dS X t| d jddddt _ fdd}t| dS )	zSet stdout encoder error handler to backslashreplace (as stderr error
    handler) to avoid UnicodeEncodeError when printing a tracebackNwbackslashreplaceF
)encodingerrorsclosefdnewlinec                      s   t j   t _d S r   )r   r   closer   r   r   r   restore_stdoute   s    
z&replace_stdout.<locals>.restore_stdout)r   r   r   r   openr/   atexitr   )fdr5   r   r4   r   r   Q   s    r   )r7   r   r   r   r   r%   Ztestr   r&   ImportErrorr+   r   r   r   r   r   <module>   s   
C