o
    tVÆg¨  ã                   @   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Zd dlm	Z	m
Z
mZ d dlZd dlZd dlZdZej ¡ ZedurLedkoKe ¡ ejkZdd„ ZG dd„ dejƒZed	krce ¡  dS dS )
é    N)Úexample_pathÚpngÚtostringF)é   r   é   c                 C   sJ   |   t|ƒ¡}t|ƒt|ƒkrdS t|ƒD ]\}}||| kr" dS qdS )z3Tests a given file to see if the magic hex matches.r   é   )ÚreadÚlenÚ	enumerate)ÚfÚmagic_hexesÚdataÚiÚ	magic_hex© r   úK/home/ubuntu/.local/lib/python3.10/site-packages/pygame/tests/image_test.pyÚ
test_magic   s   ÿr   c                   @   sj  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	d	¡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$d%„ Zd&d'„ Zd(d)„ ZdWd+d,„Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Z d9d:„ Z!d;d<„ Z"d=d>„ Z#d?d@„ Z$dAdB„ Z%dCdD„ Z&dEdF„ Z'dGdH„ Z(dIdJ„ Z)dKdL„ Z*dMdN„ Z+dOdP„ Z,dQdR„ Z-dSdT„ Z.dUdV„ Z/d*S )XÚImageModuleTestc                 C   s\   t j d¡}|  |jd¡ t j |¡}|  | d¡d¡ |  | ¡ d¡ |  | 	¡ d¡ dS )z#see if we can load the pygame icon.úpygame_icon.bmpÚrb©r   r   ©r   é   r   éÿ   é    N)
ÚpygameÚpkgdataÚgetResourceÚassertEqualÚmodeÚimageÚ
load_basicÚget_atÚ
get_heightÚ	get_width©Úselfr   Úsurfr   r   r   ÚtestLoadIcon!   s   zImageModuleTest.testLoadIconc                 C   sX  d}d}d}d}|| || g}t jdd\}}t |d¡}tjddd	d
}	|	 ||¡ W d  ƒ n1 s7w   Y  tj 	|¡}
|  
|
 d¡|¡ |  
|
 d¡|¡ |  
|
 d¡|¡ |  
|
 d¡|¡ t|dƒ}tj 	|¡}
W d  ƒ n1 s|w   Y  |  
|
 d¡|¡ |  
|
 d¡|¡ |  
|
 d¡|¡ |  
|
 d¡|¡ t |¡ dS )zBsee if we can load a png with color values in the proper channels.)éÒ   r   r   r   )r   éÜ   r   r   )r   r   éæ   r   )én   éx   é‚   éŒ   ú.png©ÚsuffixÚwbr   T©ÚalphaNr   )r   r   ©r   r   ©r   r   r   )ÚtempfileÚmkstempÚosÚfdopenr   ÚWriterÚwriter   r    Úloadr   r"   ÚopenÚremove)r&   Úreddish_pixelÚgreenish_pixelÚbluish_pixelÚgreyish_pixelÚpixel_arrayÚf_descriptorÚf_pathr   Úwr'   r   r   r   ÚtestLoadPNG,   s.   þÿzImageModuleTest.testLoadPNGc                 C   sP   t dƒ}tj |¡}t|dƒ}tj |¡}W d  ƒ dS 1 s!w   Y  dS )zto see if we can load a jpg.údata/alien1.jpgr   N)r   r   r    r>   r?   r%   r   r   r   ÚtestLoadJPGN   s
   "ÿzImageModuleTest.testLoadJPGc              
   C   sŽ   g d¢}|D ]>}| j |d. tt|ƒdƒ}| ¡ }t |¡}tj |¡}W d  ƒ n1 s0w   Y  W d  ƒ n1 s?w   Y  qdS )z*to see if we can load images with BytesIO.)zdata/alien1.pngrJ   zdata/alien1.gifúdata/asprite.bmp)Úfnamer   N)	ÚsubTestr?   r   r   ÚioÚBytesIOr   r    r>   )r&   ÚfilesrM   r   Ú	img_bytesÚimg_filer    r   r   r   ÚtestLoadBytesIOV   s   
