o
    OZŽh±W  ã                   @   s†   d dl Z d dlZd dlZde ¡ kZzd dlmZ W n	 ey#   Y nw d dlZd a	dd„ Z
G dd„ dejƒZedkrAe ¡  dS dS )	é    NÚPyPy)Úarrinterc                   C   s   t d7 a d S )Né   )Ú
quit_count© r   r   úE/var/www/auris/lib/python3.10/site-packages/pygame/tests/base_test.pyÚ	quit_hook   ó   r   c                   @   s@  e Zd Zdd„ Zdd„ Zdd„ ZG dd„ dƒZd	d
„ Zdd„ Zdd„ Z	e
jr,ddlmZ dd„ Ze e
j d¡e ed¡dd„ ƒƒZe e
j d¡dd„ ƒZe e
j d¡e ed¡dd„ ƒƒZe epge
j 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/d0„ Zd1d2„ Zd3d4„ Z d5d6„ Z!d7S )8ÚBaseModuleTestc                 C   s   t  ¡  d S ©N)ÚpygameÚquit©Úselfr   r   r   ÚtearDown   r	   zBaseModuleTest.tearDownc                 C   s$   t  ¡ }t jt jf}|  ||¡ dS )z"Ensure the SDL byte order is validN)r   Úget_sdl_byteorderÚ
LIL_ENDIANZ
BIG_ENDIANZassertIn)r   Z
byte_orderZexpected_optionsr   r   r   Útest_get_sdl_byteorder   s   z%BaseModuleTest.test_get_sdl_byteorderc                 C   s   |   tt ¡ ƒd¡ dS )zEnsure the SDL version is validé   N)ÚassertEqualÚlenr   Zget_sdl_versionr   r   r   r   Útest_get_sdl_version#   s   z#BaseModuleTest.test_get_sdl_versionc                   @   s   e Zd Zdd„ ZdS )zBaseModuleTest.ExporterBasec                 C   sä   dd l }t|ƒ}|| _t|ƒ| _d}|D ]}||9 }q|| | _| | j¡| _|| _|g| }t	|d ddƒD ]}	||	 ||	  ||	d < q7t|ƒ| _
| | j¡df| _| jdkr\d}
n
tjdkrdd}
nd}
|
| t| jƒ | _d S )	Nr   r   éÿÿÿÿFú|Úbigú>ú<)Úctypesr   ÚndimÚtupleÚshapeÚsizeÚcreate_string_bufferÚparentÚitemsizeÚrangeÚstridesÚ	addressofÚdataÚsysÚ	byteorderÚstrÚtypestr)r   r    Útypecharr$   r   r   Z	array_lenÚdr&   Úir*   r   r   r   Ú__init__(   s*   






z$BaseModuleTest.ExporterBase.__init__N)Ú__name__Ú
__module__Ú__qualname__r0   r   r   r   r   ÚExporterBase'   s    r4   c                 C   sb   |   |j|j¡ |j}|   |d |j¡ |   |d |j¡ |   |d |j¡ |   |d |j¡ d S )Nr,   r    r&   r(   )r   Úlengthr!   Ú__array_interface__r,   r    r&   r(   )r   ÚproxyÚobjZifacer   r   r   Ú
assertSameA   s   zBaseModuleTest.assertSamec                    sr  ddl m} G dd„ d| jƒ‰ g d¢}tdt|ƒƒD ]}ˆ |d|… ddƒ}||ƒ}|  ||¡ qd}|d|… }d	D ]}d
D ]}ˆ |||ƒ}||ƒ}|  ||¡ q?q;dD ]}ˆ |d|ƒ}||ƒ}|  ||¡ qUdd l‰dd l}	G dd„ dtƒ‰G dd„ dt	ƒ‰G ‡ ‡‡‡fdd„dˆ ƒ}
|
dddƒ}||ƒ}|  
ˆ|j¡ |j}|  | ¡ ¡ | ¡  |	 ¡  |  | ¡ ¡ d S )Nr   ©ÚBufferProxyc                   @   s(   e Zd Zdd„ ZeeƒZedd„ ƒZdS )zHBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporterc                 S   s   d| j | j| j| jdœS )Nr   )Úversionr,   r    r&   r(   ©r,   r    r&   r(   r   r   r   r   Úget__array_interface__M   s   ûz_BaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporter.get__array_interface__c                 S   ó   d S r   r   r   r   r   r   Ú<lambda>X   ó    zQBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporter.<lambda>N)r1   r2   r3   r>   Úpropertyr6   Ú__array_struct__r   r   r   r   ÚExporterL   s    	rD   ©é   r   é   é   é   r   r/   rF   ©r/   Úu©r   rF   é   é   ©rM   rN   Úfc                   @   s   e Zd ZdS )zKBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.NoDictErrorN)r1   r2   r3   r   r   r   r   ÚNoDictErrorx   s    rQ   c                   @   s   e Zd ZdZdS )zFBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.WRDictzWeak referenceable dictN)r1   r2   r3   Ú__doc__r   r   r   r   ÚWRDict{   s    rS   c                       s8   e Zd Z‡ ‡‡fdd„ZeeƒZdd„ Z‡fdd„ZdS )zIBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporter2c                    s$   ˆˆ   | ¡ƒ| _ˆ | j¡| _| jS r   )r>   r.   ÚrefÚdict_refr   )rD   rS   Úweakrefr   r   Úget__array_interface__2   s   zaBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporter2.get__array_interface__2c                 S   s
   d | _ d S r   )r.   r   r   r   r   Ú	free_dictˆ   s   
zSBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporter2.free_dictc                    s&   z|   ¡ d uW S  ty   ˆ dƒ‚w )Nz__array_interface__ is unread)rU   ÚAttributeErrorr   )rQ   r   r   Úis_dict_alive‹   s
   ÿzWBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporter2.is_dict_aliveN)r1   r2   r3   rW   rB   r6   rX   rZ   r   ©rD   rQ   rS   rV   r   r   Ú	Exporter2€   s
    r\   )rF   rM   rK   rM   )Úpygame.bufferproxyr;   r4   r%   r   r9   rV   ÚgcÚRuntimeErrorÚdictÚassertRaisesrZ   r5   Ú
assertTruerX   ZcollectÚassertFalse)r   r;   Ú_shaper   ÚoÚvr    r-   r$   r^   r\   r5   r   r[   r   Ú'test_PgObject_GetBuffer_array_interfaceI   s>   ýz6BaseModuleTest.test_PgObject_GetBuffer_array_interfacec           
         s  ddl m‰  G ‡ fdd„d| jƒ}g d¢}tdt|ƒƒD ]}||d|… ddƒ}ˆ |ƒ}|  ||¡ qd}|d|… }d	D ]}d
D ]}||||ƒ}ˆ |ƒ}|  ||¡ qAq=dD ]}||d|ƒ}ˆ |ƒ}|  ||¡ qWzddlm}	 W n
 ty|   Y d S w ||||ƒ}|  	|	|j
ƒd¡ d S )Nr   r:   c                       s:   e Zd Z‡‡ fdd„Zdd„ ZeeƒZedd„ ƒZ‡  ZS )z:BaseModuleTest.test_GetView_array_struct.<locals>.Exporterc                    s    t ƒ  |||¡ ˆ | jƒ| _d S r   )Úsuperr0   Ú__dict__Úview)r   r    r-   r$   )r;   Ú	__class__r   r   r0   ž   s   zCBaseModuleTest.test_GetView_array_struct.<locals>.Exporter.__init__c                 S   s   | j jS r   )rj   rC   r   r   r   r   Úget__array_struct__¢   s   zNBaseModuleTest.test_GetView_array_struct.<locals>.Exporter.get__array_struct__c                 S   r?   r   r   r   r   r   r   r@   §   rA   zCBaseModuleTest.test_GetView_array_struct.<locals>.Exporter.<lambda>)	r1   r2   r3   r0   rl   rB   rC   r6   Ú__classcell__r   r:   )rk   r   rD      s
    rD   rE   r   r/   rF   rJ   rL   rO   rP   )Úgetrefcount)r]   r;   r4   r%   r   r9   r)   rn   ÚImportErrorr   rC   )
