o
    g                     @   sZ  d dl mZ ed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 ddlmZ ddlmZ d dlmZ ejd	d
gd ddlmZmZmZmZmZmZmZmZmZ dd Zdd ZedddZeej !d
dG dd dZ"ej#e"ed\Z$Z%eej !d
dG dd dZ&ej#e&ed\Z'Z(eej !d
dG dd dej)Z*dS )   )utilzimportlib.machinery    N)support)import_helper)contextmanager)temp_modulewinregwin)Zrequired_on)		CreateKeyHKEY_CURRENT_USERSetValueREG_SZKEY_ALL_ACCESSEnumKeyCloseKey	DeleteKeyOpenKeyc                  C   sn   dddd} dt jv rt jd | v r| t jd  S dtj v r"dS dtj v r+dS dtj v r4d	S tjS )
Nwin32z	win-amd64z	win-arm32)Zx86Zx64ZarmZVSCMD_ARG_TGT_ARCHZamd64z(arm)z(arm64)z	win-arm64)osenvironsysversionlowerplatform)ZTARGET_TO_PLAT r   V/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_importlib/test_windows.pyget_platform   s   
r   c                 C   sn   z	t | |td}W n
 ty   Y d S w 	 zt|d}W n	 ty%   Y q,w t|| qt| t| | d S )N)accessTr   )r   r   OSErrorr   delete_registry_treer   r   )rootsubkeyhkeyZ	subsubkeyr   r   r   r   (   s   
r   c              	   c   s    | j jr
| j j}n| j j}|j|dtjd d  d}z>t|d}tt	|}|d u r0|d }t
|dt| d V  W d    n1 sDw   Y  W | j jrTtj|}tt	| d S | j jretj|}tt	| w )Nz%d.%d   )fullnamesys_versionza = 1z.py )WindowsRegistryFinderDEBUG_BUILDREGISTRY_KEY_DEBUGREGISTRY_KEYformatr   version_infor   r
   r   r   r   r   pathdirnamer   )	machinerynamer-   r    keylocationr!   r   r   r   setup_module8   s,   

r3   zrequires Windowsc                   @   s:   e Zd Zde Zdd Zdd Zdd Z	dd	 Z
d
S )WindowsRegistryFinderTestsz	spamham{}c                 C   s   | j jd}| |d  d S )Nspam)r/   r'   	find_specassertIs)selfspecr   r   r   test_find_spec_missingS   s   z1WindowsRegistryFinderTests.test_find_spec_missingc                 C   sR   t   t dt | jjd}W d    n1 sw   Y  | |d  d S )Nignorer5   )warningscatch_warningssimplefilterDeprecationWarningr/   r'   find_moduler7   )r8   loaderr   r   r   test_find_module_missingW   s
   
z3WindowsRegistryFinderTests.test_find_module_missingc              	   C   s   t | j| j? t  tdt | jj| j}W d    n1 s%w   Y  | jj	| j}| 
|d  | 
|d  W d    d S 1 sIw   Y  d S )Nr;   )r3   r/   test_moduler<   r=   r>   r?   r'   r@   r6   ZassertIsNotr8   rA   r9   r   r   r   test_module_found]   s   
"z,WindowsRegistryFinderTests.test_module_foundc              	   C   s   t | j| jdd= t  tdt | jj| j}W d    n1 s'w   Y  | jj	| j}| 
| | 
| W d    d S 1 sIw   Y  d S )N.)r-   r;   )r3   r/   rC   r<   r=   r>   r?   r'   r@   r6   ZassertIsNonerD   r   r   r   test_module_not_foundf   s   

"z0WindowsRegistryFinderTests.test_module_not_foundN)__name__
__module____qualname__r+   r   getpidrC   r:   rB   rE   rG   r   r   r   r   r4   M   s    	r4   )r/   c                   @   s   e Zd Zdd ZdS )WindowsExtensionSuffixTestsc                 C   s|   | j j}dtjtddt }z|d}W n t	y*   |d}d| }Y nw | 
|| ||}| || d S )Nz.cp{0.major}{0.minor}-{1}.pydz[^a-zA-Z0-9]_z.pydz_d.pydZ_d)r/   EXTENSION_SUFFIXESr+   r   r,   resubr   index
ValueErrorZassertInZ
assertLess)r8   suffixesZexpected_tagZ
untagged_iZtagged_ir   r   r   test_tagged_suffixu   s   

z.WindowsExtensionSuffixTests.test_tagged_suffixN)rH   rI   rJ   rT   r   r   r   r   rL   s   s    rL   c                   @   s   e Zd Zdd Zdd ZdS )WindowsBootstrapPathTestsc                 G   s8   ddl m} || }| | krd S | || d S )Nr   )
_path_join)Zimportlib._bootstrap_externalrV   casefoldZassertEqual)r8   ZexpectedZinputsrV   actualr   r   r   
check_join   s
   z$WindowsBootstrapPathTests.check_joinc              	   C   s  |  dddd |  dddddd |  dddd |  ddd |  dd |  d	d
d |  d	dd
d |  d	dd	 |  dddd |  ddd |  ddd |  dddd |  ddd |  dddd |  ddddd |  dddddd |  ddddddd |  dddddd |  dd |  dd |  dd d! |  dd"d! |  d#d#d! |  d$d%d! |  d$d&d! d S )'NzC:\A\BzC:\ABzD:\DzC:BzA\BzD:AzD:zC:\B\CzA\B\CCzB\CzA\B/CzB/CzA/zB\zA\../Cz../CzA.\.\BzA.rF   z\\Server\Share\A\B\Cz\\Server\Sharez\Az\\Server2\Share2z\\Serverz\Sharez\\Server\Share\\zC:\AzC:/Ar&   zC:/zC:z//Server/Share\z//Server/Share/z//Server/Share)rY   )r8   r   r   r   test_path_join   s6   
z(WindowsBootstrapPathTests.test_path_joinN)rH   rI   rJ   rY   r^   r   r   r   r   rU      s    rU   )N)+r&   r   Z	test_utilZimport_importlibr/   r   rO   r   Zunittestr<   testr   Ztest.supportr   
contextlibr   r   import_moduler   r
   r   r   r   r   r   r   r   r   r   r   r3   Z
skipUnlessr   
startswithr4   Z	test_bothZ!Frozen_WindowsRegistryFinderTestsZ!Source_WindowsRegistryFinderTestsrL   Z"Frozen_WindowsExtensionSuffixTestsZ"Source_WindowsExtensionSuffixTestsZTestCaserU   r   r   r   r   <module>   s:    
,#