ý€ÿ€ÿzImageModuleTest.testLoadBytesIOz=SDL_image 2.0.5 and older has a big endian bug in jpeg savingc                    sF  ddl m}m‰  d‰dˆ dˆ f}‡ ‡fdd„}|ddƒ|dƒf|ddƒ|d	ƒf|ddƒ|d
ƒf|ddƒ|dddƒfg}t  |dd¡}|D ]
\}}| ||¡ qFtjddd}|j}	W d  ƒ n1 sfw   Y  t j 	||	¡ t j 
|	¡}
dd„ }ˆd }|D ]\}}| ||f¡j}|  ||
 |¡ƒ||ƒ¡ q‚t |	¡ dS )zÙJPG equivalent to issue #211 - color channel swapping

        Make sure the SDL surface color masks represent the rgb memory format
        required by the JPG library. The masks are machine endian dependent
        r   )ÚColorÚRecté   r   c                    s   ˆ | ˆ |ˆ ˆˆƒS ©Nr   )Úsquare_xÚsquare_y©rV   Ú
square_lenr   r   Úas_rect   s   ÿz,ImageModuleTest.testSaveJPG.<locals>.as_rectÚredr   ÚgreenÚbluer   é€   é@   r   z.jpgF©r2   ÚdeleteNc                 S   s$   d}t  | j|@ | j|@ | j|@ ¡S )Néü   )r   rU   ÚrÚgÚb)ÚcÚmaskr   r   r   Úapproxœ   s    z+ImageModuleTest.testSaveJPG.<locals>.approx)r   rU   rV   ÚSurfaceÚfillr8   ÚNamedTemporaryFileÚnamer    Úsaver>   ÚmoveÚtopleftr   r"   r:   r@   )r&   rU   Úszr]   Úsquaresr'   ÚrectÚcolorr   Útemp_filenameÚjpg_surfrk   ÚoffsetÚposnr   r[   r   ÚtestSaveJPGf   s.   	üÿzImageModuleTest.testSaveJPGc              	   C   sD  d}d}d}d}t  dt jd¡}| d|¡ | d|¡ | d	|¡ | d
|¡ tjddd}|j}W d  ƒ n1 s=w   Y  t j ||¡ zHt	j
|d}| ¡ \}	}
}}|  tt|ƒƒ|¡ |  tt|ƒƒ|¡ |  tt|ƒƒ|¡ |  tt|ƒƒ|¡ W |jjsŠ|j ¡  ~t |¡ dS |jjs›|j ¡  ~t |¡ w )úBsee if we can save a png with color values in the proper channels.)é×   r   r   r   )r   éá   r   r   )r   r   éë   r   )és   é}   é‡   é‘   ©r   r   r   r   r6   ©r   r   ©r   é   r0   Frc   N©Úfilename)r   rl   ÚSRCALPHAÚset_atr8   rn   ro   r    rp   r   ÚReaderÚasRGBA8r   ÚtupleÚnextÚfileÚclosedÚcloser:   r@   ©r&   rA   rB   rC   rD   r'   r   rw   ÚreaderÚwidthÚheightÚpixelsÚmetadatar   r   r   ÚtestSavePNG32§   s8   ÿ
ý
zImageModuleTest.testSavePNG32c              	   C   sB  d}d}d}d}t  ddd¡}| d|¡ | d	|¡ | d
|¡ | d|¡ tjddd}|j}W d  ƒ n1 s<w   Y  t j ||¡ zHtj	|d}| 
¡ \}	}
}}|  tt|ƒƒ|¡ |  tt|ƒƒ|¡ |  tt|ƒƒ|¡ |  tt|ƒƒ|¡ W |jjs‰|j ¡  ~t |¡ dS |jjsš|j ¡  ~t |¡ w )r|   ©r}   r   r   ©r   r~   r   ©r   r   r   ©r€   r   r‚   r„   r   é   r   r6   r…   r†   r0   Frc   Nrˆ   )r   rl   r‹   r8   rn   ro   r    rp   r   rŒ   ÚasRGB8r   rŽ   r   r   r‘   r’   r:   r@   r“   r   r   r   ÚtestSavePNG24Ì   s8   ÿ
ý
zImageModuleTest.testSavePNG24c              	   C   s  g d¢}dt |ƒf}tj|dd}t|ƒD ]\}}| d|f|¡ qtjddd}|j}W d	  ƒ n1 s7w   Y  tj 	||¡ z3t
j|d
}| ¡ \}	}
}}|  ||	|
f¡ |  ttt|ƒƒ|¡ W |jjso|j ¡  ~t |¡ d	S |jjs€|j ¡  ~t |¡ w )z)see if we can save an 8 bit png correctly))r   r   r   )r   r   r   )r   r   r   )éª   é’   r¡   r   é   ©Údepthr   r0   Frc   Nrˆ   )r	   r   rl   r
   r‹   r8   rn   ro   r    rp   r   rŒ   rŸ   r   ÚlistÚmaprŽ   r   r‘   r’   r:   r@   )r&   Ú
