
    wg                     
   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 ddl	m
Z
 ddlmZ ddlmZ ddlZej                   j#                  d      Z G d d	ej&                        Z G d
 dej*                        Z G d d      Zy)z"Tests for distutils._msvccompiler.    N)_msvccompiler)DistutilsPlatformError)support)get_platformz$not hasattr(_msvccompiler, "winreg")c            	       F   e Zd Zd Zej
                  j                   ej                         j                  d       d      ej
                  j                  dddd e       fg      d	               Zed
        Zeej
                  j                  dd      d               Zy)Testmsvccompilerc                     d }|j                  t        d|       t        j                  t              5  t        j
                  d       d d d        y # 1 sw Y   y xY w)Nc                      y)N)NN )	plat_specs    r/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_msvccompiler.py_find_vcvarsallz:Testmsvccompiler.test_no_compiler.<locals>._find_vcvarsall   s        r   zwont find this version)setattrr   pytestraisesr   _get_vc_env)selfmonkeypatchr   s      r   test_no_compilerz!Testmsvccompiler.test_no_compiler   sO    	 	M+<oN]]12 	%%(	 	 	s   AAwinz-Only run test for non-mingw Windows platforms)reasonzplat_name, expected)	win-arm64r   )	win-amd64r   Nc                     t        j                         }fd}|j                  t         d|       |j                  |       y)zS
        Ensure a specified target platform is passed to _get_vcvars_spec.
        c                     |k(  sJ y Nr   )host_platformplatformexpecteds     r   _get_vcvars_speczPTestmsvccompiler.test_cross_platform_compilation_paths.<locals>._get_vcvars_spec3   s    x'''r   r!   N)r   MSVCCompilerr   
initialize)r   r   	plat_namer    compilerr!   s      `  r   %test_cross_platform_compilation_pathsz6Testmsvccompiler.test_cross_platform_compilation_paths!   s<      !--/	( 	M+=?OPI&r   c                    d}d}t         j                  j                  dd       }|t         j                  |<   	 t        j                  d      }|j                         |v sJ |||j                            k(  sJ 	 t         j                  j                  |       |r|t         j                  d<   y y # t         j                  j                  |       |r|t         j                  d<   w w xY w)Nu   ṰḖṤṪ┅ṼẨṜu	   ₃⁴₅DISTUTILS_USE_SDKx86)osenvironpopr   r   lower)r   test_var
test_valueold_distutils_use_sdkenvs        r   test_get_vc_env_unicodez(Testmsvccompiler.test_get_vc_env_unicode9   s    - 
 !#

/BD I)

8	H++E2C>>#s***X^^%5!6666JJNN8$$2G

./ % JJNN8$$2G

./ %s   AB1 17C(veri  i  c                     t        t        d|       }ddd|   } |       \  }}|st        j                  d| d       ||k\  sJ t        j
                  j                  |      sJ y )N_find_vc      r4   zVS z is not installed)getattrr   r   skipr*   pathisdir)r   r3   lookupexpected_versionversionr;   s         r   test_get_vczTestmsvccompiler.test_get_vcJ   sp    
 (3%(89"$B/4KK#cU"345****ww}}T"""r   )__name__
__module____qualname__r   r   markskipif	sysconfigr   
startswithparametrizer&   needs_winregr2   r@   r   r   r   r   r      s     [["I""$//66>   [[&&<>"	

'	
' H H  [[UL1	# 2 	#r   r   c                   (     e Zd ZdZ fdZd Z xZS )CheckThreadNc                 t    	 t         |           y # t        $ r t        j                         | _        Y y w xY wr   )superrun	Exceptionsysexc_info)r   	__class__s    r   rN   zCheckThread.run[   s-    	+GKM 	+LLNDM	+s    "77c                     | j                    S r   )rQ   )r   s    r   __bool__zCheckThread.__bool__a   s    ==  r   )rA   rB   rC   rQ   rN   rT   __classcell__)rR   s   @r   rK   rK   X   s    H+!r   rK   c                       e Zd Zd Zd Zy)	TestSpawnc                 @   t        j                         }d|_        d}t        j                  d|g}t        d      D cg c]  }t        |j                  |g       }}|D ]  }|j                           |D ]  }|j                           t        |      sJ yc c}w )zK
        Concurrent calls to spawn should have consistent results.
        r    z2import os; assert os.environ["PATH"] == "expected"z-cd   )targetargsN)r   r"   _pathsrP   
executablerangerK   spawnstartjoinall)r   r%   	inner_cmdcommandnthreadsthreads          r   test_concurrent_safezTestSpawn.test_concurrent_safef   s     !--/$H	>>43 INc

CDKx~~WI>
 
  	FLLN	 	FKKM	7||
s   Bc                 8   ddl m} t        j                         }d|_        d }t
        j                  j                  |j                  d|      5  |j                  dg       ddd       t        j                  j                  d      dk7  sJ y# 1 sw Y   .xY w)	zy
        If CCompiler.spawn has been monkey-patched without support
        for an env, it should still execute.
        r   )	ccompilerr    c                 4    t         j                  d   dk(  sJ y)z A spawn without an env argument.PATHr    N)r*   r+   )r   cmds     r   CCompiler_spawnz@TestSpawn.test_concurrent_safe_fallback.<locals>.CCompiler_spawn   s    ::f%333r   r_   zn/aNrl   )	distutilsrj   r   r"   r\   mockpatchobject	CCompilerr_   r*   r+   get)r   rj   r%   rn   s       r   test_concurrent_safe_fallbackz'TestSpawn.test_concurrent_safe_fallbackx   s    
 	( --/$	4 ZZy22G_M 	$NNE7#	$ zz~~f%333	$ 	$s   BBN)rA   rB   rC   rh   ru   r   r   r   rW   rW   e   s    $4r   rW   )__doc__r*   rP   rF   	threadingunittest.mockrp   ro   r   distutils.errorsr   distutils.testsr   distutils.utilr   r   rD   rE   rI   TempdirManagerr   ThreadrK   rW   r   r   r   <module>r~      sl    ( 	 
    # 3 # ' {{!!"HIC#w-- C#L
!)"" 
!$4 $4r   