o
    !g7                     @   s   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 d dlm	Z	 d dl
mZ d dlZddlmZ ejdZG dd	 d	e	jZG d
d dejZG dd dZdS )    N)DistutilsPlatformError)support)get_platform   )msvcznot hasattr(msvc, "winreg")c                   @   sx   e Zd Zdd Zejje 	d ddej
dddd	e fgd
d Zedd Zeej
dddd Zd	S )Testmsvccompilerc                 C   sP   dd }| td| tt td W d    d S 1 s!w   Y  d S )Nc                 S   s   dS )N)NN )	plat_specr   r   p/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py_find_vcvarsall   s   z:Testmsvccompiler.test_no_compiler.<locals>._find_vcvarsallr   zwont find this version)setattrr   pytestraisesr   _get_vc_env)selfmonkeypatchr   r   r   r
   test_no_compiler   s   "z!Testmsvccompiler.test_no_compilerwinz-Only run test for non-mingw Windows platforms)reasonzplat_name, expected)	win-arm64r   )	win-amd64r   Nc                    s0   t  } fdd}|t d| || dS )zS
        Ensure a specified target platform is passed to _get_vcvars_spec.
        c                    s   | ksJ d S Nr   )host_platformplatformexpectedr   r
   _get_vcvars_spec2   s   zPTestmsvccompiler.test_cross_platform_compilation_paths.<locals>._get_vcvars_specr   N)r   Compilerr   
initialize)r   r   	plat_namer   compilerr   r   r   r
   %test_cross_platform_compilation_paths    s   z6Testmsvccompiler.test_cross_platform_compilation_pathsc              	   C   s   d}d}t jdd }|t j|< z)td}| |v sJ |||  ks(J W t j| |r8|t jd< d S d S t j| |rG|t jd< w )Nu   ṰḖṤṪ┅ṼẨṜu	   ₃⁴₅DISTUTILS_USE_SDKx86)osenvironpopr   r   lower)r   test_var
test_valueold_distutils_use_sdkenvr   r   r
   test_get_vc_env_unicode8   s   

z(Testmsvccompiler.test_get_vc_env_unicodeveri  i  c                 C   s^   t td| }ddd| }| \}}|std| d ||ks%J tj|s-J d S )N_find_vc      r.   zVS z is not installed)getattrr   r   skipr$   pathisdir)r   r-   lookupexpected_versionversionr4   r   r   r
   test_get_vcI   s   
zTestmsvccompiler.test_get_vc)__name__
__module____qualname__r   r   markskipif	sysconfigr   
startswithparametrizer!   needs_winregr,   r9   r   r   r   r
   r      s&    
r   c                       s(   e Zd ZdZ fddZdd Z  ZS )CheckThreadNc                    s0   zt    W d S  ty   t | _Y d S w r   )superrun	Exceptionsysexc_infor   	__class__r   r
   rE   Z   s
   zCheckThread.runc                 C   s   | j  S r   )rH   rI   r   r   r
   __bool__`   s   zCheckThread.__bool__)r:   r;   r<   rH   rE   rL   __classcell__r   r   rJ   r
   rC   W   s    rC   c                   @   s   e Zd Zdd Zdd ZdS )	TestSpawnc                    sj   t  d_d}tjd|g  fddtdD }|D ]}|  q|D ]}|  q&t|s3J dS )zK
        Concurrent calls to spawn should have consistent results.
        r   z2import os; assert os.environ["PATH"] == "expected"z-cc                    s   g | ]
}t j gd qS ))targetargs)rC   spawn).0ncommandr    r   r
   
<listcomp>n   s    z2TestSpawn.test_concurrent_safe.<locals>.<listcomp>d   N)	r   r   _pathsrG   
executablerangestartjoinall)r   	inner_cmdthreadsthreadr   rT   r
   test_concurrent_safee   s   

zTestSpawn.test_concurrent_safec                 C   sx   ddl m} t }d|_dd }tj|jd| |	dg W d   n1 s+w   Y  t
jd	dks:J dS )
zy
        If CCompiler.spawn has been monkey-patched without support
        for an env, it should still execute.
        r   )	ccompilerr   c                 S   s   t jd dks	J dS )z A spawn without an env argument.PATHr   N)r$   r%   )r   cmdr   r   r
   CCompiler_spawn   s   z@TestSpawn.test_concurrent_safe_fallback.<locals>.CCompiler_spawnrQ   zn/aNrc   )	distutilsrb   r   r   rX   mockpatchobject	CCompilerrQ   r$   r%   get)r   rb   r    re   r   r   r
   test_concurrent_safe_fallbackw   s   z'TestSpawn.test_concurrent_safe_fallbackN)r:   r;   r<   ra   rl   r   r   r   r
   rN   d   s    rN   )r$   rG   r?   	threadingunittest.mockrg   distutils.errorsr   distutils.testsr   distutils.utilr   r    r   r=   r>   rB   TempdirManagerr   ThreadrC   rN   r   r   r   r
   <module>   s    F