o
    OZhØ  ć                   @   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)ŚfZmagic_hexesŚdataŚiŚ	magic_hex© r   śF/var/www/auris/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_pixelZ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.pngrH   zdata/alien1.gifśdata/asprite.bmp)Śfnamer   N)	ŚsubTestr>   r   r   ŚioŚBytesIOr   r   r=   )r%   ŚfilesrK   r   Z	img_bytesZ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   )Zsquare_xZsquare_y©rR   Z
square_lenr   r   Śas_rect   s   ’z,ImageModuleTest.testSaveJPG.<locals>.as_rectŚredr   ŚgreenŚbluer   é   é@   r   z.jpgF©r1   ŚdeleteNc                 S   s$   d}t  | j|@ | j|@ | j|@ ”S )Néü   )r   rQ   ŚrŚgŚb)ŚcŚmaskr   r   r   Śapprox   s    z+ImageModuleTest.testSaveJPG.<locals>.approx)r   rQ   rR   ŚSurfaceŚfillr7   ŚNamedTemporaryFileŚnamer   Śsaver=   ŚmoveZtopleftr   r!   r9   r?   )r%   rQ   ŚszrV   Zsquaresr&   ŚrectŚcolorr   Śtemp_filenameZjpg_surfrd   ŚoffsetZposnr   rU   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   r5   ©r   r   ©r   é   r/   Fr\   N©Śfilename)r   re   ŚSRCALPHAŚset_atr7   rg   rh   r   ri   r   ŚReaderZasRGBA8r   ŚtupleŚnextŚfileŚclosedŚcloser9   r?   ©r%   r@   rA   rB   rC   r&   r   rn   Ś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 )rq   ©rr   r   r   ©r   rs   r   ©r   r   rt   ©ru   rv   rw   ry   r   é   r   r5   rz   r{   r/   Fr\   Nr}   )r   re   r   r7   rg   rh   r   ri   r   r   ŚasRGB8r   r   r   r   r   r   r9   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   r/   Fr\   Nr}   )r	   r   re   r
   r   r7   rg   rh   r   ri   r   r   r   r   ŚlistŚmapr   r   r   r   r9   r?   )r%   Z
set_pixelsŚsizer&   ZcntZpixr   rn   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 )rq   r   r   r   r   ry   r   r   r   r   r|   r/   Fr\   Nr}   )r   ŚdisplayŚinitre   Zset_palette_atr7   rg   rh   r   ri   r   r   r   Śpaletter   r   r   r   r   r   r9   r?   )
r%   r@   rA   rB   rC   r&   r   rn   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   re   rf   r   ri   r>   r   r   Ślowerr=   r!   r9   r?   )r%   Śsr   ŚformatsŚfmtrn   Ś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 )Nr6   r„   r   Śtgar   )r   re   rf   rM   rN   r   ri   Śseekr=   r   r!   )r%   r¼   Z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 ©Nr6   r„   z.tgaFr\   r   )r   re   rf   r7   rg   rh   r   ri   r=   r   r!   r9   r?   )r%   r¼   r   rn   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   re   rf   r7   rg   rh   ŚpathlibŚPathr   ri   r=   r   r!   r9   r?   )r%   r&   r   rn   Ś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  Ś.r0   r2   zr+br   )r   re   rf   r   Śget_sdl_image_versionr7   r8   r»   r9   r:   ŚassertRaisesŚerrorri   rĆ   r   r   Śflushr=   r!   r?   )r%   r¼   r   r½   ZSDL_Im_versionZisAtLeastSDL_image_2_0_2r¾   Ztmp_fileZ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   re   r   rf   Zset_colorkeyŚget_colorkeyr!   r   ri   r=   r9   r?   r   )r%   r¼   Z	colorkey1Śp1rn   rĄ   Z	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   rJ   r   õ
   ä½ å„½.bmp)
Śshutilr   r9   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   rF   zthe path cannot be openedr¤   )r   re   r>   r9   r?   ŚOSErrorŚunittestZSkipTestZassertFalserÉ   Śexistsr   ri   Z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ŚhexlifyZfail)r%   Zstring1Zstring2Zsource_stringŚ
block_sizeZblock_startZ	block_endZblock1Zblock2Z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   )Zsurface_to_modifyrø   Śyrm   Zpremult_colorr   r   r   ŚconvertRGBAtoPremultipliedž  s   üų’zQImageModuleTest.test_to_string__premultiplied.<locals>.convertRGBAtoPremultiplied)é   rš   r   é   rš   é   é   ZRGBA_PREMULTŚRGBAZARGB_PREMULTŚARGBr   r   N)r   re   r   rē   r#   r"   r   rŁ   rķ   r   r   rĪ   Ś
ValueError)r%   rļ   Śtest_surfacerø   rī   r   Zpremultiplied_copyZ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_sizeZget_rectrÓ   Z	get_alphaZ	get_flagsZget_bitsizeZget_bytesizer!   rē   )
r%   Zsurf_aZsurf_brģ   Za_widthZa_heightZsurf_a_get_atZ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   rü   r   r   rż   r   r   r   r   I  r  ŚBr   ŚRŚGŚA)r
   Śarrayr	   rē   r   )Zfmt1Zfmt2Zstr_bufZpos_fmt1Zpos_fmt2Zbyte_bufZ	num_quadsr   Śi4r  r  r  r  r   r   r   ŚconvertG  s   z>ImageModuleTest.test_fromstring__and_tostring.<locals>.convert©r[   rš   r   )Śflagsr   rš   rS   é   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   re   r   rē   r   rś   r   r   Ś
