o
    tVÆgrD  ã                   @   sf   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 d dlZG dd„ dejƒZ	e
dkr1e ¡  dS dS )é    N)Úexample_pathc                   @   s4  e Zd Zedd„ ƒZe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d#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Ze ej d/¡d0kd1¡d2d3„ ƒZ d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)dFS )GÚMixerMusicModuleTestc                 C   ó   t j ¡  d S ©N)ÚpygameÚmixerÚinit©Úcls© r   úQ/home/ubuntu/.local/lib/python3.10/site-packages/pygame/tests/mixer_music_test.pyÚ
setUpClass   s   zMixerMusicModuleTest.setUpClassc                 C   r   r   )r   r   Úquitr	   r   r   r   ÚtearDownClass   ó   z"MixerMusicModuleTest.tearDownClassc                 C   s    t j ¡ d u rt j ¡  d S d S r   )r   r   Úget_initr   r	   r   r   r   ÚsetUp   s   ÿzMixerMusicModuleTest.setUpc                 C   ó   |   d¡ dS )ú|tags:music|Úmp3N©Ú
music_load©Úselfr   r   r   Útest_load_mp3   r   z"MixerMusicModuleTest.test_load_mp3c                 C   r   )r   ÚoggNr   r   r   r   r   Útest_load_ogg   r   z"MixerMusicModuleTest.test_load_oggc                 C   r   )r   ÚwavNr   r   r   r   r   Útest_load_wav#   r   z"MixerMusicModuleTest.test_load_wavc                 C   sb   t dƒ}tj |d|› ¡}tjdkr| dd¡}t|ƒ}| ¡ }tj	j
 |¡ tj	j
 |¡ d S )NÚdataú	house_lo.ú\ú\\)r   ÚosÚpathÚjoinÚsepÚreplaceÚstrÚencoder   r   ÚmusicÚload)r   ÚformatÚ
data_fnamer$   ÚumusfnÚbmusfnr   r   r   r   '   s   
zMixerMusicModuleTest.music_loadc              	   C   sˆ   ddg}t dƒ}|D ]7}tj |d|› ¡}tjdkr!| dd¡}| ¡ }t|dƒ}tj	j
 |¡ W d  ƒ n1 s<w   Y  q
dS )	z*test loading music from file-like objects.r   r   r   r    r!   r"   ÚrbN)r   r#   r$   r%   r&   r'   r)   Úopenr   r   r*   r+   ©r   Úformatsr-   Úfr$   r/   Úmusfr   r   r   Útest_load_object3   s   
ÿ€úz%MixerMusicModuleTest.test_load_objectc              	   C   s<  ddg}t dƒ}|D ]‘}tj |d|› ¡}tjdkr!| dd¡}| ¡ }t|dƒ}tj	j
 ||¡ W d  ƒ n1 s=w   Y  t|dƒ}tj	j
 ||¡ W d  ƒ n1 sZw   Y  t|dƒ}tj	j
j||d	 W d  ƒ n1 sxw   Y  t|dƒ}tj	j
j||d	 W d  ƒ n1 s–w   Y  q
dS )
zKtest loading & queuing music from file-like objects with namehint argument.r   r   r   r    r!   r"   r0   N©Únamehint)r   r#   r$   r%   r&   r'   r)   r1   r   r   r*   r+   Úqueuer2   r   r   r   Útest_object_namehint@   s*   
ÿÿÿÿ€ðz)MixerMusicModuleTest.test_object_namehintc              	   C   sÄ   ddl }tdƒ}tj |d¡}tj |d¡}zt|dƒ}W d  ƒ n1 s'w   Y  t |¡ W n ty>   t 	d¡‚w | 
||¡ ztjj |¡ tjj |¡ W t |¡ dS t |¡ w )ztest non-ASCII unicode pathr   Nr   u
   ä½ å¥½.wavúhouse_lo.wavÚwzthe path cannot be opened)Úshutilr   r#   r$   r%   r1   ÚremoveÚOSErrorÚunittestÚSkipTestÚcopyr   r   r*   r+   )r   r=   ÚepÚ	temp_fileÚorg_filer4   r   r   r   Útest_load_unicodeW   s"   ÿ
