U
    ‚i2e  ã                   @   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	 G dd„ dƒZ
G dd	„ d	e
ejƒZG d
d„ de
ejejƒZdd„ ZG dd„ dejƒZG dd„ d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ejƒZG dd„ dƒZG dd„ deejƒZG dd„ dejeejƒZedkr8e ¡  dS )é    Né   )Údata01)Úutil)Úimport_modulec                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚResourceTestsc                 C   s"   t  | j¡d }|  | ¡ ¡ d S )Núbinary.file)Ú	resourcesÚfilesÚdataÚ
assertTrueÚis_file©ÚselfÚtarget© r   úK/tmp/pip-unpacked-wheel-bn52x7jx/importlib_resources/tests/test_resource.pyÚtest_is_file_exists   s    z!ResourceTests.test_is_file_existsc                 C   s"   t  | j¡d }|  | ¡ ¡ d S )Nz
not-a-file)r   r	   r
   ÚassertFalser   r   r   r   r   Útest_is_file_missing   s    z"ResourceTests.test_is_file_missingc                 C   s0   t  | j¡d }|  | ¡ ¡ |  | ¡ ¡ d S )NÚsubdirectory)r   r	   r
   r   r   r   Úis_dirr   r   r   r   Útest_is_dir   s    zResourceTests.test_is_dirN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd„ ZdS )ÚResourceDiskTestsc                 C   s
   t | _d S ©N)r   r
   ©r   r   r   r   ÚsetUp   s    zResourceDiskTests.setUpN)r   r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ÚResourceZipTestsN)r   r   r   r   r   r   r   r   !   s   r   c                 C   s   dd„ |   ¡ D ƒS )Nc                 S   s   h | ]
}|j ’qS r   ©Úname©Ú.0Úitemr   r   r   Ú	<setcomp>&   s     znames.<locals>.<setcomp>)Úiterdir)Ztraversabler   r   r   Únames%   s    r'   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚResourceLoaderTestsc                 C   s8   t jttjdddgd}|  tt |¡ƒdddh¡ d S )NÚAÚBÚC©ÚfileÚpathÚcontents)r   Úcreate_packager   Ú__file__ÚassertEqualr'   r   r	   ©r   Úpackager   r   r   Útest_resource_contents*   s      ÿz*ResourceLoaderTests.test_resource_contentsc                 C   s:   t jttjdddddgd}|  t |¡ d¡ ¡ ¡ d S )Nr)   r*   r+   úD/EúD/Fr,   )	r   r0   r   r1   r   r   r	   Újoinpathr   r3   r   r   r   Útest_is_file0   s      ÿz ResourceLoaderTests.test_is_filec                 C   s:   t jttjdddddgd}|  t |¡ d¡ ¡ ¡ d S )Nr)   r*   r+   r6   r7   r,   ÚD)	r   r0   r   r1   r   r   r	   r8   r   r3   r   r   r   r   6   s      ÿzResourceLoaderTests.test_is_dirc                 C   s:   t jttjdddddgd}|  t |¡ d¡ ¡ ¡ d S )Nr)   r*   r+   r6   r7   r,   ÚZ)	r   r0   r   r1   r   r   r	   r8   r   r3   r   r   r   Útest_resource_missing<   s      ÿz)ResourceLoaderTests.test_resource_missingN)r   r   r   r5   r9   r   r<   r   r   r   r   r(   )   s   r(   c                   @   s   e Zd Zdd„ ZdS )ÚResourceCornerCaseTestsc                 C   sX   t jttjdddgd}tƒ |_d|_|j|j_|j|j_|  	t
 |¡ d¡ ¡ ¡ dS )z°
        Test odd ball packages which:
        # 1. Do not have a ResourceReader as a loader
        # 2. Are not on the file system
        # 3. Are not in a zip file
        r)   r*   r+   r,   z/path/which/shall/not/be/namedN)r   r0   r   r1   ÚobjectÚ