fromstringrł   )r%   r  ZfmtsZfmt_permutationsZfmt_combinationsr  r÷   r   ŚjŚ	intensityŚpairZfmt1_bufZfmt1_convert_bufZtest_convert_two_wayZfmt2_convert_bufZtest_convert_one_wayr¾   Z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 )Nr	  r   r   rš   rS   r  r   r   ŚRGBz6tostring/fromstring functions are not symmetric with "z" format)	r   re   rē   r   r   r   r  rł   rś   )r%   r÷   r   r  r  r¾   Zfmt_bufr  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ę   r6   ©r   r   r   ©r|   r|   r  r  N)
r   r   r    Ś	bytearrayr   Ś
frombufferZset_paletter   r!   rQ   )r%   Zeight_bit_palette_bufferZ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  r  r   r   r¤   rę   r6   r  r   r  r  r  ©r  r   r   r  r   r!   rQ   )r%   Z
rgb_bufferZrgb_surfr   r   r   Śtest_frombuffer_RGBµ  ó   ’5 z#ImageModuleTest.test_frombuffer_RGBc                 C   r   )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  ZBGRr   r   r¤   rę   r6   r  r   r  r  r  r!  )r%   Z
bgr_bufferZbgr_surfr   r   r   Śtest_frombuffer_BGRń  r#  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   r&  r   r   r   r&  r   r   r   r&  r   r   r   éO   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  r6   r&  r  r   r'  r  r  r!  )r%   Zbgra_bufferZ	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  ZRGBXr   r   r¤   rę   r6   r  r   r  r  r  r!  )r%   Zrgbx_bufferZ	rgbx_surfr   r   r   Śtest_frombuffer_RGBXy  r)  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 )Nr%  r  rō   r   r   r¤   rę   r  r6   r&  r  r   r'  r  r  r!  )r%   Zrgba_bufferZ	rgba_surfr   r   r   Śtest_frombuffer_RGBAÅ  r)  z$ImageModuleTest.test_frombuffer_RGBAc              	   C   r+  )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  rõ   r   r   r¤   rę   r  r6   r&  r  r   r'  r  r  r!  )r%   Zargb_bufferZ	argb_surfr   r   r   Śtest_frombuffer_ARGB  r)  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   r/   r0   r2   r   r   Tr3   F)Śappendr7   r8   r9   r:   r   r;   r<   r   r   r=   rĻ   r   Śget_extendedr?   )r%   Z	raw_imagerD   rE   r   rF   r&   Z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/  ZassertIsNonerĶ   r   ŚintŚassertIsInstancer   r	   )r%   Zexpected_lengthŚexpected_typeZ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 memoryrJ   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.bmpr7  )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   rZ   rZ   r   )zcrimson.pnm)r)   rę   é<   r   )zscarlet.webp)r^   é   é5   r   ŚsvgzTest loading a rĢ   é’’’’zexamples/data/)r~   Śexpected_colorzdata/r   N)
ŚendswithŚsdl_image_svg_jpeg_save_bugrL   Śsplitr   r   Śload_extendedr   r   r!   )r%   Z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.rJ   r   r7  N)rĒ   rČ   r   r   r   rD  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“   rG  r   r   r   r¹   Ņ  rŗ   z
temp_file.r   r   r   )r   re   rf   r   Zsave_extendedr>   r   r   r»   r=   r!   r9   r?   rĪ   rĻ   )	r%   r&   Zpassing_formatsr   Zfailing_formatsr¾   Ztemp_file_namer   Z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¤   )Zpygame.threadsrē   ŚthreadsZtmapr   r=   r2  re   )r%   Zimagesr   r   Zsurfsr¼   r   r   r   Śthreads_loadč  s   ’žzImageModuleTest.threads_loadc                 C   ó   |   t td”” d S )Nz
data/*.png©rJ  Śglobr   rä   r   r   r   Śtest_load_png_threadsš  ó   z%ImageModuleTest.test_load_png_threadsc                 C   rK  )Nz
data/*.jpgrL  rä   r   r   r   Śtest_load_jpg_threadsó  rO  z%ImageModuleTest.test_load_jpg_threadsc                 C   rK  )Nz
data/*.bmprL  rä   r   r   r   Śtest_load_bmp_threadsö  rO  z%ImageModuleTest.test_load_bmp_threadsc                 C   rK  )Nz
data/*.gifrL  rä   r   r   r   Śtest_load_gif_threadsł  rO  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_existsrT   )0Ś__name__Ś
__module__Ś__qualname__r'   rG   rI   rP   rß   ZskipIfrB  rp   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-  r0  r6  r8  rE  rF  rH  rJ  rN  rP  rQ  rR  rV  r   r   r   r   r       s^    "ž
=%% '$
*
)Q<<LLLL("r   Ś__main__)r  ré   rM   r9   r7   rß   rM  rĒ   Zpygame.tests.test_utilsr   r   r   r   Zpygame.imageZpygame.pkgdatarB  r   rĶ   Z_sdl_image_verZget_sdl_byteorderZ
BIG_ENDIANr   ZTestCaser   rW  Śmainr   r   r   r   Ś<module>   s:    
’         j’