set_pixelsÚsizer'   ÚcntÚpixr   rw   r”   r•   r–   r—   Ú_r   r   r   ÚtestSavePNG8ñ   s,   ÿ
ý
zImageModuleTest.testSavePNG8c           
   	   C   sL  t j ¡  d}d}d}d}t  ddd¡}| d|¡ | d|¡ | d	|¡ | d
|¡ tjddd}|j}W d  ƒ n1 sAw   Y  t j 	||¡ zHt
j|d}| ¡  | ¡ }	|  tt|	ƒƒ|¡ |  tt|	ƒƒ|¡ |  tt|	ƒƒ|¡ |  tt|	ƒƒ|¡ W |jjsŽ|j ¡  ~t |¡ dS |jjsŸ|j ¡  ~t |¡ w )r|   rš   r›   rœ   r   r„   r   r£   r   r   r‡   r0   Frc   Nrˆ   )r   ÚdisplayÚinitrl   Úset_palette_atr8   rn   ro   r    rp   r   rŒ   r   Úpaletter   rŽ   r   r   r‘   r’   r:   r@   )
r&   rA   rB   rC   rD   r'   r   rw   r”   r±   r   r   r   ÚtestSavePaletteAsPNG8  s<   
ÿ
ý
z%ImageModuleTest.testSavePaletteAsPNG8c              
   C   s  t  d¡}| d¡ i }g d¢|d< g d¢|d< ddg|d	< g d
¢}|dd„ |D ƒ }|D ]S}zKd|› }t j ||¡ t|dƒ}|  d|ft||| ¡  ƒ|f¡ W d   ƒ n1 s]w   Y  t j 	|¡}|  | 
d¡| 
d¡¡ W t |¡ q-t |¡ w d S )N©é
   r´   ©é   r¶   r¶   ©r   éØ   r   éà   Újpg©é‰   éP   éN   éG   r   éB   éM   Úbmp)rº   r   rÂ   c                 S   ó   g | ]}|  ¡ ‘qS r   ©Úupper©Ú.0Úxr   r   r   Ú
<listcomp>C  ó    z-ImageModuleTest.test_save.<locals>.<listcomp>ztmpimg.r   r   r   )r   rl   rm   r    rp   r?   r   r   Úlowerr>   r"   r:   r@   )r&   Úsr   ÚformatsÚfmtrw   ÚhandleÚs2r   r   r   Ú	test_save8  s*   


ÿý	ëzImageModuleTest.test_savec                 C   s^   t  d¡}| d¡ t ¡ }t j ||¡ | d¡ t j |d¡}|  	| 
d¡| 
d¡¡ d S )Nr7   rµ   r   Útgar   )r   rl   rm   rO   rP   r    rp   Úseekr>   r   r"   )r&   rÌ   Úbytes_streamrÐ   r   r   r   Útest_save_to_fileobject\  s   


z'ImageModuleTest.test_save_to_fileobjectc              	   C   s˜   t  d¡}| d¡ tjddd}|j}W d   ƒ n1 sw   Y  z!t j ||¡ t j |¡}|  	| 
d¡| 
d¡¡ W t |¡ d S t |¡ w ©Nr7   rµ   z.tgaFrc   r   )r   rl   rm   r8   rn   ro   r    rp   r>   r   r"   r:   r@   )r&   rÌ   r   rw   rÐ   r   r   r   Útest_save_tgaf  s   

ÿzImageModuleTest.test_save_tgac              	   C   s¢   t  d¡}| d¡ tjddd}|j}W d   ƒ n1 sw   Y  t |¡}z!t j 	||¡ t j 
|¡}|  | d¡| d¡¡ W t |¡ d S t |¡ w rÖ   )r   rl   rm   r8   rn   ro   ÚpathlibÚPathr    rp   r>   r   r"   r:   r@   )r&   r'   r   rw   ÚpathrÐ   r   r   r   Útest_save_pathlibt  s   

ÿ
z!ImageModuleTest.test_save_pathlibc              
   C   sà  t  d¡}| d¡ i }g d¢|d< g d¢|d< ddg|d	< g d