__loader__Ú__spec__ÚloaderÚoriginr   r   r	   r8   r   )r   Úmoduler   r   r   Ú#test_package_has_no_reader_fallbackD   s      ÿ

z;ResourceCornerCaseTests.test_package_has_no_reader_fallbackN)r   r   r   rD   r   r   r   r   r=   C   s   r=   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚResourceFromZipsTest01r   c                 C   s&   t dƒ}|  t |¡ d¡ ¡ ¡ d S ©Núdata01.subdirectoryr   )r   r   r   r	   r8   r   ©r   Ú	submoduler   r   r   Útest_is_submodule_resourceZ   s    z1ResourceFromZipsTest01.test_is_submodule_resourcec                 C   s   |   t d¡ d¡ ¡ ¡ d S rF   ©r   r   r	   r8   r   r   r   r   r   Ú$test_read_submodule_resource_by_name^   s    ÿz;ResourceFromZipsTest01.test_read_submodule_resource_by_namec                 C   s&   t dƒ}|  tt |¡ƒddh¡ d S ©NrG   ú__init__.pyr   )r   r2   r'   r   r	   rH   r   r   r   Útest_submodule_contentsc   s
     ÿz.ResourceFromZipsTest01.test_submodule_contentsc                 C   s   |   tt d¡ƒddh¡ d S rM   ©r2   r'   r   r	   r   r   r   r   Útest_submodule_contents_by_namei   s    þz6ResourceFromZipsTest01.test_submodule_contents_by_namec              	   C   sn   t  t  d¡¡F}|jdks t‚| ¡ s,t‚| d¡ ¡ s>t‚tt| 	¡ ƒƒsRt‚W 5 Q R X |j
 ¡ rjt‚d S )Nr   r   )r   Úas_filer	   r!   ÚAssertionErrorr   r8   ÚlenÚlistr&   ÚparentÚexists)r   r
   r   r   r   Útest_as_file_directoryo   s    z-ResourceFromZipsTest01.test_as_file_directoryN)	r   r   r   Ú
ZIP_MODULErJ   rL   rO   rQ   rX   r   r   r   r   rE   W   s   rE   c                   @   s   e Zd ZdZdd„ ZdS )ÚResourceFromZipsTest02Zdata02c                 C   s8   |   tt d¡ƒddh¡ |   tt d¡ƒddh¡ dS )z…
        Test thata zip with two unrelated subpackages return
        distinct resources. Ref python/importlib_resources#44.
        z
