o
    uvXj¨  ã                   @   sè   d dl Z d dlZd dlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZ zd dlmZ W n ey?   d dlmZ Y nw zd dlmZ W n eyW   d dlmZ Y nw G d	d
„ d
ejejejejƒZG dd„ dejejƒZdS )é    Né   )Úfixturesé   )	ÚDistributionÚPackageNotFoundErrorÚ__version__ÚdistributionÚentry_pointsÚfilesÚmetadataÚrequiresÚversion)ÚIterator)Ústr)Úunicodec                   @   sœ   e Zd Z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e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d$S )%ÚAPITestsz\d+\.\d+(\.\d)?c                 C   ó,   t dƒ}t|tƒsJ ‚t | j|¡sJ ‚d S ©Núegginfo-pkg©r   Ú
isinstanceÚtextÚreÚmatchÚversion_pattern©ÚselfÚpkg_version© r   ú^/var/www/html/myproject/venv/lib/python3.10/site-packages/importlib_metadata/tests/test_api.pyÚtest_retrieves_version_of_self   ó   z'APITests.test_retrieves_version_of_selfc                 C   r   ©Núdistinfo-pkgr   r   r   r   r   Ú&test_retrieves_version_of_distinfo_pkg#   r!   z/APITests.test_retrieves_version_of_distinfo_pkgc                 C   s8   |   t¡� tdƒ W d   ƒ d S 1 sw   Y  d S )Nzdoes-not-exist)ÚassertRaisesr   r   ©r   r   r   r   Útest_for_name_does_not_exist(   s   
"ÿz%APITests.test_for_name_does_not_existc                 C   s   |   tdƒ d¡ ¡ d¡ d S )Nr   útop_level.txtÚmod)ÚassertEqualr   Ú	read_textÚstripr&   r   r   r   Útest_for_top_level,   s   þzAPITests.test_for_top_levelc                 C   s*   dd„ t dƒD ƒd }|  | ¡ d¡ d S )Nc                 S   ó   g | ]	}|j d kr|‘qS )r(   ©Úname)Ú.0Úpathr   r   r   Ú
<listcomp>2   ó
    
ÿz+APITests.test_read_text.<locals>.<listcomp>r   r   zmod
)r
   r*   r+   )r   Ú	top_levelr   r   r   Útest_read_text1   s   ÿýzAPITests.test_read_textc                 C   s6   t tƒ d ƒ}|d }|  |jd¡ |  |jg ¡ d S )NÚentriesÚmainzmod:main)Údictr	   r*   ÚvalueÚextras)r   r7   Úepr   r   r   Útest_entry_points8   s   zAPITests.test_entry_pointsc                 C   sR   t dƒ}|d dksJ ‚|d dksJ ‚|d dksJ ‚| d¡}d|v s'J ‚d S )	Nr   Úauthorz	Steven MaÚLICENSEÚUnknownÚNameÚ
Classifierz*Topic :: Software Development :: Libraries)r   Úget_all)r   ÚmdÚclassifiersr   r   r   Útest_metadata_for_this_package>   s   
z'APITests.test_metadata_for_this_packagec                 C   s   t  | jt¡s	J ‚d S )N)r   r   r   r   r&   r   r   r   Útest_importlib_metadata_versionF   s   z(APITests.test_importlib_metadata_versionc                 C   s˜   | d j }| D ]B}|j |ksJ ‚|jr|jjsJ ‚|jr$|jjdks$J ‚|jr.|jdks.J ‚| ¡  ¡ s6J ‚t| ¡ t	ƒs?J ‚|j
 d¡rI| ¡  qd S )Nr   Úsha256z.py)ÚrootÚhashr:   ÚmodeÚsizeÚlocateÚexistsr   Úread_binaryÚbytesr0   Úendswithr+   )r
   rI   Úfiler   r   r   Ú_test_filesI   s   
€øzAPITests._test_filesc                 C   sN   z| j }W n ty   | j}Y nw dd„ tdƒD ƒd }|t|jƒdƒ d S )Nc                 S   r.   )zmod.pyr/   )r1   Úpr   r   r   r3   ]   r4   z0APITests.test_file_hash_repr.<locals>.<listcomp>r#   r   z!<FileHash mode: sha256 value: .*>)ÚassertRegexÚAttributeErrorÚassertRegexpMatchesr
   ÚreprrJ   )r   rU   Úutilr   r   r   Útest_file_hash_reprV   s   

