a
    äzeŸ  ã                   @   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mZmZm	Z	 dZ
G dd„ dejƒZG dd„ dejƒZedkr|e ¡  dS )	é    N)ÚfindfileÚTESTFNÚunlink))ú
python.pngÚpng)z
python.gifZgif)z
python.bmpZbmp)z
python.ppmZppm)z
python.pgmZpgm)z
python.pbmZpbm)z
python.jpgZjpeg)z
python.rasZrast)z
python.sgiZrgb)zpython.tiffZtiff)z
python.xbmZxbm)zpython.webpZwebp)z
python.exrZexrc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚUnseekableIOc                 C   s
   t j‚d S ©N©ÚioÚUnsupportedOperation©Úself© r   ú&/usr/lib/python3.9/test/test_imghdr.pyÚtell   s    zUnseekableIO.tellc                 O   s
   t j‚d S r   r	   )r   ÚargsÚkwargsr   r   r   Úseek   s    zUnseekableIO.seekN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   c                   @   sx   e Z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d„ Zdd„ Zdd„ Zdd„ ZdS )Ú
TestImghdrc                 C   sH   t ddd| _t| jdƒ}| ¡ | _W d   ƒ n1 s:0    Y  d S )Nr   Ú
imghdrdata©ZsubdirÚrb)r   ÚtestfileÚopenÚreadÚtestdata)ÚclsÚstreamr   r   r   Ú
setUpClass!   s    zTestImghdr.setUpClassc                 C   s   t tƒ d S r   )r   r   r   r   r   r   ÚtearDown'   s    zTestImghdr.tearDownc              	   C   sÊ   t D ]À\}}t|dd}|  t |¡|¡ t|dƒ"}|  t |¡|¡ W d   ƒ n1 s\0    Y  t|dƒ}| ¡ }W d   ƒ n1 sŽ0    Y  |  t d |¡|¡ |  t d t|ƒ¡|¡ qd S )Nr   r   r   )Ú
TEST_FILESr   ÚassertEqualÚimghdrÚwhatr   r   Ú	bytearray)r   ÚfilenameÚexpectedr    Údatar   r   r   Ú	test_data*   s    0&zTestImghdr.test_datac              	   C   sb   t D ]X\}}| j|d4 t|dd}|  t t |¡¡|¡ W d   ƒ q1 sR0    Y  qd S )N)r(   r   r   )r#   ZsubTestr   r$   r%   r&   ÚpathlibÚPath)r   r(   r)   r   r   r   Útest_pathlike_filename5   s    z!TestImghdr.test_pathlike_filenamec                 C   s:   dd„ }t j |¡ |  t jj¡ |  t  d d¡d¡ d S )Nc                 S   s   |   d¡rdS d S )Nó   eggsÚham)Ú
startswith)ÚhÚfiler   r   r   Ú
test_jumbo<   s    
z1TestImghdr.test_register_test.<locals>.test_jumbor/   r0   )r%   ZtestsÚappendZ
addCleanupÚpopr$   r&   )r   r4   r   r   r   Útest_register_test;   s    zTestImghdr.test_register_testc                 C   s¢   t tdƒ.}| d¡ | ¡ }| | j¡ W d   ƒ n1 s>0    Y  t tdƒ<}| |¡ |  t |¡d¡ |  | ¡ |¡ W d   ƒ n1 s”0    Y  d S )NÚwbs   ababagalamagar   r   )	r   r   Úwriter   r   r   r$   r%   r&   )r   r    Úposr   r   r   Útest_file_posC   s    
*
zTestImghdr.test_file_posc              	   C   sF  |   t¡ t ¡  W d   ƒ n1 s(0    Y  |   t¡ t d ¡ W d   ƒ n1 s\0    Y  |   t¡ t | jd¡ W d   ƒ n1 s”0    Y  |   t¡" t t | j¡¡ W d   ƒ n1 sÐ0    Y  t| jdƒJ}|   t¡ t | 	¡ ¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s80    Y  d S )Né   r   )
ÚassertRaisesÚ	TypeErrorr%   r&   ÚAttributeErrorr   ÚosÚfsencoder   Úfileno)r   Úfr   r   r   Útest_bad_argsM   s    &(,0zTestImghdr.test_bad_argsc                 C   s    dD ]}|   t d |¡¡ qd S )N)s   ‰PN
s   Ùs   Y¦s   cutecats	   000000JFIs   GIF80)ZassertIsNoner%   r&   )r   Úheaderr   r   r   Útest_invalid_headersZ   s    zTestImghdr.test_invalid_headersc              
   C   sú   t  ¡ Þ t  dt¡ tD ]¼\}}t|dd}t|dƒ}| ¡  d¡}W d   ƒ n1 s\0    Y  |  	t
¡  t t |¡¡ W d   ƒ n1 s–0    Y  |  	t
¡ t d |¡ W d   ƒ q1 sÌ0    Y  qW d   ƒ n1 sì0    Y  d S )NÚignorer   r   r   Úlatin1)ÚwarningsÚcatch_warningsÚsimplefilterÚBytesWarningr#   r   r   r   Údecoder=   r>   r%   r&   r
   ÚStringIO)r   r(   Ú_r    r*   r   r   r   Útest_string_datac   s    
,.zTestImghdr.test_string_datac                 C   s8   |   t¡ t d¡ W d   ƒ n1 s*0    Y  d S )NÚmissing)r=   ÚFileNotFoundErrorr%   r&   r   r   r   r   Útest_missing_fileo   s    zTestImghdr.test_missing_filec                 C   s”   t | jdƒ}| ¡  |  t¡}t |¡ W d   ƒ n1 s>0    Y  t | j	¡}| ¡  |  t¡}t |¡ W d   ƒ n1 s†0    Y  d S )Nr   )
r   r   Úcloser=   Ú
ValueErrorr%   r&   r
   ÚBytesIOr   ©r   r    Úcmr   r   r   Útest_closed_files   s    (zTestImghdr.test_closed_filec              	   C   sš   t tdƒ}| | j¡ W d   ƒ n1 s,0    Y  ttdƒF}|  tj¡ t 	|¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )Nr8   r   )
r   r   r9   r   r   r=   r
   r   r%   r&   )r   r    r   r   r   Útest_unseekable}   s
    *zTestImghdr.test_unseekablec              	   C   sx   t tdƒZ}| | j¡ | d¡ |  t¡}t |¡ W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  d S )Nr8   r   )	r   r   r9   r   r   r=   ÚOSErrorr%   r&   rW   r   r   r   Útest_output_stream„   s
    
zTestImghdr.test_output_streamN)r   r   r   Úclassmethodr!   r"   r+   r.   r7   r;   rD   rF   rP   rS   rY   rZ   r\   r   r   r   r   r       s   

	
r   Ú__main__)r%   r
   r@   r,   ZunittestrI   Ztest.supportr   r   r   r#   ÚFileIOr   ZTestCaser   r   Úmainr   r   r   r   Ú<module>   s   k