data02.onerN   zresource1.txtz
data02.twozresource2.txtNrP   r   r   r   r   Útest_unrelated_contents{   s    þþz.ResourceFromZipsTest02.test_unrelated_contentsN)r   r   r   rY   r[   r   r   r   r   rZ   x   s   rZ   c                   @   sR   e Zd ZdZdd„ Zdd„ Zdd„ Ze d¡d	d
„ ƒZ	dd„ Z
dd„ Zdd„ ZdS )ÚDeletingZipsTestz^Having accessed resources in a zip file should not keep an open
    reference to the zip.
    c                 C   s   dd„ t  d¡ ¡ D ƒ d S )Nc                 S   s   g | ]
}|j ‘qS r   r    r"   r   r   r   Ú
<listcomp>   s     zDDeletingZipsTest.test_iterdir_does_not_keep_open.<locals>.<listcomp>r   )r   r	   r&   r   r   r   r   Útest_iterdir_does_not_keep_open   s    z0DeletingZipsTest.test_iterdir_does_not_keep_openc                 C   s   t  d¡ d¡ ¡  d S ©Nr   r   ©r   r	   r8   r   r   r   r   r   Útest_is_file_does_not_keep_open’   s    z0DeletingZipsTest.test_is_file_does_not_keep_openc                 C   s   t  d¡ d¡ ¡  d S )Nr   znot-presentr`   r   r   r   r   Ú'test_is_file_failure_does_not_keep_open•   s    z8DeletingZipsTest.test_is_file_failure_does_not_keep_openzDesired but not supported.c                 C   s   t  t  d¡d ¡ d S r_   )r   rR   r	   r   r   r   r   Útest_as_file_does_not_keep_open˜   s    z0DeletingZipsTest.test_as_file_does_not_keep_openc                 C   s   t  t  d¡d ¡ ¡  dS )zr
        Mimic what certifi does on import to make its bundle
        available for the process duration.
        r   r   N)r   rR   r	   Ú	__enter__r   r   r   r   Ú$test_entered_path_does_not_keep_openœ   s    z5DeletingZipsTest.test_entered_path_does_not_keep_openc                 C   s   t  d¡ d¡ ¡  d S r_   )r   r	   r8   Ú
read_bytesr   r   r   r   Ú#test_read_binary_does_not_keep_open£   s    z4DeletingZipsTest.test_read_binary_does_not_keep_openc                 C   s   t  d¡ d¡jdd d S )Nr   ú
utf-8.filezutf-8)Úencoding)r   r	   r8   Ú	read_textr   r   r   r   Ú!test_read_text_does_not_keep_open¦   s    z2DeletingZipsTest.test_read_text_does_not_keep_openN)r   r   r   Ú__doc__r^   ra   rb   ÚunittestÚskiprc   re   rg   rk   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 )
ÚResourceFromNamespaceTestsc                 C   s"   |   t tdƒ¡ d¡ ¡ ¡ d S ©NÚnamespacedata01r   )r   r   r	   r   r8   r   r   r   r   r   rJ   «   s
    ÿÿz5ResourceFromNamespaceTests.test_is_submodule_resourcec                 C   s   |   t d¡ d¡ ¡ ¡ d S rp   rK   r   r   r   r   rL   ²   s    ÿz?ResourceFromNamespaceTests.test_read_submodule_resource_by_namec                 C   sL   t t tdƒ¡ƒ}z| d¡ W n tk
r4   Y nX |  |dddh¡ d S ©Nrq   Ú__pycache__r   rh   zutf-16.file)r'   r   r	   r   ÚremoveÚKeyErrorr2   ©r   r/   r   r   r   rO   ·   s    z2ResourceFromNamespaceTests.test_submodule_contentsc                 C   sH   t t d¡ƒ}z| d¡ W n tk
r0   Y nX |  |dddh¡ d S rr   )r'   r   r	   rt   ru   r2   rv   r   r   r   rQ   ¿   s    z:ResourceFromNamespaceTests.test_submodule_contents_by_nameN)r   r   r   rJ   rL   rO   rQ   r   r   r   r   ro   ª   s   ro   c                   @   s4   e Zd Zee e¡jƒZe	dd„ ƒZ
e	dd„ ƒZdS )ÚResourceFromNamespaceDiskTestsc                 C   s   t j | j¡ d S r   )Úsysr.   ÚappendÚsite_dir©Úclsr   r   r   Ú
setUpClassË   s    z)ResourceFromNamespaceDiskTests.setUpClassc                 C   s   t j | j¡ d S r   )rx   r.   rt   rz   r{   r   r   r   ÚtearDownClassÏ   s    z,ResourceFromNamespaceDiskTests.tearDownClassN)r   r   r   ÚstrÚpathlibÚPathr1   rV   rz   Úclassmethodr}   r~   r   r   r   r   rw   È   s
   
rw   c                   @   s   e Zd ZdZdS )ÚResourceFromNamespaceZipTestsrq   N)r   r   r   rY   r   r   r   r   rƒ   Ô   s   rƒ   Ú__main__)rx   rm   Zimportlib_resourcesr   r€   Ú r   r   Ú	importlibr   r   ZTestCaser   ZZipSetupr   r'   r(   r=   ZZipSetupBaserE   rZ   r\   ro   rw   rƒ   r   Úmainr   r   r   r   Ú<module>   s0   ! 
ý
