o
    g#                     @   s  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Zzd dlm	Z
 W n ey3   ddlm	Z
 Y nw ddlmZ d dlmZmZmZmZmZmZmZ G dd dejejZG dd	 d	ejejZG d
d dejejejZG dd dejejejZG dd dejejejZG dd dejejejZ G dd dejejZ!G dd deje
jZ"G dd dejZ#G dd dejejej$ejZ%dS )    N   )fake_filesystem_unittest)fixtures)Distribution
EntryPointPackageNotFoundErrordistributionsentry_pointsmetadataversionc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )
BasicTestsz\d+\.\d+(\.\d)?c                 C   s2   t d}t|jtsJ t| j|jsJ d S )Ndistinfo-pkg)r   	from_name
isinstancer   strrematchversion_pattern)selfdist r   S/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_importlib/test_main.pytest_retrieves_version_of_self   s   
z)BasicTests.test_retrieves_version_of_selfc                 C   :   |  t td W d    d S 1 sw   Y  d S )Ndoes-not-exist)assertRaisesr   r   r   r   r   r   r   test_for_name_does_not_exist"   s   "z'BasicTests.test_for_name_does_not_existc                 C   sJ   |  t}td W d    n1 sw   Y  dt|jv s#J d S )Nr   r
   )r   r   r   r   r   	exception)r   ctxr   r   r   (test_package_not_found_mentions_metadata&   s   z3BasicTests.test_package_not_found_mentions_metadatac                 C   s   |  tt d S N)ZassertIsInstancer   typer   r   r   r   test_new_style_classes0   s   z!BasicTests.test_new_style_classesN)__name__
__module____qualname__r   r   r   r    r#   r   r   r   r   r      s    
r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ImportTestsc                 C   r   )NZdoes_not_exist)r   ImportError	importlibimport_moduler   r   r   r   test_import_nonexistent_module5   s   "z*ImportTests.test_import_nonexistent_modulec                 C   s$   t ddd }| | jd d S )Nentriesgroupmain)r	   assertEqualloadr$   r   epr   r   r   test_resolve;   s   zImportTests.test_resolvec                 C   s    t ddd }| |jd d S )Nr,   r-   zns:subzmod:main)r	   r0   valuer2   r   r   r   "test_entrypoint_with_colon_in_name?   s   z.ImportTests.test_entrypoint_with_colon_in_namec                 C   s$   t dddd}| tju sJ d S )Nr3   zimportlib.metadatagrp)namer5   r.   )r   r1   r)   r
   r2   r   r   r   test_resolve_without_attrC   s   z%ImportTests.test_resolve_without_attrN)r$   r%   r&   r+   r4   r6   r9   r   r   r   r   r'   4   s
    r'   c                   @   s4   e Zd Zedd Zdd Zedd Zdd Zd	S )
NameNormalizationTestsc                 C   V   | d }|   |d }|jddd}|d W d   dS 1 s$w   Y  dS )	z
        Create minimal metadata for a package with dashes
        in the name (and thus underscores in the filename).
        zmy_pkg.dist-infoMETADATAwutf-8encodingVersion: 1.0
Nzmy-pkgmkdiropenwritesite_dirmetadata_dirr
   Zstrmr   r   r   pkg_with_dashesM      
z&NameNormalizationTests.pkg_with_dashesc                 C   s    |  | j}t|dksJ d S Nz1.0)rI   rG   r   r   pkg_namer   r   r   -test_dashes_in_dist_name_found_as_underscoresZ   s   zDNameNormalizationTests.test_dashes_in_dist_name_found_as_underscoresc                 C   r;   )	z\
        Create minimal metadata for a package with mixed case
        in the name.
        zCherryPy.dist-infor<   r=   r>   r?   rA   NZCherryPyrB   rF   r   r   r   pkg_with_mixed_case`   rJ   z*NameNormalizationTests.pkg_with_mixed_casec                 C   sH   |  | j}t|dksJ t| dksJ t| dks"J d S rK   )rO   rG   r   lowerupperrL   r   r   r    test_dist_name_found_as_any_casem   s   z7NameNormalizationTests.test_dist_name_found_as_any_caseN)r$   r%   r&   staticmethodrI   rN   rO   rR   r   r   r   r   r:   L   s    

r:   c                   @   s4   e Zd Zedd Zedd Zdd Zdd Zd	S )
NonASCIITestsc                 C   r;   )	zb
        Create minimal metadata for a package with non-ASCII in
        the description.
        portend.dist-infor<   r=   r>   r?   u   Description: pôrˈtendNportendrB   rG   rH   r
   fpr   r   r   pkg_with_non_ascii_descriptionv   rJ   z,NonASCIITests.pkg_with_non_ascii_descriptionc                 C   s`   | d }|   |d }|jddd}|td  W d   dS 1 s)w   Y  dS )	zl
        Create minimal metadata for an egg-info package with
        non-ASCII in the description.
        rU   r<   r=   r>   r?   uK   
                Name: portend

                pôrˈtend
                NrV   )rC   rD   rE   textwrapdedentstriprW   r   r   r   'pkg_with_non_ascii_description_egg_info   s   


