
    &h                     b   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
Jr  S SKrS SKrS SKrSr\R                   R#                  5       r\b*  \S:*  =(       a    \R&                  " 5       \R(                  :H  rS r " S S\R,                  5      r\S:X  a  \R2                  " 5         gg)	    N)example_pathpngtostringF)   r      c                     U R                  [        U5      5      n[        U5      [        U5      :w  a  g[        U5       H  u  p4XBU   :w  d  M    g   g)z3Tests a given file to see if the magic hex matches.r      )readlen	enumerate)fmagic_hexesdatai	magic_hexs        O/var/www/auris/envauris/lib/python3.13/site-packages/pygame/tests/image_test.py
test_magicr      sL    66#k"#D
4yC$$!+.Q /     c                   @   \ rS rSrS rS rS rS r\R                  " \
S5      S 5       rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS/S jrS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S& r)S' r*S( r+S) r,S* r-S+ r.S, r/S- r0S.r1g)0ImageModuleTest    c                 z   [         R                  R                  S5      nU R                  UR                  S5        [         R
                  R                  U5      nU R                  UR                  S5      S5        U R                  UR                  5       S5        U R                  UR                  5       S5        g)z#see if we can load the pygame icon.pygame_icon.bmprbr   r   r      r      r   N)
pygamepkgdatagetResourceassertEqualmodeimage
load_basicget_at
get_height	get_widthselfr   surfs      r   testLoadIconImageModuleTest.testLoadIcon!   s    NN&&'89&||&&q)V,n=*B/)2.r   c                    SnSnSnSnX-   X4-   /n[         R                  " SS9u  pg[        R                  " US5       n[        R
                  " SSS	S
