U
    ^»{j±  ã                   @   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ddl mZ ddlm	Z	m
Z
 ddlmZ ddlmZ d dlmZ G d	d
„ d
eƒZd2dd„Zd3dd„ZG dd„ de jd�Zedeedƒƒd d¡d d¡deeddƒƒdœdœddddœddd œd!d"d#iid$œeedƒƒd d¡d d¡d%eed&d'ƒƒid(œd)�ZG d*d+„ d+ƒZG d,d-„ d-eƒZG d.d/„ d/eƒZG d0d1„ d1eeƒZdS )4é    Né   )ÚResourceReaderé   )Úimport_helperÚ	os_helper)Úzip)Ú_path)Ú
ModuleSpecc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚReaderc                 K   s   t | ƒ |¡ d S ©N)ÚvarsÚupdate)ÚselfÚkwargs© r   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/importlib_resources/tests/util.pyÚ__init__   s    zReader.__init__c                 C   s   | S r   r   ©r   Úpackager   r   r   Úget_resource_reader   s    zReader.get_resource_readerc                 C   s   || _ t| jtƒr| j‚| jS r   )r   Ú
isinstanceÚfileÚ	Exception©r   Úpathr   r   r   Úopen_resource   s    zReader.open_resourcec                 C   s   || _ t| jtƒr| j‚| jS r   )r   r   r   r   )r   Úpath_r   r   r   Úresource_path   s    zReader.resource_pathc                    s>   ˆ | _ t| jtƒr| j‚dd„ }t‡ fdd„t|| jƒD ƒƒS )Nc                 S   s
   |   d¡S )Nú/)Úsplit)Úentryr   r   r   Úpart*   s    z Reader.is_resource.<locals>.partc                 3   s&   | ]}t |ƒd ko|d ˆ kV  qdS )r   r   N)Úlen)Ú.0Úparts©r   r   r   Ú	<genexpr>-   s    z%Reader.is_resource.<locals>.<genexpr>)r   r   r   r   ÚanyÚmapÚ	_contents)r   r   r!   r   r%   r   Úis_resource%   s    
ÿzReader.is_resourcec                 c   s"   t | jtƒr| j‚| jE d H  d S r   )r   r   r   r)   ©r   r   r   r   Úcontents1   s    zReader.contentsN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r*   r,   r   r   r   r   r
      s   r
   Tc                 C   s.   d}t  |¡}t|| d|d�}||_| |_|S )NZtestingpackagezdoes-not-exist)ÚoriginÚ
is_package)ÚtypesÚ
ModuleTyper	   Ú__spec__Ú
__loader__)Úloaderr1   ÚnameÚmoduleÚspecr   r   r   Úcreate_package_from_loader7   s    
r:   r   c                 C   s   t t| ||d�|ƒS )N)r   r   r)   )r:   r
   )r   r   r1   r,   r   r   r   Úcreate_package@   s    þr;   c                   @   s^   e Zd ZdZej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 )ÚCommonTestsBasez>
    Tests shared by test_open, test_path, and test_read.
    c                 C   s   dS )zl
        Call the pertinent legacy API function (e.g. open_text, path)
        on package and path.
        Nr   )r   r   r   r   r   r   ÚexecuteL   s    zCommonTestsBase.executec                 C   s   |   | jjd¡ dS )z=
        Passing in the package name should succeed.
        ú
utf-8.fileN)r=   Údatar-   r+   r   r   r   Útest_package_nameS   s    z!CommonTestsBase.test_package_namec                 C   s   |   | jd¡ dS )z?
        Passing in the package itself should succeed.
        r>   N©r=   r?   r+   r   r   r   Útest_package_objectY   s    z#CommonTestsBase.test_package_objectc                 C   s   d}|   | j|¡ dS )zB
        Passing in a string for the path should succeed.
        r>   NrA   r   r   r   r   Útest_string_path_   s    z CommonTestsBase.test_string_pathc                 C   s   t  d¡}|  | j|¡ dS )zS
        Passing in a pathlib.PurePath object for the path should succeed.
        r>   N)ÚpathlibÚPurePathr=   r?   r   r   r   r   Útest_pathlib_pathf   s    
