U
    kuf!                     @   s   d dl Z d dlZd dlZzd dlmZmZ W n$ ek
rP   d dlmZmZ Y nX d dlZ	G dd dZ
G dd dZG dd dZG d	d
 d
e jee
ZG dd de jeeZdS )    N)ignore_warningscheck_warningsc                   @   s   e Zd ZdZdZdS )StringAnchorMixinz importlib_resources.tests.data01z importlib_resources.tests.data02N)__name__
__module____qualname__anchor01anchor02 r
   r
   M/tmp/pip-unpacked-wheel-jirmq66v/importlib_resources/tests/test_functional.pyr      s   r   c                   @   s$   e Zd ZddlmZ ddlmZ dS )ModuleAnchorMixin   )data01)data02N)r   r   r    r   r   r   r	   r
   r
   r
   r   r      s   r   c                   @   sf   e 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eddd Zdd ZdS )FunctionalAPIBasec              
   c   s,   dD ]"}| j |d |V  W 5 Q R X qdS )zAYield various names of a text file in anchor02, each in a subTest))subdirectory	subsubdirresource.txt)z#subdirectory/subsubdir/resource.txt)zsubdirectory/subsubdirr   )
path_partsN)subTestselfr   r
   r
   r   _gen_resourcetxt_path_parts   s    z-FunctionalAPIBase._gen_resourcetxt_path_partsc              	   C   s  |  t| jdd |  tj| jdddddd |  D ]$}|  tj| jf|d	did q<| t t| j W 5 Q R X | t t| jd
 W 5 Q R X | t t| jd W 5 Q R X |  tj| jdddd |  tj| jdddd	dj
dd d S )N
utf-8.fileHello, UTF-8 world!
r   r   r   utf-8encoding
a resourcer   no-such-fileutf-16.filebinary.filelatin1 backslashreplaceerrorsHello, UTF-16 world!
utf-16)assertEqual	resources	read_textr   r	   r   assertRaisesOSErrorUnicodeDecodeErrorencodedecoder   r
   r
   r   test_read_text'   sb    


z FunctionalAPIBase.test_read_textc                 C   sB   |  t| jdd |  D ]}|  tj| jf| d qd S Nr   s   Hello, UTF-8 world!
s
   a resource)r*   r+   read_binaryr   r   r	   r   r
   r
   r   test_read_binaryZ   s    z"FunctionalAPIBase.test_read_binaryc              
   C   sX  t | jd}| | d W 5 Q R X |  D ]8}t j| jf|ddi}| | d W 5 Q R X q2| t t | j W 5 Q R X | t t | jd W 5 Q R X t | jd$}| t	 |  W 5 Q R X W 5 Q R X t j| jdd	d
}| | d W 5 Q R X t j| jddd$}| | d
djdd W 5 Q R X d S )Nr   r   r   r   r   r    r!   r"   r#   r   r$   r%   r&   r(   r)   )r+   	open_textr   r*   readr   r	   r-   r.   r/   r0   r1   r   fr   r
   r
   r   test_open_texte   sL    
z FunctionalAPIBase.test_open_textc              
   C   sj   t | jd}| | d W 5 Q R X |  D ]2}t j| jf| }| | d W 5 Q R X q2d S r3   )r+   open_binaryr   r*   r7   r   r	   r8   r
   r
   r   test_open_binary   s    z"FunctionalAPIBase.test_open_binaryc              
   C   s   t | jd2}tt|dd}| | d W 5 Q R X W 5 Q R X t | j8}ttj|ddd}| | d W 5 Q R X W 5 Q R X d S )Nr   r   r   r   )	r+   pathr   openstrr*   r7   osjoin)r   r=   r9   r
   r
   r   	test_path   s    $zFunctionalAPIBase.test_pathc                 C   st   t j}| || jd | || jd | || j | || jd |  D ]}| || jf|  qTd S )Nr   Zno_such_filer   )r+   is_resource
assertTruer   ZassertFalser   r	   )r   rC   r   r
   r
   r   test_is_resource   s    z"FunctionalAPIBase.test_is_resourcec              
   C   s  t dtf t| j}W 5 Q R X | t|ddddh t :}|	| 
t |	t dtf tt| jd W 5 Q R X |  D ]P}t >}|	| 
t |	t dtf ttj| jf|  W 5 Q R X qt dtf t| jd}W 5 Q R X | t|dh d S )Nz.*contents.*r   r!   r"   r   )r   DeprecationWarningr+   contentsr   ZassertGreaterEqualset
contextlib	ExitStackenter_contextr-   r.   listr   )r   ccmr   r
   r
   r   test_contents   s*    


"zFunctionalAPIBase.test_contents)categoryc                 C   s   t jt jt jt jt jt jt jfD ]z}| j|dd | 	t
 |d  W 5 Q R X | 	t
tf |d W 5 Q R X | 	t |d W 5 Q R X W 5 Q R X q d S )Nfunci  z$missing module$)r+   r,   r4   r6   r;   r=   rC   rG   r   r-   	TypeErrorAttributeErrorModuleNotFoundErrorr   rR   r
   r
   r   test_common_errors   s    	z$FunctionalAPIBase.test_common_errorsc                 C   sT   t jt jfD ]B}| j|d, | t || jddd W 5 Q R X W 5 Q R X qd S )NrQ   r   r   r   )r+   r,   r6   r   r-   rS   r	   rV   r
   r
   r   test_text_errors   s    z"FunctionalAPIBase.test_text_errorsN)r   r   r   r   r2   r5   r:   r<   rB   rE   rO   r   rF   rW   rX   r
   r
   r
   r   r      s   
3%
	
r   c                   @   s   e Zd ZdS )FunctionalAPITest_StringAnchorNr   r   r   r
   r
   r
   r   rY      s   rY   c                   @   s   e Zd ZdS )FunctionalAPITest_ModuleAnchorNrZ   r
   r
   r
   r   r[      s   r[   )Zunittestr@   rI   Ztest.support.warnings_helperr   r   ImportErrorZtest.supportZimportlib_resourcesr+   r   r   r   ZTestCaserY   r[   r
   r
   r
   r   <module>   s*    J