9n	U	R                  X5        SSS5        [        R                  R                  U5      n
U R                  U
R                  S5      U5        U R                  U
R                  S5      U5        U R                  U
R                  S5      U5        U R                  U
R                  S5      U5        [        US5       n[        R                  R                  U5      n
SSS5        U R                  U
R                  S5      U5        U R                  U
R                  S5      U5        U R                  U
R                  S5      U5        U R                  U
R                  S5      U5        [        R                  " U5        g! , (       d  f       GN= f! , (       d  f       N= f)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+   s              r   testLoadPNGImageModuleTest.testLoadPNG,   s    ))',$5|7ST'//v>YY|T*a

1at,AGGA# +
 ||  (V,m<V,n=V,l;V,m< &$1<<$$Q'D   	V,m<V,n=V,l;V,m<
		&+ +*  s   (G  G2 
G/2
H c                     [        S5      n[        R                  R                  U5      n[	        US5       n[        R                  R                  U5      nSSS5        g! , (       d  f       g= f)zto see if we can load a jpg.data/alien1.jpgr   N)r   r   r$   rD   rE   r)   s      r   testLoadJPGImageModuleTest.testLoadJPGN   sJ    *+||  #!T]a<<$$Q'D ]]s    A  
A.c                 Z   / SQnU H~  nU R                  US9   [        [        U5      S5       nUR                  5       n[        R
                  " U5      n[        R                  R                  U5      nSSS5        SSS5        M     g! , (       d  f       N= f! , (       d  f       M  = f)z*to see if we can load images with BytesIO.)zdata/alien1.pngrR   zdata/alien1.gifdata/asprite.bmp)fnamer   N)	subTestrE   r   r
   ioBytesIOr   r$   rD   )r*   filesrW   r   	img_bytesimg_filer$   s          r   testLoadBytesIOImageModuleTest.testLoadBytesIOV   s~    
 EE*,u-t4 !I!zz)4H"LL--h7E 5 +* 44 +*s#   BAB
5B

BB
B*	z=SDL_image 2.0.5 and older has a big endian bug in jpeg savingc           	        ^^ SSK JnJm  SmST-  ST-  4nUU4S jnU" SS5      U" S5      4U" SS5      U" S5      4U" SS5      U" S	5      4U" SS5      U" S
SS5      4/n[         R                  " USS5      nU H  u  pgUR	                  Xv5        M     [
        R                  " SSS9 nUR                  n	SSS5        [         R                  R                  UW	5        [         R                  R                  U	5      n
S nTS-  nU HN  u  pgUR                  X45      R                  nU R                  U" U
R                  U5      5      U" U5      5        MP     [        R                   " U	5        g! , (       d  f       N= f)zJPG 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                 &   > T" U T-  UT-  TT5      $ N )square_xsquare_yrb   
square_lens     r   as_rect,ImageModuleTest.testSaveJPG.<locals>.as_rect   s#    :%x*'<j* r   redr	   greenbluer      @   r   z.jpgFr8   deleteNc                     Sn[         R                  " U R                  U-  U R                  U-  U R                  U-  5      $ )N   )r   ra   rgb)cmasks     r   approx+ImageModuleTest.testSaveJPG.<locals>.approx   s2    D<<d
ACC$Jd
CCr   )r   ra   rb   Surfacefillr>   NamedTemporaryFilenamer$   saverD   movetopleftr"   r&   r@   rF   )r*   ra   szrj   squaresr+   rectcolorr   temp_filenamejpg_surfrz   offsetposnrb   ri   s                 @@r   testSaveJPGImageModuleTest.testSaveJPGf   sc    	' 
^Q^+	 Q]E%L)Q]E'N+Q]E&M*Q]E#sB/0	
 ~~b!R("KDIIe" # ((uEFFM F 	$.<<$$]3	D q"KD99f-.66DVHOOD$9:F5MJ # 			- ! FEs   +E22
F c                 R   SnSnSnSn[         R                  " S[         R                  S5      nUR                  SU5        UR                  SU5        UR                  S	U5        UR                  S
U5        [        R
                  " SSS9 nUR                  nSSS5        [         R                  R                  UW5         [        R                  " US9nUR                  5       u  ppU R                  [        [        U5      5      U5        U R                  [        [        U5      5      U5        U R                  [        [        U5      5      U5        U R                  [        [        U5      5      U5        UR                  R                   (       d  UR                  R#                  5         A[$        R&                  " U5        g! , (       d  f       GN4= f! WR                  R                   (       d  UR                  R#                  5         A[$        R&                  " U5        f = f)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   r<   r   r   r      r6   Frq   Nfilename)r   r|   SRCALPHAset_atr>   r~   r   r$   r   r   ReaderasRGBA8r"   tuplenextfileclosedcloser@   rF   r*   rG   rH   rI   rJ   r+   r   r   readerwidthheightpixelsmetadatas                r   testSavePNG32ImageModuleTest.testSavePNG32   s    ))',~~ffoor:FM*FN+FL)FM*((uEFFM F 	$.	%ZZ7F.4nn.>+E6 U4<0-@U4<0.AU4<0,?U4<0-@ ;;%%!!#IIm$+ FE$ ;;%%!!#IIm$s   GB7G 
GAH&c                 6   SnSnSnSn[         R                  " SSS5      nUR                  SU5        UR                  S	U5        UR                  S
U5        UR                  SU5        [        R                  " SSS9 nUR
                  nSSS5        [         R                  R                  UW5         [        R                  " US9nUR                  5       u  ppU R                  [        [        U5      5      U5        U R                  [        [        U5      5      U5        U R                  [        [        U5      5      U5        U R                  [        [        U5      5      U5        UR                  R                  (       d  UR                  R!                  5         A["        R$                  " U5        g! , (       d  f       GN4= f! WR                  R                  (       d  UR                  R!                  5         A["        R$                  " U5        f = f)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      r   r<   r   r   r6   Frq   Nr   )r   r|   r   r>   r~   r   r$   r   r   r   asRGB8r"   r   r   r   r   r   r@   rF   r   s                r   testSavePNG24ImageModuleTest.testSavePNG24   s    $$"'~~fa,FM*FN+FL)FM*((uEFFM F 	$.	%ZZ7F.4mmo+E6 U4<0-@U4<0.AU4<0,?U4<0-@ ;;%%!!#IIm$+ FE$ ;;%%!!#IIm$s   >F84B7G
 8
G
AHc                 X   / SQnS[        U5      4n[        R                  " USS9n[        U5       H  u  pEUR	                  SU4U5        M     [
        R                  " SSS9 nUR                  nS	S	S	5        [        R                  R                  UW5         [        R                  " US
9nUR                  5       u  ppU R                  X)U
45        U R                  [        [        [         U5      5      U5        UR"                  R$                  (       d  UR"                  R'                  5         A[(        R*                  " U5        g	! , (       d  f       N= f! WR"                  R$                  (       d  UR"                  R'                  5         A[(        R*                  " U5        f = f)z)see if we can save an 8 bit png correctly))r   r   r   )r   r   r   )r   r   r   )      r   r	      depthr   r6   Frq   Nr   )r   r   r|   r   r   r>   r~   r   r$   r   r   r   r   r"   listmapr   r   r   r   r@   rF   )r*   
set_pixelssizer+   cntpixr   r   r   r   r   r   _s                r   testSavePNG8ImageModuleTest.testSavePNG8   s>    N
3z?#~~d!,!*-HCKKC#& . ((uEFFM F 	$.	%ZZ7F'-}}$E6T6?3 T#eV"45zB ;;%%!!#IIm$) FE" ;;%%!!#IIm$s   $E
A#E 

EAF)c                    [         R                  R                  5         SnSnSnSn[         R                  " SSS5      nUR	                  SU5        UR	                  SU5        UR	                  S	U5        UR	                  S
U5        [
        R                  " SSS9 nUR                  nSSS5        [         R                  R                  UW5         [        R                  " US9nUR                  5         UR                  5       n	U R                  [        [!        U	5      5      U5        U R                  [        [!        U	5      5      U5        U R                  [        [!        U	5      5      U5        U R                  [        [!        U	5      5      U5        UR"                  R$                  (       d  UR"                  R'                  5         A[(        R*                  " U5        g! , (       d  f       GNA= f! WR"                  R$                  (       d  UR"                  R'                  5         A[(        R*                  " U5        f = f)r   r   r   r   r   r   r   r   r	   r   r   r6   Frq   Nr   )r   displayinitr|   set_palette_atr>   r~   r   r$   r   r   r   r
   paletter"   r   r   r   r   r   r@   rF   )
r*   rG   rH   rI   rJ   r+   r   r   r   r   s
             r   testSavePaletteAsPNG8%ImageModuleTest.testSavePaletteAsPNG8  s    	#$"'~~fa+A}-A~.A|,A}-((uEFFM F 	$.	%ZZ7FKKMnn&G U4=1=AU4=1>BU4=1<@U4=1=A ;;%%!!#IIm$+ FE$ ;;%%!!#IIm$s   G#CG5 #
G25AIc                    [         R                  " S5      nUR                  S5        0 n/ SQUS'   / SQUS'   SS/US	'   / S
QnX3 Vs/ s H  oDR                  5       PM     sn-   nU H  n SU 3n[         R                  R                  X5        [        US5       nU R                  SU4[        XrUR                  5          5      U45        S S S 5        [         R                  R                  U5      nU R                  UR                  S5      UR                  S5      5        [        R                  " U5        M     g s  snf ! , (       d  f       N}= f! [        R                  " W5        f = f)N
   r      r   r   r      r      jpg   P   N   G   r   B   M   bmp)r   r   r   ztmpimg.r   r	   r   )r   r|   r}   upperr$   r   rE   r"   r   lowerrD   r&   r@   rF   )	r*   sr   formatsxfmtr   handles2s	            r   	test_saveImageModuleTest.test_save8  s7   NN8$	|	3	%3	% $<	%'81WWY88C)")#!!!3 -.& $$C:f		6L#Ms"S / \\&&}5   6!2AHHV4DE 		-(+  9 /. 		-(s+   D>+0E1EAE
E	EE,c                 |   [         R                  " S5      nUR                  S5        [        R                  " 5       n[         R
                  R                  X5        UR                  S5        [         R
                  R                  US5      nU R                  UR                  S5      UR                  S5      5        g )Nr=   r   r   tgar   )r   r|   r}   rY   rZ   r$   r   seekrD   r"   r&   )r*   r   bytes_streamr   s       r   test_save_to_fileobject'ImageModuleTest.test_save_to_fileobject\  s    NN6"	|zz|!*!\\|U3&)299V+<=r   c                 
   [         R                  " S5      nUR                  S5        [        R                  " SSS9 nUR
                  nS S S 5         [         R                  R                  UW5        [         R                  R                  U5      nU R                  UR                  S5      UR                  S5      5        [        R                  " U5        g ! , (       d  f       N= f! [        R                  " W5        f = fNr=   r   z.tgaFrq   r   )r   r|   r}   r>   r~   r   r$   r   rD   r"   r&   r@   rF   )r*   r   r   r   r   s        r   test_save_tgaImageModuleTest.test_save_tgaf  s    NN6"	|((uEFFM F	%LLa/""=1BRYYv.0@A IIm$ FE IIm$s   CA/C* 
C'*Dc                 4   [         R                  " S5      nUR                  S5        [        R                  " SSS9 nUR
                  nS S S 5        [        R                  " W5      n [         R                  R                  X5        [         R                  R                  U5      nU R                  UR                  S5      UR                  S5      5        [        R                  " U5        g ! , (       d  f       N= f! [        R                  " U5        f = fr   )r   r|   r}   r>   r~   r   pathlibPathr$   r   rD   r"   r&   r@   rF   )r*   r+   r   r   pathr   s         r   test_save_pathlib!ImageModuleTest.test_save_pathlibt  s    ~~f%		,((uEFFM F ||M*	%LLd)""4(BRYYv.F0CDIIm$ FE IIm$s   C.)A.C? .
C<?Dc                 L   [         R                  " S5      nUR                  S5        0 n/ SQUS'   / SQUS'   SS/US	'   / S
QnX3 Vs/ s H  oDR                  5       PM     sn-   n[         R                  R                  5       nUS L=(       a    US   S-  US   S-  -   US   -   S:  nU GH  n[        R                  " SU 3S9u  pU(       d~  UR                  5       S:X  aj  [        R                  " US5       n
U R                  [         R                  5         [         R                  R                  XU	5        S S S 5        S S S 5        GO[        R                  " US5       n
[         R                  R                  XU	5        UR                  5       U;   aA  U
R                  S5        U R                  SU4[!        XUR                  5          5      U45        U
R#                  5         U
R                  S5        [         R                  R%                  X5      nU R                  UR'                  S5      UR'                  S5      5        S S S 5        [        R(                  " U	5        GM     g s  snf ! , (       d  f       GN?= f! , (       d  f       NA= f! , (       d  f       NR= f)Nr   r   r   r   r   r   r   r   r   )r   r   r   r   r   i'  r	   d   r   i"N  .r7   r9   zr+br   )r   r|   r}   r   r$   get_sdl_image_versionr>   r?   r   r@   rA   assertRaiseserrorr   r   r"   r   flushrD   r&   rF   )r*   r   r   r   r   SDL_Im_versionisAtLeastSDL_image_2_0_2r   tmp_filetmp_filenamer   r   s               r   ,test_save__to_fileobject_w_namehint_argument<ImageModuleTest.test_save__to_fileobject_w_namehint_argument  s   NN8$	|	3	%3	% $<	%.81WWY88;;= %3$$> $1%q(9C(??.QRBSSE  C%-%5%5qY%G"H+		u0DYYx.&**6<<8))!\B 9 /. YYx/6LL%%a>yy{i/ A((Hz&CIIK:P'QSV&W LLNKKN**6@B$$RYYv%68HI 0 IIl#-  9 98 /. 0/s7   I-9 J!I2:J#C&J2
J<J
J	
J#	c                 <   [         R                  " S[         R                  S5      nUR                  S5        UR	                  S5        UR                  5       nUR                  S5      nSn [         R                  R                  X5        [         R                  R                  U5      n[        R                  " U5        UR                  5       nU R                  X&5        U R                  X5R                  S5      5        g! [        R                  " U5        f = f)z3make sure the color key is not changed when saving.r   r   r   r   r   r   r   z
tmpimg.pngN)r   r|   r   r}   set_colorkeyget_colorkeyr&   r$   r   rD   r@   rF   r"   )r*   r   	colorkey1p1r   r   	colorkey2s          r   test_save_colorkey"ImageModuleTest.test_save_colorkey  s    NN8V__b9	|	y!NN$	XXf$	%LLa/""=1BIIm$NN$	.YYv./ IIm$s   ->D Dc                 8   SS K n[        S5      n[        R                  R	                  [        S5      S5      nUR                  X#5         [        R                  R                  U5      n[        R                  " U5        g ! [        R                  " U5        f = f)Nr   rV   r   
   你好.bmp)
shutilr   r@   r   joincopyr   r$   rD   rF   )r*   r  origtempims        r   test_load_unicode_path&ImageModuleTest.test_load_unicode_path  se    ./ww||L0,?D	""4(BIIdOBIIdOs   B Bc                    [         R                  " SSS5      n [        US5       n S S S 5        [        R                  " U5        U R                  [        R                  R                  U5      5         [         R                  R                  X!5        U R                  [        R                  R                  U5      S5         [        R                  " U5        g ! , (       d  f       N= f! [
         a    [        R                  " S5      ef = f! [
         a     g f = f!  [        R                  " U5        f ! [
         a     f f = f= f)Nr   r   r   rN   zthe path cannot be openedr   )r   r|   rE   r@   rF   OSErrorunittestSkipTestassertFalser   existsr$   r   assertGreatergetsize)r*   	temp_filer  r   s       r   _unicode_saveImageModuleTest._unicode_save  s    ^^Ha,	Ai% &IIi  		23	LLb,rwwy92>		)$ &%  	A##$?@@	A  		)$ sd   C, CC, 5AD  D 
C)%C, ,!D
DD E	"D98E	9
EE	EE	c                 &    U R                  S5        g)z(save unicode object with non-ASCII charsr  N)r   r*   s    r   test_save_unicode_path&ImageModuleTest.test_save_unicode_path  s    <(r   c           
         U R                  [        U5      [        U5      5        SnX:w  a  [        S[        U5      U5       H  n[        XT-   [        U5      5      nXU nX%U nXx:w  d  M)  X5U n	SUU[        U5      [        R
                  " U5      [        R
                  " U5      [        R
                  " U	5      4-  n
U R                  U
5        M     g g )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msgs              r   assertPremultipliedAreEqual+ImageModuleTest.assertPremultipliedAreEqual  s    Ws7|4
$QGjA 8#g,G	 Y7 Y7##0Y#GLS'%L$,,V4$,,V4$,,\:  IIcN#  B r   c           	         S n[         R                  " S[         R                  S5      n[        UR	                  5       5       Ha  n[        UR                  5       5       HA  nX4UR	                  5       -  -   nUR                  X44US-  S-  US-  S-  US-  S-  U45        MC     Mc     UR                  5       nU" U5        U R                  [         R                  R                  US5      [         R                  R                  US	5      [         R                  R                  US	5      5        U R                  [         R                  R                  US
5      [         R                  R                  US5      [         R                  R                  US5      5        [         R                  " SSS5      nU R                  [        [         R                  R                  US5        g)zItest to make sure we can export a surface to a premultiplied alpha stringc                 (   [        U R                  5       5       Hu  n[        U R                  5       5       HU  nU R                  X45      nUS   US   -  S-  US   US   -  S-  US   US   -  S-  US   4nU R	                  X4U5        MW     Mw     g )Nr   r   r   r	   r   )r(  r(   r'   r&   r   )surface_to_modifyr   yr   premult_colors        r   convertRGBAtoPremultipliedQImageModuleTest.test_to_string__premultiplied.<locals>.convertRGBAtoPremultiplied  s    ,66890;;=>A-44aV<Ea58+c1a58+c1a58+c1a	%M &,,aV]C ? :r   )   r@  r      r@        RGBA_PREMULTRGBAARGB_PREMULTARGBr   r   N)r   r|   r   r(  r(   r'   r   r  r7  r$   r   r   
ValueError)r*   r>  test_surfacer   r<  r   premultiplied_copyno_alpha_surfaces           r   test_to_string__premultiplied-ImageModuleTest.test_to_string__premultiplied  s   
	D ~~j&//2F|--/0A<2245L22444##Fa!es]QVsNQVsNAN 6 1 *..0"#56((LL!!,?LL!!"4f=LL!!,7	

 	((LL!!,?LL!!"4f=LL!!,7	
 ">>*a<--/?	
r   Nc           
         UR                  5       UR                  5       pTU R                  XBR                  5       U5        U R                  XRR                  5       U5        U R                  UR                  5       UR                  5       U5        U R                  UR	                  5       UR	                  5       U5        U R                  UR                  5       UR                  5       U5        U R                  UR                  5       UR                  5       U5        U R                  UR                  5       UR                  5       U5        U R                  UR                  5       UR                  5       U5        U R                  UR                  5       UR                  5       U5        UR                  nUR                  n[        U5       H;  n[        U5       H)  n	U R                  U" X45      U" X45      SX9U4-  5        M+     M=     g )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_br6  a_widtha_heightsurf_a_get_atsurf_b_get_atr<  r   s
             r   _assertSurfaceEqual#ImageModuleTest._assertSurfaceEqual$  s   ",,.0A0A0C 	"2"2"4c:#4#4#6<*FOO,=sC*FOO,=sC,,.0C0C0EsK))+V-=-=-?E))+V-=-=-?E++-v/A/A/CSI,,.0C0C0EsK xA7^  !1&)!1&)(CA;6 $ !r   c           
         SSK nSnUR                  US5      nUR                  US5      nS n[        R                  " S[        R
                  SS9n[        S	5       H  n[        S
5       Ho  nUS
-  S-   n	UR                  US-   U4XXw45        UR                  US
-   U4XyXw45        UR                  US-   U4XwX45        UR                  US-   U4XwXy45        Mq     M     U R                  XfS5        U H  n
[        R                  R                  XjS   5      nU" U
S   U
S   U" U
S   U
S   U5      5      n[        R                  R                  XR                  5       U
S   5      nU R                  UUSU
S    SU
S    S35        M     U H  n
[        R                  R                  XjS   5      nU" U
S   U
S   U5      n[        R                  R                  XR                  5       U
S   5      nU R                  UUSU
S    SU
S    S35        M     U Hi  n[        R                  R                  UU5      n[        R                  R                  UUR                  5       U5      nU R                  UUSU S35        Mk     g)z9Ensure methods tostring() and fromstring() are symmetric.r   N)rE  rG  BGRAr   c                    [        U 5       VVs0 s H  u  p4XC_M	     nnn[        U5       VVs0 s H  u  p4XC_M	     nnn[        R                  " SU5      n[        U5      S-  n[        U5       HT  n	U	S-  n
XzUS   -      nXzUS   -      nXzUS   -      nXzUS   -      nXXS   -   '   XXS   -   '   XXS   -   '   XXS   -   '   MV     [	        U5      $ s  snnf s  snnf )NBr   RGA)r   arrayr   r(  r   )fmt1fmt2str_bufvkpos_fmt1pos_fmt2byte_buf	num_quadsr   i4ra  rb  r`  rc  s                  r   convert>ImageModuleTest.test_fromstring__and_tostring.<locals>.convertG  s   )249H9)249H9{{30HH*I9%U(3-/0(3-/0(3-/0(3-/0/0sm+,/0sm+,/0sm+,/0sm+, & H%% :9s
   CCrp   r@  r   )flagsr   r@  rc      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   r|   r   r(  r   r[  r$   r   
fromstringrO  )r*   rt  fmtsfmt_permutationsfmt_combinationsro  rI  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_strings                      r   test_fromstring__and_tostring-ImageModuleTest.test_fromstring__and_tostring>  s    	'$11$:$11$:	&$ ~~ivbQsA2YFRK	##QUAJq0DE##QVQK!1EF##QVQK!	1EF##QVQK!1EF   	  (I	
 %D||,,\7CH&Qa'$q'47H"E  $*<<#:#: "7"7"947$  $$$d1gYd47)3MN % %D||,,\7CH&tAwQB#)<<#:#: "7"7"947$  $$$d1gYd47)7; % C||,,\3?H&,ll&=&=,//13'# $$'##&%x1 r   c           	         [         R                  " SSS9n[        S5       H  n[        S5       Ho  nUS-  S-   nUR                  US-   U4XBX"45        UR                  US-   U4X$X"45        UR                  US-   U4X"XB45        UR                  US-   U4X"X$45        Mq     M     S	n[         R                  R                  X5      n[         R                  R                  XaR                  5       U5      nU R                  UUS
U S35        g )Nrq  r   r   r@  rc   rs  r   r   RGBz6tostring/fromstring functions are not symmetric with "z" format)	r   r|   r(  r   r$   r   rw  rO  r[  )r*   rI  r   r{  r|  r   fmt_bufr  s           r   test_tostring_depth_24&ImageModuleTest.test_tostring_depth_24  s   ~~ir:sA2YFRK	##QUAJq0DE##QVQK!1EF##QVQK!	1EF##QVQK!1EF   ,,'':"(,,"9"9**,c#
 	  #DSER	
r   c                 z   [         R                  R                  5         [        / SQ5      n[         R                  R                  USS5      nUR                  / SQ5        U R                  UR                  S5      [         R                  " SSS5      5        U R                  UR                  S	5      [         R                  " SSS5      5        U R                  UR                  S
5      [         R                  " SSS5      5        U R                  UR                  S5      [         R                  " SSS5      5        g)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'  r=   r   r   r   r   r   r  r  N)
r   r   r   	bytearrayr$   
frombufferset_paletter"   r&   ra   )r*   eight_bit_palette_buffereight_bit_surfs      r   test_frombuffer_8bit$ImageModuleTest.test_frombuffer_8bit  s    #,<$
   001I6SVW""F	
 	..v6S"b8QR..v6S#s8ST..v6Q18MN..v6Rb8QRr   c                    [        / SQ5      n[        R                  R                  USS5      nU R	                  UR                  S5      [        R                  " SSS5      5        U R	                  UR                  S5      [        R                  " SSS5      5        U R	                  UR                  S	5      [        R                  " S
S
S
5      5        U R	                  UR                  S5      [        R                  " SSS5      5        g )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'  r=   r  r   r  r  r  r  r   r$   r  r"   r&   ra   )r*   
rgb_bufferrgb_surfs      r   test_frombuffer_RGB#ImageModuleTest.test_frombuffer_RGB      13

j <<**:vuE0&,,sB2KL0&,,sC2MN0&,,q!Q2GH0&,,r32KLr   c                    [        / SQ5      n[        R                  R                  USS5      nU R	                  UR                  S5      [        R                  " SSS5      5        U R	                  UR                  S5      [        R                  " SSS5      5        U R	                  UR                  S	5      [        R                  " S
S
S
5      5        U R	                  UR                  S5      [        R                  " SSS5      5        g )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'  r=   r  r   r  r  r  r  )r*   
bgr_bufferbgr_surfs      r   test_frombuffer_BGR#ImageModuleTest.test_frombuffer_BGR  r  r   c           	          [        / SQ5      n[        R                  R                  USS5      nU R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S	5      [        R                  " SSSS
5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        g )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  r=   r  r  r   r  r  r  r  )r*   bgra_buffer	bgra_surfs      r   test_frombuffer_BGRA$ImageModuleTest.test_frombuffer_BGRA-  s    AC
J LL++KH	))&16<<BS3QR))&16<<S#s3ST))&16<<1a3LM))&16<<CS3QRr   c           	          [        / SQ5      n[        R                  R                  USS5      nU R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S	5      [        R                  " S
S
S
S5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        g )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'  r=   r  r   r  r  r  r  )r*   rgbx_buffer	rgbx_surfs      r   test_frombuffer_RGBX$ImageModuleTest.test_frombuffer_RGBXy  s    AC
J LL++KH	))&16<<RS3QR))&16<<S#s3ST))&16<<1a3MN))&16<<CS3QRr   c           	          [        / SQ5      n[        R                  R                  USS5      nU R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S	5      [        R                  " SSSS
5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        g )Nr  r  rE  r   r   r   r'  r  r=   r  r  r   r  r  r  r  )r*   rgba_buffer	rgba_surfs      r   test_frombuffer_RGBA$ImageModuleTest.test_frombuffer_RGBA      AC
J LL++KH	))&16<<RS3QR))&16<<S#s3ST))&16<<1a3LM))&16<<CS3QRr   c           	          [        / SQ5      n[        R                  R                  USS5      nU R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S	5      [        R                  " SSSS
5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        U R	                  UR                  S5      [        R                  " SSSS5      5        g )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  rG  r   r   r   r'  r  r=   r  r  r   r  r  r  r  )r*   argb_buffer	argb_surfs      r   test_frombuffer_ARGB$ImageModuleTest.test_frombuffer_ARGB  r  r   c                 
   / nUR                  S5        [        R                  " SS9u  p#[        R                  " US5       n[
        R                  " SSSS9nUR                  XA5        S S S 5         [        R                  R                  U5      nSnU R                  [        R                  R                  5       U5        [        R                  " U5        g ! , (       d  f       Nu= f! [        R                   a    S	n Nnf = f)
N)r  r  r  r   r   r   r   r   r6   r7   r9   r   r	   Tr:   F)appendr>   r?   r@   rA   r   rB   rC   r   r$   rD   r   r"   get_extendedrF   )r*   	raw_imagerL   rM   r   rN   r+   loadeds           r   test_get_extended!ImageModuleTest.test_get_extended]  s    	AB'//v>YY|T*d

1at,AGGD$ +	<<$$V,DF 	224f=
		& +* || 	F	s   (C2!C) 
C&)DDc                    [         R                  R                  5       (       d.  U R                  [         R                  R	                  5       5        g Sn[
        n[        n[         R                  R	                  5       nU R                  XB5        U R                  [        U5      U5        U H  nU R                  XS5        M     g )Nr   )
r   r$   r  assertIsNoner   r   intassertIsInstancer"   r   )r*   expected_lengthexpected_typeexpected_item_typeversionitems         r   test_get_sdl_image_version*ImageModuleTest.test_get_sdl_image_versionq  s     ||((**fll@@BCO!M!$ll88:G!!'9S\?;%%d?  r   c                 ,   [         R                  R                  [        S5      5      nU R	                  UR                  S5      S5        [         R                  R                  S5      nU R	                  UR                  S5        [         R                  R                  U5      nU R	                  UR                  S5      S5        U R	                  UR                  5       S5        U R	                  UR                  5       S5        UR                  5         g)	zGto see if we can load bmp from files and/or file-like objects in memoryrV   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+   s       r   test_load_basicImageModuleTest.test_load_basic  s     LL##L1C$DE&)+?@ NN&&'89&||&&q)V,n=*B/)2.		r   c                    / SQnU H  u  p#UR                  S5      (       a  [        (       a  M(  U R                  SUR                  S5      S    3SU-   US9   [        R
                  R                  [        SU-   5      5      nU R                  UR                  S	5      U5        S
S
S
5        M     g
! , (       d  f       M  = f)a  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)r3   r3   r3   r   )zteal.svg)r   ro   ro   r   )zcrimson.pnm)r0   r'  <   r   )zscarlet.webp)rt      5   r   svgzTest loading a r   zexamples/data/)r   expected_colorzdata/r   N)
endswithsdl_image_svg_jpeg_save_bugrX   splitr   r$   load_extendedr   r"   r&   )r*   filename_expected_colorr   r  r+   s        r   test_load_extended"ImageModuleTest.test_load_extended  s    #
  )@$H  '',G,G !(.."5b"9!:;)H4-  
 ||11,w?Q2RS  V!4nE  )@ s   AB22
C	c                     [         R                  " [        S5      5      n[        R                  R                  U5      nU R                  UR                  S5      S5        g)z$works loading using a Path argument.rV   r   r  N)r   r   r   r   r$   r  r"   r&   )r*   r   r+   s      r   test_load_pathlib!ImageModuleTest.test_load_pathlib  sD    ||L);<=||))$/V,.BCr   c                 r   [         R                  " S5      nUR                  S5        SS/nX" Vs/ s H  o3R                  5       PM     sn-  n0 n/ SQUS'   / SQUS'   SS/nXU Vs/ s H  o3R                  5       PM     sn-  nU H  nS	U 3n[         R                  R                  X5        [        US
5       nU R                  S[        XtUR                  5          5      5        S S S 5        [         R                  R                  U5      nU R                  UR                  S5      UR                  S5      5        [        R                  " U5        M     U H@  nU R                  [         R                  [         R                  R
                  US	U 35        MB     g s  snf s  snf ! , (       d  f       N= f)N)r   r   r   r   r   r   r   r   r   z
temp_file.r   r	   r   )r   r|   r}   r   r$   save_extendedrE   r"   r   r   rD   r&   r@   rF   r   r   )	r*   r+   passing_formatsr   r   failing_formatstemp_file_namer   loaded_files	            r   test_save_extended"ImageModuleTest.test_save_extended  sq   ~~f%		, %.?C?CIIK?CC	3	%3	% %.?C?CIIK?CC #C)#/NLL&&t<nd+t   Z		6L%MO ,
 !,,++N;K[//7V9LMIIn% # #Cfll88$*SE@R #1 D D ,+s   F&F#9-F((
F6	c                     SS K n[        S5       HW  nUR                  R                  UR                  R
                  U5      nU H  nU R                  XRR                  5        M      MY     g )Nr   r   )pygame.threadsr(  threadstmapr$   rD   r  r|   )r*   imagesr   r   surfsr   s         r   threads_loadImageModuleTest.threads_load  sO    rANN''(9(96BE%%a8  r   c                 `    U R                  [        R                  " [        S5      5      5        g )Nz
data/*.pngr  globr   r#  s    r   test_load_png_threads%ImageModuleTest.test_load_png_threads      $))L$>?@r   c                 `    U R                  [        R                  " [        S5      5      5        g )Nz
data/*.jpgr  r#  s    r   test_load_jpg_threads%ImageModuleTest.test_load_jpg_threads  r  r   c                 `    U R                  [        R                  " [        S5      5      5        g )Nz
data/*.bmpr  r#  s    r   test_load_bmp_threads%ImageModuleTest.test_load_bmp_threads  r  r   c                 `    U R                  [        R                  " [        S5      5      5        g )Nz
data/*.gifr  r#  s    r   test_load_gif_threads%ImageModuleTest.test_load_gif_threads  r  r   c                 l    [        [        R                  S5        [        [        R                  S5        g )N	frombytestobytes)getattrr   r$   r#  s    r   test_from_to_bytes_exists)ImageModuleTest.test_from_to_bytes_exists  s    k*i(r   rf   re   )2__name__
__module____qualname____firstlineno__r,   rO   rS   r^   r  skipIfr  r   r   r   r   r   r   r   r   r   r  r  r  r   r$  r7  rL  r[  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  __static_attributes__rf   r   r   r   r       s   	/ D(8  __#G;!	;!z#%J#%J%@%%N")H>%%($T0(	*)#.&
R4Ob
,S :Mx:MxJSXJSXJSXJSX(@$*&FPD D9AAAA)r   r   __main__)rd  r*  rY   r@   r>   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  mainrf   r   r   <module>r     s      	 	     ? ? + +# 335)#W(@(@(BfFWFW(W  
^)h'' ^)B' zMMO r   