o
    OZhrD  ć                   @   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   śL/var/www/auris/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   Zget_initr   r	   r   r   r   ŚsetUp   s   ’zMixerMusicModuleTest.setUpc                 C   ó   |   d” dS )ś|tags:music|Z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"   Z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,   Z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    r-   N©Znamehint)r   r!   r"   r#   r$   r%   r'   r.   r   r   r(   r)   Śqueuer/   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#   r.   ŚremoveŚOSErrorŚunittestZSkipTestŚcopyr   r   r(   r)   )r   r8   ŚepŚ	temp_fileŚorg_filer1   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   r6   z.wav)r8   Śtempfiler   r!   r"   r#   ŚmkstempŚcloser<   r   r   r(   r)   Zunloadr9   )r   r8   rA   r=   r?   ZtmpfdZ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(   r4   ©r   Śfilenamer   r   r   Śtest_queue_mp3z   ó   z#MixerMusicModuleTest.test_queue_mp3c                 C   rE   )zAEnsures queue() accepts ogg files.

        |tags:music|
        r   śhouse_lo.oggNrG   rH   r   r   r   Śtest_queue_ogg   rK   z#MixerMusicModuleTest.test_queue_oggc                 C   rE   )zAEnsures queue() accepts wav files.

        |tags:music|
        r   r6   NrG   rH   r   r   r   Śtest_queue_wav   rK   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   rL   r6   NrG   )r   Z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   r6   é   )ZloopsŚ r3   NrG   )r   rO   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(   r4   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#   rT   r   Śerrorr   r(   r4   )r   Z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.rR   N)rT   r   rW   r   r(   r4   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   rF   g©?N)r   r!   r"   r#   r   r   r(   r)   ŚplayŚtimeŚsleepŚpauseŚget_posŚunpauseŚassertEqual)r   rI   Zbefore_unpauseZ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   rF   F)r   r!   r"   r#   r   r   r(   r)   rZ   Śstopr`   Śget_busyrH   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   rF   é   g@rQ   é   )r   r!   r"   r#   r   r   r(   r)   rZ   r[   r\   ŚrewindŚ
assertTruerc   rb   r]   ŚassertFalser_   rH   r   r   r   Śtest_rewindÓ   s"   




z MixerMusicModuleTest.test_rewindc                 C   ó   |   ”  d S r   ©Zfailr   r   r   r   Śtodo_test_get_posļ   s   	z&MixerMusicModuleTest.todo_test_get_posZSDL_AUDIODRIVERZ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   rL   g      @Fr   )ŚstartTič  rf   )r   Śdisplayr   r   r!   r"   r#   r   r(   r)   r[   ZClockZtickrZ   ŚeventZpumprc   r`   )r   rI   Zstart_time_in_secondsZmusic_finishedŚclockZstart_time_in_msŚrunningZ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   rF   )r   r!   r"   r#   r   r   r(   r)   rZ   rh   rc   rb   rH   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   rF   r6   )r   r!   r"   r#   r   r   r(   r)   ri   rc   rZ   rh   rH   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   rF   r   rf   )r   r!   r"   r#   r   r   r(   r)   rZ   Ś
get_volumeZassertGreaterEqualZassertLessEqualrb   ©r   rI   Z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   ri   r   r   r(   rc   rZ   rh   r]   r   r   r   r   Ś
test_pause\  s   
zMixerMusicModuleTest.test_pausec                 C   ry   rz   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   rF   g¹?rf   )r   r!   r"   r#   r   r   r(   r)   rZ   rh   rc   r[   r\   r]   ri   r^   r_   rb   )r   rI   Ś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   rF   g      ą?)r   r!   r"   r#   r   r   r(   r)   rZ   Z
set_volumerv   r`   rb   rw   r   r   r   Śtest_set_volume  s   z$MixerMusicModuleTest.test_set_volumec                 C   rk   r   rl   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   r6   ztempfile.wavé
   )rA   r8   r   r!   r"   r#   Ś
gettempdirŚranger   r   r   Ścopy2r(   r)   r   r9   )r   rA   r8   ZtestfileZtempcopyŚir   r   r   Ś	test_init©  s   
łzMixerMusicModuleTest.test_initN)*Ś__name__Ś
__module__Ś__qualname__Śclassmethodr   r   r   r   r   r   r   r2   r5   r@   rD   rJ   rM   rN   rP   rS   rV   rX   rY   ra   rd   rj   rm   r;   ZskipIfr!   ŚenvironŚgetrs   rt   ru   rx   r|   r}   r   r   r   r   r   r   r   r   r      sP    

	ž
r   Ś__main__)r!   ŚsysŚplatformr;   r[   Zpygame.tests.test_utilsr   r   ZTestCaser   r   Śmainr   r   r   r   Ś<module>   s       d’