o
    tVÆg±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   úJ/home/ubuntu/.local/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_ENDIANÚ
BIG_ENDIANÚassertIn)r   Ú
byte_orderÚ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   Ú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#   Ú	array_lenÚdr+   Úir/   r   r   r   Ú__init__(   s*   






z$BaseModuleTest.ExporterBase.__init__N)Ú__name__Ú
__module__Ú__qualname__r6   r   r   r   r   ÚExporterBase'   s    r:   c                 C   sb   |   |j|j¡ |j}|   |d |j¡ |   |d |j¡ |   |d |j¡ |   |d |j¡ d S )Nr1   r%   r+   r-   )r   Úlengthr&   Ú__array_interface__r1   r%   r+   r-   )r   ÚproxyÚobjÚ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   )Úversionr1   r%   r+   r-   ©r1   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)r7   r8   r9   rE   Úpropertyr<   Ú__array_struct__r   r   r   r   ÚExporterL   s    	rK   ©é   r   é   é   é   r   r5   rM   ©r5   Úu©r   rM   é   é   ©rT   rU   Úfc                   @   s   e Zd ZdS )zKBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.NoDictErrorN)r7   r8   r9   r   r   r   r   ÚNoDictErrorx   s    rX   c                   @   s   e Zd ZdZdS )zFBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.WRDictzWeak referenceable dictN)r7   r8   r9   Ú__doc__r   r   r   r   ÚWRDict{   s    rZ   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   )rE   r4   ÚrefÚdict_refr   )rK   rZ   Ú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   )r4   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)r\   ÚAttributeErrorr   )rX   r   r   Úis_dict_alive‹   s
   ÿzWBaseModuleTest.test_PgObject_GetBuffer_array_interface.<locals>.Exporter2.is_dict_aliveN)r7   r8   r9   r^   rI   r<   r_   ra   r   ©rK   rX   rZ   r]   r   r   Ú	Exporter2€   s
    rc   )rM   rT   rR   rT   )Úpygame.bufferproxyrB   r:   r*   r   r@   r]   ÚgcÚRuntimeErrorÚdictÚassertRaisesra   r;   Ú
assertTruer_   ÚcollectÚassertFalse)r   rB   Ú_shaper#   ÚoÚvr%   r2   r)   re   rc   r;   r   rb   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   rA   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   )Úsuperr6   Ú__dict__Úview)r   r%   r2   r)   )rB   Ú	__class__r   r   r6   ž   s   zCBaseModuleTest.test_GetView_array_struct.<locals>.Exporter.__init__c                 S   s   | j jS r   )rr   rJ   r   r   r   r   Úget__array_struct__¢   s   zNBaseModuleTest.test_GetView_array_struct.<locals>.Exporter.get__array_struct__c                 S   rF   r   r   r   r   r   r   rG   §   rH   zCBaseModuleTest.test_GetView_array_struct.<locals>.Exporter.<lambda>)	r7   r8   r9   r6   rt   rI   rJ   r<   Ú__classcell__r   rA   )rs   r   rK      s
    rK   rL   r   r5   rM   rQ   rS   rV   rW   )Úgetrefcount)rd   rB   r:   r*   r   r@   r.   rv   ÚImportErrorr   rJ   )
r   rK   rl   r#   rm   rn   r%   r2   r)   rv   r   rA   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   )ry   ÚImporterr   r;   r   ÚPyBUF_RECORDS_ROÚreadonlyÚformatr)   r#   r%   r+   ri   Ú
suboffsets)r   r=   Úexpry   rz   Ú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   rA   rL   r   ú=hrM   )ÚbÚBr‚   z=Hz=iz=Iz=qz=QrW   r4   Ú1hz=1hÚxÚ1xÚ2xÚ3xÚ4xÚ5xÚ6xÚ7xÚ8xÚ9x)rd   rB   ry   rK   r*   r   r   )	r   rB   rK   rl   r#   rm   rn   r%   r}   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   rA   )ÚBufferMixin)r'   r,   )Ú ú=Ú1ú Ú2hz=2hÚ0xÚ11xz=!zh z hÚhhú?)r   rM   )r)   )rd   rB   Úpygame.newbufferr‘   r"   r'   r,   ry   rK   rz   ÚPyBUF_FORMATrh   Ú
ValueError)r   rB   r‘   r'   r,   ry   rK   rz   rœ   r}   r   rƒ   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   rA   ©r!   r    ©r    r!   z|u4©é
   rM   )é	   F)r1   r%   r-   rT   r£   rM   Úi2©rN   r¢   ©é   rM   )é*   FrD   éd   r¨   r‚   ©r   rN   r¢   ©éx   r§   rM   )é@B Tr   Úhi,  r­   ) rd   rB   r   r   r   ry   rz   ÚPyBUF_SIMPLEr   r#   ri   r}   r   r;   r)   r%   r+   r~   rk   r|   ÚbufÚPyBUF_WRITABLEÚPyBUF_NDÚPyBUF_STRIDESÚPyBUF_FULL_ROrh   ÚBufferErrorÚPyBUF_C_CONTIGUOUSÚPyBUF_F_CONTIGUOUSÚPyBUF_ANY_CONTIGUOUSÚPyBUF_CONTIGÚ
PyBUF_FULL)	r   rB   Úis_lil_endianÚfsysÚfrevry   rz   Úarƒ   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   rA   rŸ   r    r¡   rW   )Útypekindr)   r¥   r5   rM   r¦   )rÀ   r)   r+   r‚   rª   r«   )rÀ   r)   r+   Úflagsr®   )(rd   rB   r"   r   r   r   ry   rz   r   rK   ÚsizeofÚc_doubler¯   r   r#   ri   r}   r   r)   r%   r+   r~   rk   r|   r°   r-   r±   r²   Úndr;   r³   r´   rh   rµ   r¶   r·   r¸   r¹   ÚPAI_ALIGNEDrº   )r   rB   r"   r»   r¼   r½   ry   rz   Úer¾   rƒ   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   rA   r   r;   )rd   rB   rh   r   Úgetattr)r   rB   Ú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)rk   r   Úget_initÚdisplayr.   ÚmodulesÚmixerÚfontÚplatformÚsystemÚ
startswithrh   ÚerrorÚ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Ì   )ri   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Ü   Ú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.rM   r   N)rÚ   r   rÜ   rÛ   ÚassertGreaterEqualr   )r   Úexpected_min_passesÚexpected_failsÚpassesÚfailsr   r   r   Ú	test_initK  s   zBaseModuleTest.test_initc                 C   s   |   t ¡ ¡ d S r   )rk   r   rÎ   r   r   r   r   Útest_get_init\  s   zBaseModuleTest.test_get_initc                 C   s   t  ¡  |  t  ¡ ¡ d S r   )r   rÜ   ri   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   rk   rÎ   r   r   r   r   Útest_get_init__after_quitf  s   z(BaseModuleTest.test_get_init__after_quitN)"r7   r8   r9   r   r   r   r:   r@   ro   rx   r   ÚHAVE_NEWBUFÚpygame.tests.test_utilsry   r   ÚunittestÚ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   ÚTestCaser
   r7   Úmainr   r   r   r   Ú<module>   s(    ÿ    [ÿ