þÿýþzAPITests.test_file_hash_reprc                 C   ó   |   tdƒ¡ d S r"   ©rS   r
   r&   r   r   r   Útest_files_dist_infoe   ó   zAPITests.test_files_dist_infoc                 C   r[   r   r\   r&   r   r   r   Útest_files_egg_infoh   r^   zAPITests.test_files_egg_infoc                 C   s   |   tdƒd¡ d S )Núegginfo-filez0.1)r*   r   r&   r   r   r   Útest_version_egg_info_filek   s   z#APITests.test_version_egg_info_filec                 C   s   t dƒ}|  |¡ d S )Nr`   )r   ÚassertIsNone)r   Úrequirementsr   r   r   Útest_requires_egg_info_filen   s   z$APITests.test_requires_egg_info_filec                 C   s2   t dƒ}t|ƒdksJ ‚tdd„ |D ƒƒsJ ‚d S )Nr   r   c                 s   s   � | ]}|d kV  qdS )z%wheel >= 1.0; python_version >= "2.7"Nr   )r1   Údepr   r   r   Ú	<genexpr>u   s
   € ÿ
ÿz2APITests.test_requires_egg_info.<locals>.<genexpr>)r   ÚlenÚany©r   Údepsr   r   r   Útest_requires_egg_infor   s
   þzAPITests.test_requires_egg_infoc                 C   s@   t dƒ}t|ƒdksJ ‚t|ƒsJ ‚d|v sJ ‚d|v sJ ‚d S )Nr#   r   zwheel >= 1.0zpytest; extra == 'test')r   rg   Úallri   r   r   r   Útest_requires_dist_infoz   s
   z APITests.test_requires_dist_infoc                 C   s0   t  d¡}tt |¡ƒ}g d¢}||ksJ ‚d S )NzÈ
            dep1
            dep2

            [:python_version < "3"]
            dep3

            [extra1]
            dep4

            [extra2:python_version < "3"]
            dep5
            )Údep1Údep2zdep3; python_version < "3"zdep4; extra == "extra1"z2dep5; (python_version < "3") and extra == "extra2")ÚtextwrapÚdedentÚsortedr   Ú_deps_from_requires_text)r   r   rj   Úexpectedr   r   r   Ú$test_more_complex_deps_requires_text�   s   
z-APITests.test_more_complex_deps_requires_textN)Ú__name__Ú
__module__Ú__qualname__r   r    r$   r'   r-   r6   r=   rF   rG   ÚstaticmethodrS   rZ   r]   r_   ra   rd   rk   rm   ru   r   r   r   r   r      s(    
r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚOffSysPathTestsc                 C   s.   t jt| jƒgd�}tdd„ |D ƒƒsJ ‚d S )N)r2   c                 s   s   � | ]
}|j d  dkV  qdS )rA   r#   N)r   )r1   Údistr   r   r   rf   ¡   s
   € ÿ
ÿzIOffSysPathTests.test_find_distributions_specified_path.<locals>.<genexpr>)r   Údiscoverr   Úsite_dirrh   )r   Údistsr   r   r   Ú&test_find_distributions_specified_pathŸ   s   þz6OffSysPathTests.test_find_distributions_specified_pathc                 C   s&   | j d }t |¡}|jdksJ ‚dS )zBDemonstrate how to load metadata direct from a directory.
        údistinfo_pkg-1.0.0.dist-infoú1.0.0N)r}   r   Úatr   ©r   Údist_info_pathr{   r   r   r   Útest_distribution_at_pathlib¦   s   

z,OffSysPathTests.test_distribution_at_pathlibc                 C   s*   | j d }t t|ƒ¡}|jdksJ ‚d S )Nr€   r�   )r}   r   r‚   r   r   rƒ   r   r   r   Útest_distribution_at_str­   s   
z(OffSysPathTests.test_distribution_at_strN)rv   rw   rx   r   r…   r†   r   r   r   r   rz   ž   s    rz   )r   rp   ÚunittestÚ r   r   r   r   r   r	   r
   r   r   r   Úcollections.abcr   ÚImportErrorÚcollectionsÚbuiltinsr   r   Ú__builtin__r   Ú
EggInfoPkgÚDistInfoPkgÚEggInfoFileÚTestCaser   ÚDistInfoPkgOffPathrz   r   r   r   r   Ú<module>   s.    ,ÿÿ
ü 	