¢}|dd„ |D ƒ }t j ¡ }|d uoE|d d |d d  |d  dk}|D ]¥}tjd|› d\}}|s’| ¡ dkr’t 	|d¡&}	|  
t j¡ t j ||	|¡ W d   ƒ n1 s}w   Y  W d   ƒ n1 sŒw   Y  nVt 	|d¡H}	t j ||	|¡ | ¡ |v r½|	 d¡ |  d|ft|	|| ¡  ƒ|f¡ |	 ¡  |	 d¡ t j |	|¡}
|  |
 d¡| d¡¡ W d   ƒ n1 sãw   Y  t |¡ qHd S )Nr³   rµ   r·   rº   r»   r   rÀ   rÁ   rÂ   )rÒ   rº   rÂ   r   c                 S   rÃ   r   rÄ   rÆ   r   r   r   rÉ   Œ  rÊ   zPImageModuleTest.test_save__to_fileobject_w_namehint_argument.<locals>.<listcomp>r   i'  r   éd   r   i"N  Ú.r1   r3   zr+br   )r   rl   rm   r    Úget_sdl_image_versionr8   r9   rË   r:   r;   ÚassertRaisesÚerrorrp   rÓ   r   r   Úflushr>   r"   r@   )r&   rÌ   r   rÍ   ÚSDL_Im_versionÚisAtLeastSDL_image_2_0_2rÎ   Útmp_fileÚtmp_filenamerÏ   rÐ   r   r   r   Ú,test_save__to_fileobject_w_namehint_argument‚  sJ   


þÿ€ÿ€
ÿ
òêz<ImageModuleTest.test_save__to_fileobject_w_namehint_argumentc              	   C   sš   t  dt jd¡}| d¡ | d¡ | ¡ }| d¡}d}zt j ||¡ t j 	|¡}W t
 |¡ nt
 |¡ w | ¡ }|  ||¡ |  || d¡¡ dS )z3make sure the color key is not changed when saving.r³   r   rµ   ©r   r   r   r   z
tmpimg.pngN)r   rl   rŠ   rm   Úset_colorkeyÚget_colorkeyr"   r    rp   r>   r:   r@   r   )r&   rÌ   Ú	colorkey1Úp1rw   rÐ   Ú	colorkey2r   r   r   Útest_save_colorkey¬  s   


z"ImageModuleTest.test_save_colorkeyc              	   C   sX   dd l }tdƒ}tj tdƒd¡}| ||¡ ztj |¡}W t 	|¡ d S t 	|¡ w )Nr   rL   r   õ
   ä½ å¥½.bmp)
Úshutilr   r:   rÚ   ÚjoinÚcopyr   r    r>   r@   )r&   rï   ÚorigÚtempÚimr   r   r   Útest_load_unicode_pathÀ  s   z&ImageModuleTest.test_load_unicode_pathc                 C   sà   t  ddd¡}zt|dƒ}W d   ƒ n1 sw   Y  t |¡ W n ty/   t d¡‚w |  tj	 
|¡¡ z%t j ||¡ |  tj	 |¡d¡ W zt |¡ W d S  ty^   Y d S w zt |¡ W w  tyo   Y w w )Nr³   r   r   rH   zthe path cannot be openedr´   )r   rl   r?   r:   r@   ÚOSErrorÚunittestÚSkipTestÚassertFalserÚ   Úexistsr    rp   ÚassertGreaterÚgetsize)r&   Ú	temp_filerô   r   r   r   r   Ú_unicode_saveË  s.   ÿ
ÿÿþÿzImageModuleTest._unicode_savec                 C   s   |   d¡ dS )z(save unicode object with non-ASCII charsrî   N)rþ   ©r&   r   r   r   Útest_save_unicode_pathà  s   z&ImageModuleTest.test_save_unicode_pathc              
   C   s°   |   t|ƒt|ƒ¡ d}||krTtdt|ƒ|ƒD ]=}t|| t|ƒƒ}|||… }|||… }||krS|||… }	d||t|ƒt |¡t |¡t |	¡f }
|  |
¡ qd S d S )Né   r   z5string difference in %d to %d of %d:
%s
%s
source:
%s)r   r	   ÚrangeÚminÚbinasciiÚhexlifyÚfail)r&   Ústring1Ústring2Úsource_stringÚ
block_sizeÚblock_startÚ	block_endÚblock1Úblock2Úsource_blockÚmsgr   r   r   ÚassertPremultipliedAreEqualä  s.   úÿÿ
€îz+ImageModuleTest.assertPremultipliedAreEqualc              	   C   s
  dd„ }t  dt jd¡}t| ¡ ƒD ]+}t| ¡ ƒD ]"}||| ¡   }| ||f|d d |d d |d d |f¡ qq| ¡ }||ƒ |  t j	 