ÿz&MixerMusicModuleTest.test_load_unicodec              	   C   s‚   dd l }dd l}tdƒ}tj |d¡}| d¡\}}t |¡ | ||¡ zt	j
j |¡ t	j
j ¡  W t |¡ d S t |¡ w )Nr   r   r;   z.wav)r=   Útempfiler   r#   r$   r%   ÚmkstempÚcloserB   r   r   r*   r+   Úunloadr>   )r   r=   rG   rC   rE   ÚtmpfdÚtmppathr   r   r   Útest_unloadk   s   
z MixerMusicModuleTest.test_unloadc                 C   ó$   t tj dd¡ƒ}tjj |¡ dS )zAEnsures queue() accepts mp3 files.

        |tags:music|
        r   úhouse_lo.mp3N©r   r#   r$   r%   r   r   r*   r9   ©r   Úfilenamer   r   r   Útest_queue_mp3z   ó   z#MixerMusicModuleTest.test_queue_mp3c                 C   rN   )zAEnsures queue() accepts ogg files.

        |tags:music|
        r   úhouse_lo.oggNrP   rQ   r   r   r   Útest_queue_ogg‚   rT   z#MixerMusicModuleTest.test_queue_oggc                 C   rN   )zAEnsures queue() accepts wav files.

        |tags:music|
        r   r;   NrP   rQ   r   r   r   Útest_queue_wavŠ   rT   z#MixerMusicModuleTest.test_queue_wavc                 C   sD   t tj dd¡ƒ}t tj dd¡ƒ}tjj |¡ tjj |¡ dS )z-Ensures queue() can be called multiple times.r   rU   r;   NrP   )r   Úogg_fileÚwav_filer   r   r   Útest_queue__multiple_calls’   s   z/MixerMusicModuleTest.test_queue__multiple_callsc                 C   s\   t tj dd¡ƒ}tjjj|dd tjjj|dd tjj |d¡ tjj |dd¡ dS )z4Ensures queue() can be called with proper arguments.r   r;   é   )ÚloopsÚ r7   NrP   )r   rY   r   r   r   Útest_queue__argumentsš   s
   z*MixerMusicModuleTest.test_queue__argumentsc                 C   s<   |   t¡ tjj ¡  W d  ƒ dS 1 sw   Y  dS )z<Ensures queue() correctly handles missing the file argument.N)ÚassertRaisesÚ	TypeErrorr   r   r*   r9   r   r   r   r   Útest_queue__no_file£   s   "ÿz(MixerMusicModuleTest.test_queue__no_filec                 C   sR   t tj dd¡ƒ}|  tj¡ tjj 	|¡ W d  ƒ dS 1 s"w   Y  dS )z5Ensures queue() correctly handles invalid file types.r   zcity.pngN)