z5NonASCIITests.pkg_with_non_ascii_description_egg_infoc                 C   (   |  | j}t|}|d dksJ d S NZDescriptionu
   pôrˈtend)rY   rG   r
   r   rM   metar   r   r   test_metadata_loads      z!NonASCIITests.test_metadata_loadsc                 C   r^   r_   )r]   rG   r
   r`   r   r   r   test_metadata_loads_egg_info   rc   z*NonASCIITests.test_metadata_loads_egg_infoN)r$   r%   r&   rS   rY   r]   rb   rd   r   r   r   r   rT   u   s    

rT   c                   @      e Zd Zdd Zdd ZdS )DiscoveryTestsc                 C   sP   t t }tdd |D sJ tdd |D sJ tdd |D s&J d S )Nc                 s   s    | ]}t |tV  qd S r!   )r   r   .0r   r   r   r   	<genexpr>   s    z8DiscoveryTests.test_package_discovery.<locals>.<genexpr>c                 s       | ]
}|j d  dkV  qdS )Namezegginfo-pkgNr
   rg   r   r   r   ri          c                 s   rj   )rk   r   Nrl   rg   r   r   r   ri      rm   )listr   allany)r   Zdistsr   r   r   test_package_discovery   s   
z%DiscoveryTests.test_package_discoveryc                 C   s@   |  t ttddd W d    d S 1 sw   Y  d S )NZ	somethingelse)contextr8   )r   
ValueErrorrn   r   r   r   r   r   test_invalid_usage   s   "z!DiscoveryTests.test_invalid_usageN)r$   r%   r&   rq   ru   r   r   r   r   rf      s    rf   c                   @   re   )DirectoryTestc                 C   sH   | j d  | t td W d    d S 1 sw   Y  d S )NzEGG-INFOzunknown-package)rG   joinpathrC   r   r   r   r   r   r   r   test_egg_info   s   
"zDirectoryTest.test_egg_infoc              	   C   s   | j d}|  | |* | t td W d    n1 s$w   Y  W d    d S W d    d S 1 s<w   Y  d S )Nzfoo-3.6.eggZfoo)rG   rw   rC   Zadd_sys_pathr   r   r   )r   Zeggr   r   r   test_egg   s   
"zDirectoryTest.test_eggN)r$   r%   r&   rx   ry   r   r   r   r   rv      s    rv   c                   @   s   e Zd ZdZdd ZdS )MissingSysPathz/does-not-existc                 C   s   t j  dS zp
        Discovering distributions should succeed even if
        there is an invalid path on sys.path.
        N)r)   r
   r   r   r   r   r   test_discovery   s   zMissingSysPath.test_discoveryN)r$   r%   r&   rG   r|   r   r   r   r   rz      s    rz   c                       s(   e Zd ZdZ fddZdd Z  ZS )InaccessibleSysPathz/access-deniedc                    s,   t t|   |   | jj| jdd d S )Nr   )Z	perm_bits)superr}   setUpZsetUpPyfakefsfsZ
create_dirrG   r   	__class__r   r   r      s   zInaccessibleSysPath.setUpc                 C   s   t tj  dS r{   )rn   r)   r
   r   r   r   r   r   r|      s   z"InaccessibleSysPath.test_discovery)r$   r%   r&   rG   r   r|   __classcell__r   r   r   r   r}      s    r}   c                       s\   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )TestEntryPointsc                    s&   t t| j|  tjddd| _d S )Nr8   r5   r.   )r~   r   __init__r)   r
   r   r3   )r   argsr   r   r   r      s   zTestEntryPoints.__init__c                 C   s$   t t | j}|| jksJ d S r!   )pickleloadsdumpsr3   )r   Zrevivedr   r   r   test_entry_point_pickleable   s   z+TestEntryPoints.test_entry_point_pickleablec                 C   s8   |  t d| j_W d   dS 1 sw   Y  dS )zEntryPoints should be immutableZbadactorN)r   AttributeErrorr3   r8   r   r   r   r   test_immutable   s   
"zTestEntryPoints.test_immutablec                 C   s:   dt | jv s	J dt | jv sJ dt | jv sJ d S )Nr   zname=z'name')reprr3   r   r   r   r   	test_repr   s   zTestEntryPoints.test_reprc                 C   s   t | j d S r!   )hashr3   r   r   r   r   test_hashable   s   zTestEntryPoints.test_hashablec              	   C   sx   |  t- tjdd t| j W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )NT)record)r   	Exceptionwarningscatch_warningsjsonr   r3   r   r   r   r   test_json_dump   s   "zTestEntryPoints.test_json_dumpc                 C   s   | j jdksJ d S )Nr5   )r3   moduler   r   r   r   test_module      zTestEntryPoints.test_modulec                 C   s   | j jd u sJ d S r!   )r3   attrr   r   r   r   	test_attr   r   zTestEntryPoints.test_attrc                 C   s    t tdddtdddg d S )Nbvalr.   a)sortedr   r   r   r   r   test_sortable   s
   

zTestEntryPoints.test_sortable)r$   r%   r&   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd ZdS )
FileSystemc                 C   s&   t j|  i i| jd tt  d S )N)prefix)r   Zbuild_filesZunicode_filenamerG   rn   r   r   r   r   r   test_unicode_dir_on_sys_path
  s
   
z'FileSystem.test_unicode_dir_on_sys_pathN)r$   r%   r&   r   r   r   r   r   r     s    r   )&r   r   r   rZ   Zunittestr   importlib.metadatar)   Z!pyfakefs.fake_filesystem_unittestr   Zffsr(   Zstubs r   r   r   r   r   r	   r
   r   ZDistInfoPkgZTestCaser   r'   Z	OnSysPathZSiteDirr:   rT   Z
EggInfoPkgrf   rv   rz   r}   r   ZFileBuilderr   r   r   r   r   <module>   s4    $).
-