|d	¡t j	 
|d
¡t j	 
|d
¡¡ |  t j	 
|d¡t j	 
|d¡t j	 
|d¡¡ t  ddd¡}|  tt j	j
|d	¡ dS )zItest to make sure we can export a surface to a premultiplied alpha stringc                 S   s†   t |  ¡ ƒD ]:}t |  ¡ ƒD ]1}|  ||f¡}|d |d  d |d |d  d |d |d  d |d f}|  ||f|¡ qqd S )Nr   r‡   r   r   r   )r  r$   r#   r"   r‹   )Úsurface_to_modifyrÈ   Úyrv   Úpremult_colorr   r   r   ÚconvertRGBAtoPremultipliedþ  s   üøÿzQImageModuleTest.test_to_string__premultiplied.<locals>.convertRGBAtoPremultiplied)é   r  r   é   r  é   é   ÚRGBA_PREMULTÚRGBAÚARGB_PREMULTÚARGBr   rž   N)r   rl   rŠ   r  r$   r#   r‹   rñ   r  r    r   rß   Ú
ValueError)r&   r  Útest_surfacerÈ   r  r   Úpremultiplied_copyÚno_alpha_surfacer   r   r   Útest_to_string__premultipliedû  s2   (ÿþýýÿz-ImageModuleTest.test_to_string__premultipliedNc           
   
   C   s$  |  ¡ | ¡ }}|  ||  ¡ |¡ |  || ¡ |¡ |  | ¡ | ¡ |¡ |  | ¡ | ¡ |¡ |  | ¡ | ¡ |¡ |  | ¡ | ¡ |¡ |  | ¡ | ¡ |¡ |  | ¡ | ¡ |¡ |  | 	¡ | 	¡ |¡ |j
}|j
}t|ƒD ]}t|ƒD ]}	|  ||	|fƒ||	|fƒd||	|f ¡ qxqrd S )Nz%s (pixel: %d, %d))r$   r#   r   Úget_sizeÚget_rectré   Ú	get_alphaÚ	get_flagsÚget_bitsizeÚget_bytesizer"   r  )
r&   Úsurf_aÚsurf_br  Úa_widthÚa_heightÚsurf_a_get_atÚsurf_b_get_atr  rÈ   r   r   r   Ú_assertSurfaceEqual$  s*   

ýÿÿz#ImageModuleTest._assertSurfaceEqualc              
   C   s  ddl }d}| |d¡}| |d¡}dd„ }tjdtjdd	}td
ƒD ]G}tdƒD ]@}|d d }	| |d |f|	|||f¡ | |d |f||	||f¡ | |d |f|||	|f¡ | |d |f||||	f¡ q)q#|  ||d¡ |D ];}
tj	 
||
d ¡}||
d |
d ||
d |
d |ƒƒ}tj	 || ¡ |
d ¡}|  ||d|
d › d|
d › d¡ qt|D ]3}
tj	 
||
d ¡}||
d |
d |ƒ}tj	 || ¡ |
d ¡}|  ||d|
d › d|
d › d¡ q²|D ]}tj	 
||¡}tj	 || ¡ |¡}|  ||d|› d¡ qèdS )z9Ensure methods tostring() and fromstring() are symmetric.r   N)r  r  ÚBGRAr   c                 S   sÚ   dd„ t | ƒD ƒ}dd„ t |ƒD ƒ}t d|¡}t|ƒd }t|ƒD ]F}|d }|||d   }	|||d   }
|||d   }|||d   }|	|||d  < |
|||d  < ||||d  < ||||d  < q"t|ƒS )	Nc                 S   ó   i | ]\}}||“qS r   r   ©rÇ   ÚvÚkr   r   r   Ú
<dictcomp>H  ó    zRImageModuleTest.test_fromstring__and_tostring.<locals>.convert.<locals>.<dictcomp>c                 S   r1  r   r   r2  r   r   r   r5  I  r6  ÚBr   ÚRÚGÚA)r
   Úarrayr	   r  r   )Úfmt1Úfmt2Ústr_bufÚpos_fmt1Úpos_fmt2Úbyte_bufÚ	num_quadsr   Úi4r8  r9  r7  r:  r   r   r   ÚconvertG  s   z>ImageModuleTest.test_fromstring__and_tostring.<locals>.convert©rb   r  r   )Úflagsr¥   r  rW   é   zfailing with identical surfacesr   zconverting z to z and back is not symmetricz failedz6tostring/fromstring functions are not symmetric with 'z' format)Ú	itertoolsÚpermutationsÚcombinationsr   rl   rŠ   r  r‹   r/  r    r   Ú