z!CommonTestsBase.test_pathlib_pathc                 C   s    t j| jj= |  | jjd¡ dS )z=
        The anchor package can already be imported.
        r>   N)ÚsysÚmodulesr?   r-   r=   r+   r   r   r   Ú$test_importing_module_as_side_effectm   s    z4CommonTestsBase.test_importing_module_as_side_effectc                 C   s8   t  d¡}t|tƒ d�}|  |d¡ |  |jjd¡ dS )z©
        Attempting to open or read or request the path for a
        non-existent path should succeed if open_resource
        can return a viable data stream.
        ó   Hello, world!©r   r   r>   N)ÚioÚBytesIOr;   ÚFileNotFoundErrorr=   ÚassertEqualr5   r   )r   Ú
bytes_datar   r   r   r   Útest_missing_patht   s    
z!CommonTestsBase.test_missing_pathc                 C   s:   t  d¡}t}t||d�}|  |d¡ |  |jjd¡ d S )NrJ   rK   r>   )rL   rM   Ú__file__r;   r=   rO   r5   r   )r   rP   r   r   r   r   r   Útest_extant_path   s
    
z CommonTestsBase.test_extant_pathc              	   C   s6   t tƒ tƒ d�}|  t¡� |  |d¡ W 5 Q R X d S )NrK   r>   )r;   rN   ZassertRaisesr=   r   r   r   r   Útest_useless_loaderŠ   s    z#CommonTestsBase.test_useless_loaderN)r-   r.   r/   Ú__doc__ÚabcÚabstractmethodr=   r@   rB   rC   rF   rI   rQ   rS   rT   r   r   r   r   r<   G   s   
r<   )Ú	metaclassÚ é   zHello, UTF-16 world!
zutf-16zHello, UTF-8 world!
zutf-8é   )ú__init__.pyúbinary.file)r\   r]   úutf-16.filer>   Úsubdirectoryzone resource)r\   zresource1.txtztwo resource)r\   zresource2.txtZ	subsubdirzresource.txtz
a resource)r\   ÚoneÚtwor_   r]   é   é   )r]   r^   r>   r_   )Údata01Zdata02Znamespacedata01c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚModuleSetupc                 C   s:   t  ¡ | _|  | jj¡ | j t ¡ ¡ |  | j	¡| _
d S r   )Ú
contextlibÚ	ExitStackÚfixturesZ
addCleanupÚcloseÚenter_contextr   Zisolated_modulesÚload_fixtureÚMODULEr?   r+   r   r   r   ÚsetUp­   s    
zModuleSetup.setUpc                 C   s   |   |t| i¡ t |¡S r   )Útree_on_pathrh   Ú	importlibÚimport_module)r   r8   r   r   r   rk   ´   s    zModuleSetup.load_fixtureN)r-   r.   r/   rm   rk   r   r   r   r   re   ¬   s   re   c                   @   s   e Zd ZdZdd„ ZdS )ÚZipSetuprd   c              	   C   s@   | j  t ¡ ¡}t |¡d }| j  t tt	 
||¡ƒ¡¡ d S )Nzzipped modules.zip)rh   rj   r   Útemp_dirrD   ÚPathr   ÚDirsOnSysPathÚstrÚzip_Zmake_zip_file)r   r9   rr   rH   r   r   r   rn   ¼   s
    ÿzZipSetup.tree_on_pathN©r-   r.   r/   rl   rn   r   r   r   r   rq   ¹   s   rq   c                   @   s   e Zd ZdZdd„ ZdS )Ú	DiskSetuprd   c                 C   s8   | j  t ¡ ¡}t |t |¡¡ | j  t 	|¡¡ d S r   )
rh   rj   r   rr   r   ÚbuildrD   rs   r   rt   )r   r9   rr   r   r   r   rn   Ç   s    zDiskSetup.tree_on_pathNrw   r   r   r   r   rx   Ä   s   rx   c                   @   s   e Zd ZdS )ÚCommonTestsN)r-   r.   r/   r   r   r   r   rz   Í   s   rz   )T)NNTr   )rV   ro   rL   rG   r2   rD   rf   r   Zcompat.py39r   r   rY   r   rv   r   Úimportlib.machineryr	   r
   r:   r;   ÚABCMetar<   ÚdictÚbytesÚrangeÚencoderh   re   rq   rx   rz   r   r   r   r   Ú<module>   sR   %
	
I
þû
ü
 ÿüï	