r   rD   rd   r   re   rf   r    r-   r$   rn   r   r:   r   Útest_GetView_array_structš   s4   ýþz(BaseModuleTest.test_GetView_array_structr   )Úbuftoolsc                 C   sœ   | j }|j}|  |j|j¡ |||jƒ}|  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |jd u ¡ d S r   )rq   ÚImporterr   r5   r   ZPyBUF_RECORDS_ROÚreadonlyÚformatr$   r   r    r&   rb   Ú
suboffsets)r   r7   Úexprq   rr   Úimpr   r   r   ÚNEWBUF_assertSameÇ   s   z BaseModuleTest.NEWBUF_assertSameznewbuf not implementedzpypy no likeyc           	      C   s’   ddl m} | jj}g d¢}tdt|ƒƒD ]}||d|… dƒ}||ƒ}|  ||¡ qd}|d|… }dD ]}|||ƒ}||ƒ}|  ||¡ q5d S )Nr   r:   rE   r   ú=hrF   )ÚbÚBry   z=Hz=iz=Iz=qz=QrP   r.   Z1hz=1hÚxZ1xZ2xZ3xZ4xZ5xZ6xZ7xZ8xZ9x)r]   r;   rq   rD   r%   r   rx   )	r   r;   rD   rd   r   re   rf   r    rt   r   r   r   Útest_newbufÔ   s   
æzBaseModuleTest.test_newbufc                 C   st   ddl m} ddlm} ddlm}m} | j}|j}|j	}|j
}dD ]}	|d|	dd}
||
ƒ}|  t|||¡ q"d S )	Nr   r:   )ÚBufferMixin)r"   r'   )Ú ú=Ú1ú Z2hz=2hÚ0xZ11xz=!zh z hÚhhú?)r   rF   )r$   )r]   r;   Zpygame.newbufferr~   r   r"   r'   rq   rD   rr   ÚPyBUF_FORMATra   Ú
ValueError)r   r;   r~   r"   r'   rq   rD   rr   r†   rt   rv   rz   r   r   r   Útest_bad_formatý   s   ïzBaseModuleTest.test_bad_formatzfails on pypyc           	      C   s¸  ddl m} t ¡ tjk}|rdnd\}}| j}|j}|ddddœƒ}|||jƒ}|  |j	d¡ |  
|jd u ¡ |  |j|j¡ |  |jd	¡ |  
|jd u ¡ |  
|jd u ¡ |  
|jd u ¡ |  |j¡ |  |jd
¡ |||jƒ}|  |j	d¡ |  
|jd u ¡ |  |j|j¡ |  |jd	¡ |  
|jd u ¡ |  
|jd u ¡ |  
|jd u ¡ |  |j¡ |  |jd
¡ |||jƒ}|  |j	d¡ |  
|jd u ¡ |  |j|j¡ |  |jd	¡ |  |jd¡ |  
|jd u ¡ |  
|jd u ¡ |  |j¡ |  |jd
¡ ||d ddddœƒ}|||jƒ}|  |j	d¡ |  
|jd u ¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  
|jd u ¡ |  |j¡ |  |jd¡ |||jƒ}|  |j	d¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  
|jd u ¡ |  |j¡ |  |jd¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ |  t|||j¡ ||d ddddœƒ}|||jƒ}|  |j	d¡ |  |j|d ¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  
|jd u ¡ |  
|j¡ |  |jd¡ |  t|||j¡ d S )Nr   r:   ©r   r   ©r   r   z|u4©é
   rF   )é	   F)r,   r    r(   rM   r   rF   Úi2©rG   rŒ   ©é   rF   )é*   Fr=   éd   r’   ry   ©r   rG   rŒ   ©éx   r‘   rF   )é@B Tr   Úhi,  r—   ) r]   r;   r   r   r   rq   rr   ÚPyBUF_SIMPLEr   r   rb   rt   r   r5   r$   r    r&   ru   rc   rs   ÚbufÚPyBUF_WRITABLEÚPyBUF_NDÚPyBUF_STRIDESÚPyBUF_FULL_ROra   ÚBufferErrorÚPyBUF_C_CONTIGUOUSÚPyBUF_F_CONTIGUOUSÚPyBUF_ANY_CONTIGUOUSÚPyBUF_CONTIGÚ