fromstringr#  )r&   rH  ÚfmtsÚfmt_permutationsÚfmt_combinationsrD  r  r   ÚjÚ	intensityÚpairÚfmt1_bufÚfmt1_convert_bufÚtest_convert_two_wayÚfmt2_convert_bufÚtest_convert_one_wayrÎ   Útest_bufÚtest_to_from_fmt_stringr   r   r   Útest_fromstring__and_tostring>  sl   ûÿÿÿýÿý
ÿÿýúz-ImageModuleTest.test_fromstring__and_tostringc              	   C   sæ   t jddd}tdƒD ]G}tdƒD ]@}|d d }| |d |f||||f¡ | |d |f||||f¡ | |d |f||||f¡ | |d |f||||f¡ qqd	}t j ||¡}t j || ¡ |¡}|  ||d
|› d¡ d S )NrE  rž   r¤   r  rW   rG  r   r   ÚRGBz6tostring/fromstring functions are not symmetric with "z" format)	r   rl   r  r‹   r    r   rK  r#  r/  )r&   r  r   rO  rP  rÎ   Úfmt_bufrX  r   r   r   Útest_tostring_depth_24  s&   û
ÿ
ýz&ImageModuleTest.test_tostring_depth_24c                 C   s¨   t j ¡  tg d¢ƒ}t j |dd¡}| g d¢¡ |  | d¡t  	ddd¡¡ |  | d	¡t  	ddd¡¡ |  | d
¡t  	ddd¡¡ |  | d¡t  	ddd¡¡ dS )z+test reading pixel data from a bytes buffer)r   r   r   r   r   r   r   r   r   r   r   r   r‡   r‡   r‡   r‡   ©r   r   ÚP))r   r´   r  )r   r   r   rç   )é2   éÈ   r  r   r   r´   r  r7   ©r   r   r   ©r‡   r‡   r_  r`  N)
r   r®   r¯   Ú	bytearrayr    Ú
frombufferÚset_paletter   r"   rU   )r&   Úeight_bit_palette_bufferÚeight_bit_surfr   r   r   Útest_frombuffer_8bit¥  s   
ÿÿ z$ImageModuleTest.test_frombuffer_8bitc                 C   ó   t g d¢ƒ}tj |dd¡}|  | d¡t ddd¡¡ |  | d¡t ddd¡¡ |  | d	¡t d
d
d
¡¡ |  | d¡t ddd¡¡ d S )N)0r   r´   r  r   r´   r  r   r´   r  r   r´   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_  r`  r  r_  r`  r  r_  r`  r  r_  r`  r  r]  rZ  r   r   r´   r  r7   ra  r   rb  r_  r`  ©rc  r   r    rd  r   r"   rU   )r&   Ú
rgb_bufferÚrgb_surfr   r   r   Útest_frombuffer_RGBµ  ó   ÿ5 z#ImageModuleTest.test_frombuffer_RGBc                 C   ri  )N)0r  r´   r   r  r´   r   r  r´   r   r  r´   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r`  r_  r  r`  r_  r  r`  r_  r  r`  r_  r]  ÚBGRr   r   r´   r  r7   ra  r   rb  r_  r`  rj  )r&   Ú
bgr_bufferÚbgr_surfr   r   r   Útest_frombuffer_BGRñ  rn  z#ImageModuleTest.test_frombuffer_BGRc              	   C   s˜   t g d¢ƒ}tj |dd¡}|  | d¡t dddd¡¡ |  | d	¡t dddd
¡¡ |  | d¡t dddd¡¡ |  | d¡t dddd¡¡ d S )N©@r   r´   r  r`  r   r´   r  r`  r   r´   r  r`  r   r´   r  r`  r   r   r   é   r   r   r   rt  r   r   r   rt  r   r   r   rt  r   r   r   éO   r   r   r   ru  r   r   r   ru  r   r   r   ru  r_  r`  r  r   r_  r`  r  r   r_  r`  r  r   r_  r`  r  r   r]  r0  r   r  r´   r   r`  r7   rt  ra  r   ru  rb  r_  rj  )r&   Úbgra_bufferÚ	bgra_surfr   r   r   Útest_frombuffer_BGRA-  ó   ÿE"z$ImageModuleTest.test_frombuffer_BGRAc              	   C   s˜   t g d¢ƒ}tj |dd¡}|  | d¡t dddd¡¡ |  | d¡t dddd¡¡ |  | d	¡t d
d
d
d¡¡ |  | d¡t dddd¡¡ d S )N)@r   r´   r  r   r   r´   r  r   r   r´   r  r   r   r´   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_  r`  r  r   r_  r`  r  r   r_  r`  r  r   r_  r`  r  r   r]  ÚRGBXr   r   r´   r  r7   ra  r   rb  r_  r`  rj  )r&   Úrgbx_bufferÚ	rgbx_surfr   r   r   Útest_frombuffer_RGBXy  ry  z$ImageModuleTest.test_frombuffer_RGBXc              	   C   ó˜   t g d¢ƒ}tj |dd¡}|  | d¡t dddd¡¡ |  | d	¡t dddd
¡¡ |  | d¡t dddd¡¡ |  | d¡t dddd¡¡ d S )Nrs  r]  r  r   r   r´   r  r`  r7   rt  ra  r   ru  rb  r_  rj  )r&   Úrgba_bufferÚ	rgba_surfr   r   r   Útest_frombuffer_RGBAÅ  ry  z$ImageModuleTest.test_frombuffer_RGBAc              	   C   r~  )N)@r`  r   r´   r  r`  r   r´   r  r`  r   r´   r  r`  r   r´   r  rt  r   r   r   rt  r   r   r   rt  r   r   r   rt  r   r   r   ru  r   r   r   ru  r   r   r   ru  r   r   r   ru  r   r   r   r   r_  r`  r  r   r_  r`  r  r   r_  r`  r  r   r_  r`  r  r]  r  r   r   r´   r  r`  r7   rt  ra  r   ru  rb  r_  rj  )r&   Úargb_bufferÚ	argb_surfr   r   r   Útest_frombuffer_ARGB  ry  z$ImageModuleTest.test_frombuffer_ARGBc                 C   s´   g }|  d¡ tjdd\}}t |d¡}tjdddd}| ||¡ W d   ƒ n1 s.w   Y  z
tj	 
|¡}d}W n tjyI   d	}Y nw |  tj	 ¡ |¡ t |¡ d S )
N)r`  r`  r`  r   rÜ   rÜ   rÜ   r   r0   r1   r3   r   r   Tr4   F)Úappendr8   r9   r:   r;   r   r<   r=   r   r    r>   rà   r   Úget_extendedr@   )r&   Ú	raw_imagerF   rG   r   rH   r'   Úloadedr   r   r   Útest_get_extended]  s   
þÿz!ImageModuleTest.test_get_extendedc                 C   sj   t j ¡ s|  t j ¡ ¡ d S d}t}t}t j ¡ }|  ||¡ |  t	|ƒ|¡ |D ]}|  ||¡ q*d S )Nr‡   )
r   r    r†  ÚassertIsNonerÞ   rŽ   ÚintÚassertIsInstancer   r	   )r&   Úexpected_lengthÚexpected_typeÚexpected_item_typeÚversionÚitemr   r   r   Útest_get_sdl_image_versionq  s   

ÿz*ImageModuleTest.test_get_sdl_image_versionc                 C   s†   t j tdƒ¡}|  | d¡d¡ t j d¡}|  |jd¡ t j |¡}|  | d¡d¡ |  | 	¡ d¡ |  | 
¡ d¡ | ¡  dS )	zGto see if we can load bmp from files and/or file-like objects in memoryrL   r   ©r   r   r   r   r   r   r   r   N)r   r    r!   r   r   r"   r   r   r   r#   r$   r’   )r&   rÌ   r   r'   r   r   r   Útest_load_basicƒ  s   zImageModuleTest.test_load_basicc              	   C   s”   g d¢}|D ]A\}}|  d¡rtrq| jd| d¡d › d| |d tj td| ƒ¡}|  | 	d	¡|¡ W d
  ƒ n1 sBw   Y  qd
S )aK  can load different format images.

        We test loading the following file types:
            bmp, png, jpg, gif (non-animated), pcx, tga (uncompressed), tif, xpm, ppm, pgm
        Following file types are tested when using SDL 2
            svg, pnm, webp
        All the loaded images are smaller than 32 x 32 pixels.
        ))zasprite.bmpr“  )zlaplacian.png)r´   r´   éF   r   )zred.jpg)éþ   r   r   r   )zblue.gif)r   r   r   r   )z	green.pcx)r   r   r   r   )z
yellow.tga)r   r   r   r   )zturquoise.tif)r   r   r   r   )z
purple.xpm)r   r   r   r   )z	black.ppm)r   r   r   r   )zgrey.pgm)r-   r-   r-   r   )zteal.svg)r   ra   ra   r   )zcrimson.pnm)r*   r  é<   r   )zscarlet.webp)re   é   é5   r   ÚsvgzTest loading a rÝ   éÿÿÿÿzexamples/data/)r‰   Úexpected_colorzdata/r   N)
ÚendswithÚsdl_image_svg_jpeg_save_bugrN   Úsplitr   r    Úload_extendedr   r   r"   )r&   Úfilename_expected_colorr‰   rœ  r'   r   r   r   Útest_load_extended˜  s   
ýú€úz"ImageModuleTest.test_load_extendedc                 C   s0   t  tdƒ¡}tj |¡}|  | d¡d¡ dS )z$works loading using a Path argument.rL   r   r“  N)rØ   rÙ   r   r   r    r   r   r"   )r&   rÚ   r'   r   r   r   Útest_load_pathlibÀ  s   z!ImageModuleTest.test_load_pathlibc           	   
   C   s"  t  d¡}| d¡ ddg}|dd„ |D ƒ7 }i }g d¢|d< g d¢|d< d	d
g}|dd„ |D ƒ7 }|D ]G}d|› }t j ||¡ t|dƒ}|  dt||| ¡  ƒ¡ W d   ƒ n1 s_w   Y  t j 	|¡}|  | 
d¡| 
d¡¡ t |¡ q4|D ]}|  t jt jj|d|› ¡ q~d S )N)r   r   rµ   rº   r   c                 S   rÃ   r   rÄ   ©rÇ   rÎ   r   r   r   rÉ   Ë  rÊ   z6ImageModuleTest.test_save_extended.<locals>.<listcomp>r·   r»   rÂ   rÒ   c                 S   rÃ   r   rÄ   r¤  r   r   r   rÉ   Ò  rÊ   z
temp_file.r   r   r   )r   rl   rm   r    Úsave_extendedr?   r   r   rË   r>   r"   r:   r@   rß   rà   )	r&   r'   Úpassing_formatsr   Úfailing_formatsrÎ   Útemp_file_namer   Úloaded_filer   r   r   Útest_save_extendedÆ  s.   


ýÿÿz"ImageModuleTest.test_save_extendedc                 C   sD   dd l }tdƒD ]}|j |jj|¡}|D ]	}|  ||j¡ qqd S )Nr   r´   )Úpygame.threadsr  ÚthreadsÚtmapr    r>   rŒ  rl   )r&   Úimagesr   r   ÚsurfsrÌ   r   r   r   Úthreads_loadè  s   ÿþzImageModuleTest.threads_loadc                 C   ó   |   t tdƒ¡¡ d S )Nz
data/*.png©r°  Úglobr   rÿ   r   r   r   Útest_load_png_threadsð  ó   z%ImageModuleTest.test_load_png_threadsc                 C   r±  )Nz
data/*.jpgr²  rÿ   r   r   r   Útest_load_jpg_threadsó  rµ  z%ImageModuleTest.test_load_jpg_threadsc                 C   r±  )Nz
data/*.bmpr²  rÿ   r   r   r   Útest_load_bmp_threadsö  rµ  z%ImageModuleTest.test_load_bmp_threadsc                 C   r±  )Nz
data/*.gifr²  rÿ   r   r   r   Útest_load_gif_threadsù  rµ  z%ImageModuleTest.test_load_gif_threadsc                 C   s   t tjdƒ t tjdƒ d S )NÚ	frombytesÚtobytes)Úgetattrr   r    rÿ   r   r   r   Útest_from_to_bytes_existsü  s   z)ImageModuleTest.test_from_to_bytes_existsrX   )0Ú__name__Ú
__module__Ú__qualname__r(   rI   rK   rT   r÷   ÚskipIfrž  r{   r™   r    r­   r²   rÑ   rÕ   r×   rÛ   ræ   rí   rõ   rþ   r   r  r"  r/  rY  r\  rh  rm  rr  rx  r}  r  r„  r‰  r’  r”  r¢  r£  rª  r°  r´  r¶  r·  r¸  r¼  r   r   r   r   r       s^    "þ
=%% '$
*
)Q<<LLLL("r   Ú__main__)r;  r  rO   r:   r8   r÷   r³  rØ   Úpygame.tests.test_utilsr   r   r   r   Úpygame.imageÚpygame.pkgdatarž  r    rÞ   Ú_sdl_image_verÚget_sdl_byteorderÚ
BIG_ENDIANr   ÚTestCaser   r½  Úmainr   r   r   r   Ú<module>   s:    
ÿ         jÿ