r   r#   r$   r%   r_   r   Úerrorr   r*   r9   )r   Únot_a_sound_filer   r   r   Útest_queue__invalid_sound_type¨   s   "ÿz3MixerMusicModuleTest.test_queue__invalid_sound_typec                 C   s@   |   tj¡ tjj d¡ W d  ƒ dS 1 sw   Y  dS )z4Ensures queue() correctly handles invalid filenames.r]   N)r_   r   rb   r   r*   r9   r   r   r   r   Útest_queue__invalid_filename¯   s   "ÿz1MixerMusicModuleTest.test_queue__invalid_filenamec                 C   s€   t tj dd¡ƒ}tjj |¡ tjj ¡  t	 
d¡ tjj ¡  t	 
d¡ tjj ¡ }tjj ¡  tjj ¡ }|  ||¡ dS )z`Ensure music has the correct position immediately after unpausing

        |tags:music|
        r   rO   gš™™™™™©?N)r   r#   r$   r%   r   r   r*   r+   ÚplayÚtimeÚsleepÚpauseÚget_posÚunpauseÚassertEqual)r   rR   Úbefore_unpauseÚafter_unpauser   r   r   Útest_music_pause__unpause´   s   

z.MixerMusicModuleTest.test_music_pause__unpausec                 C   sP   t tj dd¡ƒ}tjj |¡ tjj ¡  tjj 	¡  |  
tjj ¡ d¡ d S )Nr   rO   F)r   r#   r$   r%   r   r   r*   r+   rf   Ústoprl   Úget_busyrQ   r   r   r   Ú	test_stopÈ   s
   zMixerMusicModuleTest.test_stopc                 C   sà   t tj dd¡ƒ}tjj |¡ tjj ¡  t	 
d¡ tjj ¡  t	 
d¡ |  tjj ¡ ¡ tjj ¡  tjj ¡  t	 
d¡ tjj ¡  tjj ¡  |  tjj ¡ ¡ t	 
d¡ tjj ¡  t	 
d¡ |  tjj ¡ ¡ d S )Nr   rO   é   gš™™™™™@r[   é   )r   r#   r$   r%   r   r   r*   r+   rf   rg   rh   ÚrewindÚ
assertTruerq   rp   ri   ÚassertFalserk   rQ   r   r   r   Útest_rewindÓ   s"   




z MixerMusicModuleTest.test_rewindc                 C   ó   |   ¡  d S r   ©Úfailr   r   r   r   Útodo_test_get_posï   s   	z&MixerMusicModuleTest.todo_test_get_posÚSDL_AUDIODRIVERÚdiskz4disk audio driver "playback" writing to disk is slowc                 C   s¨   t j ¡  ttj dd¡ƒ}t jj 	|¡ d}d}t j
 ¡ }| ¡ }t jjjd|d d}|rRt j ¡  t jj ¡ sN|sNd}| ¡ | d }|  |d	¡ d}|s/d S d S )
Nr   rU   g      @Fr   )ÚstartTiè  rt   )r   Údisplayr   r   r#   r$   r%   r   r*   r+   rg   ÚClockÚtickrf   ÚeventÚpumprq   rl   )r   rR   Ústart_time_in_secondsÚmusic_finishedÚclockÚstart_time_in_msÚrunningÚtime_to_finishr   r   r   Útest_play__start_time  s"   


ùz*MixerMusicModuleTest.test_play__start_timec                 C   sN   t tj dd¡ƒ}tjj |¡ tjj ¡  |  	tjj 
¡ ¡ tjj ¡  d S )Nr   rO   )r   r#   r$   r%   r   r   r*   r+   rf   rv   rq   rp   rQ   r   r   r   Ú	test_play  s
   zMixerMusicModuleTest.test_playc                 C   s†   t tj dd¡ƒ}tjj |¡ |  tjj 	¡ ¡ tjj 
¡  |  tjj 	¡ ¡ t tj dd¡ƒ}tjj |¡ |  tjj 	¡ ¡ d S )Nr   rO   r;   )r   r#   r$   r%   r   r   r*   r+   rw   rq   rf   rv   rQ   r   r   r   Ú	test_load7  s   zMixerMusicModuleTest.test_loadc                 C   s`   t tj dd¡ƒ}tjj |¡ tjj ¡  tjj 	¡ }|  
|d¡ |  |d¡ tjj ¡  d S )Nr   rO   r   rt   )r   r#   r$   r%   r   r   r*   r+   rf   Ú
get_volumeÚassertGreaterEqualÚassertLessEqualrp   ©r   rR   Úvolr   r   r   Útest_get_volumeL  s   z$MixerMusicModuleTest.test_get_volumec                 C   ó\   |   d¡ |  tjj ¡ ¡ tjj ¡  |  tjj ¡ ¡ tjj ¡  |  tjj ¡ ¡ d S ©Nr   ©	r   rw   r   r   r*   rq   rf   rv   ri   r   r   r   r   Ú
test_pause\  s   
zMixerMusicModuleTest.test_pausec                 C   r”   r•   r–   r   r   r   r   Útest_get_busyi  s   
z"MixerMusicModuleTest.test_get_busyc                 C   sÒ   t tj dd¡ƒ}tjj |¡ tjj ¡  |  	tjj 
¡ ¡ t d¡ tjj ¡  |  tjj 
¡ ¡ tjj ¡ }tjj ¡  tjj ¡ }|  	tjj 
¡ ¡ |  	|d |  ko]|d kn  ¡ tjj ¡  d S )Nr   rO   gš™™™™™¹?rt   )r   r#   r$   r%   r   r   r*   r+   rf   rv   rq   rg   rh   ri   rw   rj   rk   rp   )r   rR   ÚbeforeÚafterr   r   r   Útest_unpausew  s   
&z!MixerMusicModuleTest.test_unpausec                 C   sb   t tj dd¡ƒ}tjj |¡ tjj ¡  tjj 	d¡ tjj 
¡ }|  |d¡ tjj ¡  d S )Nr   rO   g      à?)r   r#   r$   r%   r   r   r*   r+   rf   Ú
set_volumerŽ   rl   rp   r‘   r   r   r   Útest_set_volume  s   z$MixerMusicModuleTest.test_set_volumec                 C   ry   r   rz   r   r   r   r   Útodo_test_set_pos  s   
z&MixerMusicModuleTest.todo_test_set_posc              
   C   sŽ   ddl }ddl}ttj dd¡ƒ}tj | ¡ d¡}tdƒD ]&}tj	 
¡  z| ||¡ tj	j |¡ tj	 ¡  W t |¡ qt |¡ w dS )z8issue #955. unload music whenever mixer.quit() is calledr   Nr   r;   ztempfile.wavé
   )rG   r=   r   r#   r$   r%   Ú
gettempdirÚranger   r   r   Úcopy2r*   r+   r   r>   )r   rG   r=   ÚtestfileÚtempcopyÚir   r   r   Ú	test_init©  s   
ùzMixerMusicModuleTest.test_initN)*Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r   r   r   r   r   r6   r:   rF   rM   rS   rV   rW   rZ   r^   ra   rd   re   ro   rr   rx   r|   r@   ÚskipIfr#   ÚenvironÚgetr‹   rŒ   r   r“   r—   r˜   r›   r   rž   r¦   r   r   r   r   r      sP    

	þ
r   Ú__main__)r#   ÚsysÚplatformr@   rg   Úpygame.tests.test_utilsr   r   ÚTestCaser   r§   Úmainr   r   r   r   Ú<module>   s       dÿ