PyBUF_FULL)	r   r;   Úis_lil_endianÚfsysÚfrevrq   rr   Úarz   r   r   r   Ú test_PgDict_AsBuffer_PyBUF_flags  s¾   
ÿüÿüÿz/BaseModuleTest.test_PgDict_AsBuffer_PyBUF_flagsznewbuf with ctypesc                 C   s4  ddl m} dd l}t ¡ tjk}|rdnd\}}| j}|j}tj	dd| 
|j¡d}||ƒ}	||	|jƒ}
|  |
jd¡ |  |
jd u ¡ |  |
j|j¡ |  |
j|j¡ |  |
jd u ¡ |  |
jd u ¡ |  |
jd u ¡ |  |
j¡ |  |
j|j¡ ||	|jƒ}
|  |
jd¡ |  |
jd u ¡ |  |
j|j¡ |  |
j|j¡ |  |
jd u ¡ |  |
jd u ¡ |  |
jd u ¡ |  |
j¡ |  |
j|j¡ ||	|jƒ}
|  |
j|j¡ |  |
jd u ¡ |  |
j|	j¡ |  |
j|j¡ |  |
j|j¡ |  |
jd u ¡ |  |
jd u ¡ |  |
j¡ |  |
j|j¡ tj	dd	d
dd}||ƒ}	||	|jƒ}
|  |
j|j¡ |  |
jd u ¡ |  |
j|j¡ |  |
j|j¡ |  |
j|j¡ |  |
j|j¡ |  |
jd u ¡ |  |
j¡ |  |
j|j¡ ||	|jƒ}
|  |
j|j¡ |  |
jd¡ |  |
j|j¡ |  |
j|j¡ |  |
j|j¡ |  |
j|j¡ |  |
jd u ¡ |  |
j¡ |  |
j|j¡ |   t!||	|j¡ |   t!||	|j¡ |   t!||	|j¡ |   t!||	|j¡ |   t!||	|j"¡ |   t!||	|j#¡ |   t!||	|j$¡ |   t!||	|j%¡ |   t!||	|j¡ |   t!||	|j¡ |   t!||	|j"¡ |   t!||	|j#¡ |   t!||	|j$¡ |   t!||	|j%¡ tj	dd	d
dtj&d}||ƒ}	||	|jƒ}
|  |
j|j¡ |  |
j|d ¡ |  |
j|j¡ |  |
j|j¡ |  |
j|j¡ |  |
j|j¡ |  |
jd u ¡ |  |
j¡ |  |
j|j¡ |   t!||	|j'¡ d S )Nr   r:   r‰   rŠ   r‹   rP   )Útypekindr$   r   r/   rF   r   )rª   r$   r&   ry   r”   r•   )rª   r$   r&   Úflagsr˜   )(r]   r;   r   r   r   r   rq   rr   r   rD   ZsizeofZc_doubler™   r   r   rb   rt   r   r$   r    r&   ru   rc   rs   rš   r(   r›   rœ   Úndr5   r   rž   ra   rŸ   r    r¡   r¢   r£   ZPAI_ALIGNEDr¤   )r   r;   r   r¥   r¦   r§   rq   rr   Úer¨   rz   r   r   r   Ú"test_PgObject_AsBuffer_PyBUF_flags  s¾   ÿûz1BaseModuleTest.test_PgObject_AsBuffer_PyBUF_flagsc                 C   s(   ddl m} |dƒ}|  tt|d¡ d S )Nr   r:   r   r5   )r]   r;   ra   r‡   Úgetattr)r   r;   Úbpr   r   r   Ú!test_PgObject_GetBuffer_exceptionä  s   z0BaseModuleTest.test_PgObject_GetBuffer_exceptionc                 C   s¢   |   t ¡ d¡ |   tj ¡ d¡ dtjv r|   tj ¡ d¡ dtjv r-|   tj ¡ d¡ dd l}| 	¡  
d¡r:d S z|  tjtjj¡ W d S  tyP   Y d S w )	Nzpygame shouldn't be initializedz display shouldn't be initializedúpygame.mixerzmixer shouldn't be initializedúpygame.fontzinit shouldn't be initializedr   ÚDarwin)rc   r   Úget_initÚdisplayr)   ÚmodulesÚmixerÚfontÚplatformÚsystemÚ
startswithra   ÚerrorZscrapÚgetÚNotImplementedError)r   rº   r   r   r   Únot_init_assertionsë  s   

þz"BaseModuleTest.not_init_assertionsc                 C   sZ   |   t ¡ ¡ |   tj ¡ ¡ dtjv r|   tj ¡ ¡ dtjv r+|   tj ¡ ¡ d S d S )Nr²   r³   )rb   r   rµ   r¶   r)   r·   r¸   r¹   r   r   r   r   Úinit_assertions  s   

ÿzBaseModuleTest.init_assertionsc                 C   s,   |   ¡  t ¡  |  ¡  t ¡  |   ¡  d S r   )rÀ   r   ÚinitrÁ   r   r   r   r   r   Útest_quit__and_init  s
   z"BaseModuleTest.test_quit__and_initc                 C   s6   |   td¡ t ¡  t t¡ t ¡  |   td¡ dS )z5Ensure that a registered function is called on quit()r   r   N)r   r   r   rÂ   Zregister_quitr   r   r   r   r   r   Útest_register_quit#  s
   
z!BaseModuleTest.test_register_quitc                 C   ó@   t  ¡ }t  d¡ |  t  ¡ d¡ t  d¡ |  t  ¡ d¡ d S ©NÚhir   ©r   Ú	get_errorÚ	set_errorr   ©r   r­   r   r   r   Útest_get_error-  s
   

zBaseModuleTest.test_get_errorc                 C   rÅ   rÆ   rÈ   rË   r   r   r   Útest_set_error?  s
   

zBaseModuleTest.test_set_errorc                 C   s   t  d¡ |  dt  ¡ ¡ d S )Nu   ä½ å¥½)r   rÊ   r   rÉ   r   r   r   r   Útest_unicode_errorG  s   
z!BaseModuleTest.test_unicode_errorc                 C   s@   |   ¡  d}d}t ¡ \}}|  ¡  |  ||¡ |  ||¡ dS )zEnsures init() works properly.rF   r   N)rÀ   r   rÂ   rÁ   ZassertGreaterEqualr   )r   Zexpected_min_passesZexpected_failsZpassesZfailsr   r   r   Ú	test_initK  s   zBaseModuleTest.test_initc                 C   s   |   t ¡ ¡ d S r   )rc   r   rµ   r   r   r   r   Útest_get_init\  s   zBaseModuleTest.test_get_initc                 C   s   t  ¡  |  t  ¡ ¡ d S r   )r   rÂ   rb   rµ   r   r   r   r   Útest_get_init__after_init`  s   z(BaseModuleTest.test_get_init__after_initc                 C   s"   t  ¡  t  ¡  |  t  ¡ ¡ d S r   )r   rÂ   r   rc   rµ   r   r   r   r   Útest_get_init__after_quitf  s   z(BaseModuleTest.test_get_init__after_quitN)"r1   r2   r3   r   r   r   r4   r9   rg   rp   r   ZHAVE_NEWBUFÚpygame.tests.test_utilsrq   rx   ÚunittestZskipIfÚIS_PYPYr}   rˆ   r©   r®   r±   rÀ   rÁ   rÃ   rÄ   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   r   r   r   r   r
      sB    Q*
'

d
b

r
   Ú__main__)r)   rÔ   rº   Úpython_implementationrÕ   rÓ   r   Ú	NameErrorr   r   r   ZTestCaser
   r1   Úmainr   r   r   r   Ú<module>   s(    ÿ    [ÿ