
    &h                        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  S SKJr  S SK	r	S SK	J
r
  S\R                  " 5       :H  r/ SQr/ SQrSS	/rS
/r\ V VVs/ s H  n \  H  n\  H  nXUS.PM
     M     M     snnn rSSS	S S.r " S S5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S\R(                  5      r " S S \R(                  5      r\S!:X  a  \R<                  " 5         ggs  snnn f )"    Narray)example_path)mixerPyPy)i+  "V  D  i  )            i  )	frequencysizechannelsr	       )r   r   r   allowedchangesc                       \ rS rSrSrSrSrg)InvalidBool&   z!To help test invalid bool values.N )__name__
__module____qualname____firstlineno____doc____bool____static_attributes__r       O/var/www/auris/envauris/lib/python3.13/site-packages/pygame/tests/mixer_test.pyr   r   &   s
    +Hr    r   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\R                  " \R                   R#                  S5      S5      \R                  " \S5      S 5       5       rS r\R                  " \R,                  R/                  S5      S:H  S5      S 5       rS rS rS r\R                  " \R:                  (       + S5      \R                  " \S5      S 5       5       r\R                  " \R:                  (       + S5      \R                  " \S5      S 5       5       rS r S r!S r"\RF                  S 5       r$S r%S  r&S! r'S" r(S# r)S$ r*S% r+S&r,g')(MixerModuleTest/   c                 `    [         R                  " 5         [         R                  " SSSS5        g )Nr   )r   quitpre_initselfs    r!   tearDownMixerModuleTest.tearDown0   s    

q!Q"r    c                 .   [         R                  " S0 [        D6  [         R                  " 5       nU R	                  US   [        S   5        U R	                  [        US   5      [        [        S   5      5        U R                  US   [        S   5        g Nr   r   r   r   r   r   r   )r   initCONFIGget_initassertEqualabsassertGreaterEqualr)   
mixer_confs     r!   test_init__keyword_args'MixerModuleTest.test_init__keyword_args4   sq    

V^^%
A{(;<Z]+S-@A
1vj/ABr    c                 X   [         R                  " S0 [        D6  [         R                  " 5         [         R                  " 5       nU R                  US   [        S   5        U R                  [        US   5      [        [        S   5      5        U R                  US   [        S   5        g r-   )r   r'   r/   r.   r0   r1   r2   r3   r4   s     r!   test_pre_init__keyword_args+MixerModuleTest.test_pre_init__keyword_args>   sz      

^^%
A{(;<Z]+S-@A
1vj/ABr    c                 |   [         R                  " SSS5        [         R                  " SSS5        [         R                  " SS9  U R                  [         R                  " 5       S   S5        U R                  [         R                  " 5       S   S5        U R                  [         R                  " 5       S   S5        g )	Nr   r   r   r   r   r	   r
   r   )r   r'   r.   r1   r0   r3   r(   s    r!   test_pre_init__zero_values*MixerModuleTest.test_pre_init__zero_valuesJ   s     	ub!$q!Q

!$)!,e4)!,c2 0 3Q7r    c                     [         R                  " SSSSS9  [         R                  " SSS5        U R                  [         R                  " 5       S5        g )Nr	   r   r   r   r<   )r	   r   r   )r   r'   r.   r1   r0   r(   s    r!   test_init__zero_values&MixerModuleTest.test_init__zero_valuesT   s=     	ua15

1a)=9r    c                 L    U R                  [        R                  " 5       5        g N)assertIsNoner   r0   r(   s    r!   4test_get_init__returns_None_if_mixer_not_initializedDMixerModuleTest.test_get_init__returns_None_if_mixer_not_initializedn   s    %..*+r    c                 x    [         R                  " 5         U R                  [         R                  " 5       S5        g )Nr   )r   r.   r1   get_num_channelsr(   s    r!   0test_get_num_channels__defaults_eight_after_init@MixerModuleTest.test_get_num_channels__defaults_eight_after_initq   s$    

//115r    c                     [         R                  " 5         [         R                  " 5       n[        SUS-   5       H>  n[         R                  " U5        U R                  [         R                  " 5       U5        M@     g )Nr   )r   r.   rH   rangeset_num_channelsr1   )r)   default_num_channelsis      r!   test_set_num_channels%MixerModuleTest.test_set_num_channelsu   sX    

$557q.23A""1%U335q9 4r    c                     [         R                  " 5         [         R                  " 5         U R                  [        R
                  [         R                  5        g)zPget_num_channels() Should throw pygame.error if uninitialized
after mixer.quit()N)r   r.   r&   assertRaisespygameerrorrH   r(   s    r!   	test_quitMixerModuleTest.test_quit}   s0     	



&,,(>(>?r    winzSee github issue 892.zrandom errors here with pypyc                 >   S n[         R                  " 5         Sn[        [        R                  R                  SS5      5      n[        U5      nUR                  [        R                  " 5       5      n[         R                  " US9nU R                  UR                  5       S:  5        U" U5      nU R                  [        U5      S:  5        U R                  U" [         R                  " U5      5      U5        U R                  U" [         R                  " US95      U5        U R                  U" [         R                  " U5      5      U5        SnU R                  [         5       n	[         R                  " 5         S S S 5        U R                  [        W	R"                  5      U5        U R                  [         5       n	[         R                  " X2S	9  S S S 5        U R                  [        U	R"                  5      U5        U R                  [         5       n	[         R                  " X#S9  S S S 5        U R                  [        U	R"                  5      U5        U R                  [         5       n	[         R                  " X#S
9  S S S 5        U R                  [        U	R"                  5      U5        U R                  [         5       n	[         R                  " US9  S S S 5        U R                  [        U	R"                  5      S5        [         R                  " U40 0 D6nU R                  U" U5      U5        [         R                  " / 0 SU0D6nU R                  [         5       n	[         R                  " / 5        S S S 5        U R                  [        U	R"                  5      S5        U R                  [         5       n	[         R                  " / S	9nS S S 5        Sn
U R                  [        U	R"                  5      U
5        SnU R                  [$        [         R                  U5        U R                  [$        [         R                  S5        U R                  [         5       n	[         R                  " SS	9  S S S 5        Sn
U R                  [        U	R"                  5      U
5        U R                  U" [         R                  " US	95      U5        ['        U5      [        :w  a-  U" [         R                  " U5      5      nU R                  X5        U R                  U" [         R                  " US95      U5        U R                  U" [         R                  " U5      5      U5        [         R                  " U5      nU R                  [         5       n	[         R                  " X6S9  S S S 5        U R                  [        U	R"                  5      U5        U R                  [         5       n	[         R                  " X&S9  S S S 5        U R                  [        U	R"                  5      U5        [         R                  " US9nU R                  UR)                  5       UR)                  5       5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNk= f! , (       d  f       GN&= f! , (       d  f       GN= f! , (       d  f       GNS= f! , (       d  f       GN= f! , (       d  f       GN{= f! , (       d  f       GN^= f! , (       d  f       GN= f)Nc                 "    U R                  5       $ rC   )get_raw)snds    r!   	get_bytes2MixerModuleTest.test_sound_args.<locals>.get_bytes   s    ;;= r    s0                           datahouse_lo.wavfile      ?  z5Sound takes either 1 positional or 1 keyword argumentbuffer)rf   rb   )foobarz&Unrecognized keyword argument 'foobar'rb   z!Unrecognized argument (type list)z1Expected object with buffer interface: got a list12345678	somethingz+Unicode object not allowed as buffer objectr   )rf   r   )r   r.   r   ospathjoinstrencodesysgetfilesystemencodingSound
assertTrue
get_lengthlenr1   rS   	TypeError	exceptionIOErrortyper[   )r)   r]   sample	wave_path
uwave_path
bwave_pathr\   	snd_bytesarg_emsgcmemsg
ufake_path	somebytessnd2s                 r!   test_sound_argsMixerModuleTest.test_sound_args   s   	! 	

! fn!EF	^
&&s'@'@'BC
kky)(3./cN	I-.5;;y#9:IF5;;J#?@)L5;;z#:;YGJy)RKKM *R\\*H5y)RKK	1 *R\\*H5y)RKK/ *R\\*H5y)RKKv6 *R\\*H5y)RKKv& *R\\*,TUkk)*r*33kk25&)!45y)RKKO *R\\*,OPy)R++R(C *BR\\*D1
'5;;
;'5;;
;y)RKK{+ *<R\\*D15;;f#=>G<3!%++f"56IY/5;;J#?@)L5;;z#:;YGkk)$y)RKK	- *R\\*H5y)RKKv1 *R\\*H5{{%7m *) *) *) *) *) *) *) *) *) *)sx   'Y+?Y=Z-Z!Z3"[;[ [)[;&\+
Y:=
Z
Z!
Z03
[
[
[&)
[8;
\

\c                    [         R                  " 5         SSKn[        S5      n[        R
                  R                  US5      n[        R
                  R                  US5      nUR                  XC5         [        US5       n SSS5         [         R                  " U5      nA[        R                  " U5        g! , (       d  f       N== f! [         a    [        R                  " S5      ef = f! [        R                  " U5        f = f)ztest non-ASCII unicode pathr   Nr_   u
   你好.wavr`   rbzthe path cannot be opened)r   r.   shutilr   rj   rk   rl   copyopenOSErrorunittestSkipTestrq   remove)r)   r   ep	temp_fileorg_filefsounds          r!   test_sound_unicode"MixerModuleTest.test_sound_unicode   s    

&!GGLL\2	77<<N3H(	Ai&! '
	!KK	*EIIi  '& 	A##$?@@	A IIi s6   7C B<C C1 <
C
C 
C !C.1D	SDL_AUDIODRIVERdiskz'this test fails without real sound cardc           	      `    SSK JnJnJnJnJnJnJnJnJ	n	  Sn
/ SQnSS/nU Vs0 s H  o/ _M     nnW" SSSW	5      nUR                  W5      nUR                  W5      nUUU4 Vs/ s H  nSU4PM	     nnU H  nUS:  d  M  UU   R                  U5        M!     U" S	S
SW5      nUR                  W5      nUR                  W5      nUUU4 Vs/ s H  nSU4PM	     nnU H  nUS:  d  M  UU   R                  U5        M!     W" UR                  S   S/U	5      nUUS S 2S4'   SU-
  US S 2S4'   UR                  U5      nUR                  U5      nUUU4 Vs/ s H  nSU4PM	     nnU H  nUS:  d  M  UU   R                  U5        M!     U" UR                  S   S/U5      nUUS S 2S4'   SU-
  US S 2S4'   UR                  U5      nUR                  U5      nUUU4 Vs/ s H  nSU4PM	     n nU H  nUS:  d  M  UU   R                  U 5        M!     U H  nU H  n! [        R                   " U
UU!5         [        R&                  " 5       u  n"nn#UU:w  d  U#U!:w  a   [        R(                  " 5         MZ  UU    H  u  n#nU R+                  UUU#U!:H  5        M     [        R(                  " 5         M     M     g ! [         a    U R                  S5         GNf = fs  snf s  snf s  snf s  snf s  snf ! ["        R$                   a     M  f = f! [        R(                  " 5         f = f)Nr   )	r   arangezerosint8uint8int16uint16int32uint32zrequires numpyr   )r   r   r
   r   r   r      i      )numpyr   r   r   r   r   r   r   r   r   ImportErrorskipTestastypeextendshaper   r.   rT   rU   r0   r&   _test_array_argument)$r)   r   r   r   r   r   r   r   r   r   freqformat_listchannels_listr   a_lists	a32u_mono	a16u_monoa8u_monoaau_list_monoformat	a32s_mono	a16s_monoa8s_monoas_list_monoa32u_stereoa16u_stereo
a8u_stereoau_list_stereoa32s_stereoa16s_stereo
a8s_stereoas_list_stereor   __cs$                                       r!   test_array_keyword"MixerModuleTest.test_array_keyword   s\   
	,
 
 
 &A"-.+Qb5+.1c1f-	$$V,	##E*)19i(HI(H1A(HI!Fz&&|4 " 4a/	$$U+	##D))19i(HI(H1A(HI!Fz&&|4 " Y__Q/3V<%AqD)OAqD!((0 ''.
+5{K*PQ*PQ1a&*PQ!Fz&&~6 " Y__Q/3U;%AqDNAqD!((/ ''-
+5{K*PQ*PQ1a&*PQ!Fz&&~6 " "F)JJtVX6!$~~/HB1F{a8m  JJL !(111&!Q(]K !0 JJL * "S  	,MM*+	, / J J R R ||  JJLsR   K  K"(K'K,K1'K6'K; %L=%L KK;LLL-c                    SSK JnJn   [        R                  " US9nU(       d  U R                  SXR                  4-  5        U" W5      nUR                  UR                  5      n[        U5      SUR                  -  -
  n	U	S:  a  X-  nU R                  U" Xx:H  5      SXR                  4-  5        g ! [
         a+    U(       d   g U R                  SXR                  4-  5         Nf = f)Nr   )r   allr   z&Raised ValueError: Format %i, dtype %sz-Did not raise ValueError: Format %i, dtype %sr   zFormat %i, dtype %s)r   r   r   r   rq   
ValueErrorfaildtyper   r2   itemsizerr   )
r)   r   r   	test_passr   all_r\   a2a3lshifts
             r!   r   $MixerModuleTest._test_array_argument4  s    ,	T++A&C
 II?677BSS 3ZXXbhhVq1::~-Q;MBRX(=@Q(QR  	TII>&''ARRS	Ts   B5 5C*C*)C*c                 J    U R                  [        [        R                  US9  g )Nr   )rS   r   r   rq   )r)   r   s     r!   _test_array_interface_fail*MixerModuleTest._test_array_interface_failI  s    *ekk;r    c                    [         R                  " SSSSS9  [         R                  " SS9nUR                  nU R	                  [        U[        5      5        [        R                  " 5       [        R                  :X  a  SnOS	nU R                  US
   U5        U R                  US   S5        U R                  US   S5        U R                  US   UR                  S45        g )Nr   r
   r   r   r<   s(                       re   z<i2z>i2typestrr   )   strides)r   r_   F)r   r.   rq   __array_interface__rr   
isinstancedictrT   get_sdl_byteorder
LIL_ENDIANr1   _samples_address)r)   r\   dr   s       r!   test_array_interface$MixerModuleTest.test_array_interfaceL  s    

5#q3kk!12##
1d+,##%):)::GG9w/7U+9t,6S%9%95$ABr    znewbuf not implementedzpypy no likeyc                 T    [         R                  " SSS5        U R                  5         g )Nr   r
   r   r   r.   _NEWBUF_export_checkr(   s    r!   test_newbuf__one_channel(MixerModuleTest.test_newbuf__one_channelZ        	

5#q!!!#r    c                 T    [         R                  " SSS5        U R                  5         g )Nr   r
   r   r   r(   s    r!   test_newbuf__twho_channel)MixerModuleTest.test_newbuf__twho_channel`  r   r    c           	         [         R                  " 5       u  pnUS:X  a  SOSn[        U5      S-  nSSSSSS	S
SS.nXb   nSSKJn  UR
                  n	UR                  n
[        R                  " 5       [        R                  :H  nU(       a  SOSu  pSU4S U nX5-  U4SU-
  S  nU	" XS-   S9n[         R                  " US9n[        U5      U-  U-  nU
" UUR                  5      nU R                  UR                  S5        U R                  UR                   S L 5        U R                  UR                  U5        U R                  UR"                  U5        U R                  UR$                  S L 5        U R                  UR&                  S L 5        U R                  UR(                  S L 5        U R+                  UR,                  5        U R                  UR.                  UR0                  5        U
" UUR2                  5      nU R                  UR                  S5        U R                  UR                   S L 5        U R                  UR                  U5        U R                  UR"                  U5        U R                  UR$                  S L 5        U R                  UR&                  S L 5        U R                  UR(                  S L 5        U R+                  UR,                  5        U R                  UR.                  UR0                  5        U
" UUR4                  5      nU R                  UR                  S5        U R                  UR                   U5        U R                  UR                  U5        U R                  UR"                  U5        U R                  UR$                  S L 5        U R                  UR&                  S L 5        U R                  UR(                  S L 5        U R+                  UR,                  5        U R                  UR.                  UR0                  5        U
" UUR6                  5      nU R                  UR                  U5        U R                  UR                   S L 5        U R                  UR                  U5        U R                  UR"                  U5        U R                  UR$                  U5        U R                  UR&                  S L 5        U R                  UR(                  S L 5        U R+                  UR,                  5        U R                  UR.                  UR0                  5        U
" UUR8                  5      nU R                  UR                  U5        U R                  UR                   S L 5        U R                  UR                  U5        U R                  UR"                  U5        U R                  UR$                  U5        U R                  UR&                  U5        U R                  UR(                  S L 5        U R+                  UR,                  5        U R                  UR.                  UR0                  5        U
" UUR:                  5      nU R                  UR                  U5        U R                  UR                   U5        U R                  UR                  U5        U R                  UR"                  S5        U R                  UR$                  U5        U R                  UR&                  U5        U R                  UR(                  S L 5        U R+                  UR,                  5        U R                  UR.                  UR0                  5        U
" UUR:                  5      nU R                  UR                  U5        U R                  UR                   U5        U R                  UR                  U5        U R                  UR"                  U5        U R                  UR$                  UR$                  5        U R                  UR&                  U5        U R                  UR(                  S L 5        U R+                  UR,                  5        U R                  UR.                  UR0                  5        U
" UUR<                  5      nU R                  UR                  U5        U R                  UR                   S L 5        U R                  UR&                  U5        U
" UUR>                  5      nU R                  UR                  U5        U R                  UR                   S L 5        U R                  UR&                  U5        US:X  ai  U
" UUR@                  5      nU R                  UR                  S5        U R                  UR                   S L 5        U R                  UR&                  U5        g U RC                  [D        U
UUR@                  5        g )Nr   r   r   Bbz=Hz=hz=Iz=iz=Qz=q)r   r   r   r
   r   i@   ir   )buftools)<>)r   r   
   rO   )r   r   )#r   r0   r2   pygame.tests.test_utilsr   ExporterImporterrT   r   r   rq   rt   PyBUF_SIMPLEr1   ndimrr   r   r   r   r   
suboffsetsassertFalsereadonlybufr   PyBUF_WRITABLEPyBUF_FORMATPyBUF_NDPyBUF_STRIDESPyBUF_FULL_ROPyBUF_C_CONTIGUOUSPyBUF_ANY_CONTIGUOUSPyBUF_F_CONTIGUOUSrS   BufferError)r)   r   fmtr   r   r   formatsr   r   r   r   is_lil_endianfsysfrevr   r   expr\   buflenimps                       r!   r   $MixerModuleTest._NEWBUF_export_checkf  s   #nn.8]qs8q=	
 4$$$$002f6G6GG#0Zj
Xu%&1!d(*=uCZ0kk$SH$x/sH1121%

d*+&)x0		T)*t+,$./&#"6"67sH3341%

d*+&)x0		T)*t+,$./&#"6"67sH1121%V,&)x0		T)*t+,$./&#"6"67sH--.4(

d*+&)x0E*t+,$./&#"6"67sH2234(

d*+&)x0E*g.$./&#"6"67sH2234(V,&)q)E*g.$./&#"6"67sH2234(V,&)x0CII.g.$./&#"6"67sH7784(

d*+g.sH99:4(

d*+g.193 ; ;<CSXXq)OOCJJ$./S[['2k8S(:U:UVr    c                    [         R                  " 5       c  [         R                  " 5         [        R                   R	                  [        S5      5      n[        R                   R                  5       nUR                  U5        SnUR                  U5        [        R                  R                  US-   5        U R                  UR                  5       5        g)zHEnsure pygame.mixer.fadeout() stops playback after fading out the sound.Ndata/house_lo.wav      )r   r0   r.   rT   rq   r   find_channelplayfadeouttimewaitr   get_busy)r)   r   channelfadeout_times       r!   test_fadeoutMixerModuleTest.test_fadeout  s    >>#JJL""<0C#DE,,++-U%*+ 	))+,r    c                 *   [         R                  " 5         [        [        R                  R                  SS5      5      n[         R                  " US9n[         R                  " 5       nUS:  Ga%  [         R                  " 5       nU R                  U5        / n[        SU5       H;  n[         R                  " U5      nUR                  U5        UR                  U5        M=     [         R                  " 5       nU R                  U5        [         R                  " S5      nU R                  U5        [         R                  " SS9nU R                  U5        U H  nUR                  5         M     [         R                  " 5       nU R                  U5        g g )Nr_   r`   ra   r   T)force)r   r.   r   rj   rk   rl   rq   rH   r  assertIsNotNonerL   Channelr  appendrD   stop)r)   filenamer   num_channelsfound_channelr   
channel_idr  s           r!   test_find_channel!MixerModuleTest.test_find_channel  s6   
 	

V^ DE*--/!!..0M  / H#A|4
--
3U#( 5 "..0Mm, "..t4M  / "..T:M  /# $!..0M  /5 r    c                    [         R                  " 5       c  [         R                  " 5         [         R                  " [	        S5      5      n[         R
                  " 5       nUR                  U5        [         R                  " 5         U R                  UR                  5       5        [         R                  " 5         U R                  UR                  5       5        g)zMEnsure pygame.mixer.pause() temporarily stops playback of all sound channels.Nr  )r   r0   r.   rq   r   r  r  pauser   r  unpauserr   r)   r   r  s      r!   
test_pauseMixerModuleTest.test_pause  s     >>#JJLL)<=>$$&U 	))+, 	((*+r    c                    [         R                  " 5         [         R                  " 5       n[         R                  " U5      nU R	                  X!5        [         R                  " US-   5      nU R	                  X!5        [         R                  " S5      nU R	                  US5        [         R                  " [        US-  5      5      nU R	                  U[        US-  5      5        g)zIEnsure pygame.mixer.set_reserved() reserves the given number of channels.r   r   r   N)r   r.   rH   set_reservedr1   int)r)   rN   results      r!   test_set_reserved!MixerModuleTest.test_set_reserved   s     	

$557 ##$896 ##$81$<=6 ##A&# ##C(<q(@$AB%9A%=!>?r    c                    [         R                  " 5       c  [         R                  " 5         [        R                   R	                  [        S5      5      n[        R                   R                  S5      nUR                  U5        [        R                   R                  5         [        [        R                   R                  5       5       H?  nU R                  [        R                   R                  U5      R                  5       5        MA     g)z,Stops playback of all active sound channels.Nr  r   )r   r0   r.   rT   rq   r   r  r  r!  rL   rH   r   r  )r)   r   r  rO   s       r!   	test_stopMixerModuleTest.test_stop:  s    >>#JJL""<0C#DE,,&&q)Uv||4467AV\\11!4==?@ 8r    c                     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)z;Ensures get_sdl_mixer_version works correctly with no args.   Ntupler0  rT   r   get_sdl_mixer_versionassertIsInstancer1   rt   )r)   expected_lengthexpected_typeexpected_item_typeversionitems         r!   test_get_sdl_mixer_version*MixerModuleTest.test_get_sdl_mixer_versionE  s^     ,,446g5W7D!!$; r    c                     Sn[         n[        nS Hh  n[        R                  R	                  U5      nU R                  XR5        U R                  [        U5      U5        U H  nU R                  Xc5        M     Mj     g)z9Ensures get_sdl_mixer_version works correctly using args.r8  TFNr9  r)   r=  r>  r?  valuer@  rA  s          r!    test_get_sdl_mixer_version__args0MixerModuleTest.test_get_sdl_mixer_version__argsS  sj     "Ell88?G!!'9S\?;%%d?   #r    c                     Sn[         n[        nS Hf  n[        R                  R	                  US9nU R                  XR5        U R                  [        U5      U5        U H  nU R                  Xc5        M     Mh     g)z;Ensures get_sdl_mixer_version works correctly using kwargs.r8  rE  linkedNr9  rF  s          r!   "test_get_sdl_mixer_version__kwargs2MixerModuleTest.test_get_sdl_mixer_version__kwargsb  sm     "Ell888FG!!'9S\?;%%d?   #r    c                 L   [        5       nU R                  [        5         [        R                  R                  U5      nSSS5        U R                  [        5         [        R                  R                  US9nSSS5        g! , (       d  f       NJ= f! , (       d  f       g= f)z>Ensures get_sdl_mixer_version handles invalid args and kwargs.NrK  )r   rS   ru   rT   r   r;  )r)   invalid_boolr@  s      r!   /test_get_sdl_mixer_version__invalid_args_kwargs?MixerModuleTest.test_get_sdl_mixer_version__invalid_args_kwargsq  sq    "}y)ll88FG * y)ll888MG *) *) *)s    BB
B
B#c                     [         R                  R                  SS9n[         R                  R                  SS9nU R                  X5        g)zCEnsures get_sdl_mixer_version's linked/compiled versions are equal.TrK  FN)rT   r   r;  assertTupleEqual)r)   linked_versioncomplied_versions      r!   2test_get_sdl_mixer_version__linked_equals_compiledBMixerModuleTest.test_get_sdl_mixer_version__linked_equals_compiled{  s?    ;;4;H!<<==U=Kn?r    r   N)-r   r   r   r   r*   r6   r9   r=   r@   rE   rI   rP   rV   r   skipIfro   platform
startswithIS_PYPYr   r   rj   environgetr   r   r   r   rT   HAVE_NEWBUFr   r   r   r  r&  expectedFailurer,  r2  r5  rB  rH  rM  rQ  rW  r   r   r    r!   r#   r#   /   s   #C
C8:4,6:@ __S\\,,U35LM__W<=K8 > NK8Z!* __


()V31E!	E!NS*<C __+++-EF__Wo.$ / G$ __+++-EF__Wo.$ / G$nW`-&0P , ,&@4	A<@@N@r    r#   c                       \ rS rSr\S 5       r\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 rSrg)ChannelTypeTesti  c                 .    [         R                  " 5         g rC   )r   r.   clss    r!   
setUpClassChannelTypeTest.setUpClass  s     	

r    c                 .    [         R                  " 5         g rC   r   r&   rd  s    r!   tearDownClassChannelTypeTest.tearDownClass      

r    c                 \    [         R                  " 5       c  [         R                  " 5         g g rC   r   r0   r.   rd  s    r!   setUpChannelTypeTest.setUp       >>#JJL $r    c                     [         R                  " S5      nU R                  U[         R                  5        U R	                  UR
                  R                  S5        g)z Ensure Channel() creation works.r   r  N)r   r  r<  ChannelTyper1   	__class__r   r)   r  s     r!   test_channelChannelTypeTest.test_channel  sB    --"gu'8'89**33Y?r    c                     U R                  [        5         [        R                  " 5         SSS5        g! , (       d  f       g= f)z9Ensure exception for Channel() creation with no argument.N)rS   ru   r   r  r(   s    r!   test_channel__without_arg)ChannelTypeTest.test_channel__without_arg  s%    y)MMO *))	   5
Ac                     U R                  [        5         [        R                  " S5        SSS5        g! , (       d  f       g= f)z;Ensure exception for Channel() creation with an invalid id.r   N)rS   
IndexErrorr   r  r(   s    r!   test_channel__invalid_id(ChannelTypeTest.test_channel__invalid_id  s(    z*MM" +**s	   6
Ac                     [         R                  " 5         U R                  [        R                  S5         [         R
                  " S5        SSS5        g! , (       d  f       g= f)z<Ensure exception for Channel() creation with non-init mixer.mixer not initializedr   N)r   r&   assertRaisesRegexrT   rU   r  r(   s    r!   test_channel__before_init)ChannelTypeTest.test_channel__before_init  s9    

##FLL2IJMM! KJJs   A
A$c                 8   [         R                  " S5      n[         R                  " [        S5      5      nUR	                  U5        SnUR                  U5        [        R                  R                  US-   5        U R                  UR                  5       5        g)z9Ensure Channel.fadeout() stops playback after fading out.r   r  rd   d   N)r   r  rq   r   r  r  rT   r  r  r   r  )r)   r  r   r  s       r!   r  ChannelTypeTest.test_fadeout  sq    --"L)<=>U% 	+,))+,r    c                 v    Sn[         R                  " S5      nUR                  5       nU R                  X15        g)z/Ensure an idle channel's busy state is correct.Fr   N)r   r  r  r1   )r)   expected_busyr  busys       r!   test_get_busyChannelTypeTest.test_get_busy  s1    --"!-r    c                     [         R                  " S5      n[         R                  " [        S5      5      nUR	                  U5        U R                  UR                  5       5        g)z1Ensure an active channel's busy state is correct.r   r  N)r   r  rq   r   r  rr   r  r)   r  r   s      r!   test_get_busy__active%ChannelTypeTest.test_get_busy__active  sE    --"L)<=>U((*+r    c                 $    U R                  5         g rC   r   r(   s    r!   todo_test_get_endevent&ChannelTypeTest.todo_test_get_endevent  s     			r    c                 p   [         R                  " S5      n[         R                  " 5       u  p#nSnSn[        US-  U-  [	        U5      S-  -  5      n[         R
                  " S[        XW-  5      -  5      n[         R
                  " S[        Xg-  5      -  5      n	UR                  U5        UR                  U	5        U R                  UR                  5       R                  5       U	R                  5       5        [        R                  R                  US-   5        U R                  UR                  5       5        U R                  UR                  5       R                  5       U	R                  5       5        [        R                  R                  US-   5        U R                  UR                  5       5        g)	z4Ensure Channel.get_queue() returns any queued Sound.r   r    rd   r       r  N)r   r  r0   r0  r2   rq   r  queuer1   	get_queuers   rT   r  r  rD   	get_sound)
r)   r  r   r   r   sound_length_in_mssound_length_in_ms_2bytes_per_mssound1sound2s
             r!   test_get_queueChannelTypeTest.test_get_queue  sY   --"&+nn&6#	8 "I,8CK1<LMNWs+=+L'MMNW,@,O(PQRVf 	**,7796;L;L;NO+c12'++-. 	**,7796;L;L;NO.#56 	'++-.r    c                 4   [         R                  " S5      n[         R                  " [        S5      5      nUR	                  U5        UR                  5       nU R                  X25        UR                  5         UR                  5       nU R                  U5        g)z?Ensure Channel.get_sound() returns the currently playing Sound.r   r  N)	r   r  rq   r   r  r  r1   r!  rD   )r)   r  r   	got_sounds       r!   test_get_soundChannelTypeTest.test_get_sound  su    --"L)<=>U %%'	* 	%%'	)$r    c                 v    Sn[         R                  " S5      nUR                  5       nU R                  X15        g)z+Ensure a channel's volume can be retrieved.      ?r   N)r   r  
get_volumeassertAlmostEqual)r)   expected_volumer  volumes       r!   test_get_volumeChannelTypeTest.test_get_volume  s1    --"##%v7r    c                    [         R                  " 5       c  [         R                  " 5         [        R                   R	                  [        S5      5      nUR                  5       nUR                  5         U R                  UR                  5       SS9  UR                  5         U R                  UR                  5       SS9  UR                  5         g)z1
Test if the Channel can be paused and unpaused.
Nr  z&Channel should be paused but it's not.)msgz(Channel should be unpaused but it's not.)r   r0   r.   rT   rq   r   r  r)  rr   r  r*  r!  r+  s      r!   test_pause_unpause"ChannelTypeTest.test_pause_unpause  s     >>#JJL""<0C#DE**,$L 	 	
 	$N 	 	
 	

r    c                    [         R                  " [        S5      5      nUR                  5       n[         R                  " 5         U R                  [        R                  S5         UR                  5         SSS5        U R                  [        R                  S5         UR                  5         SSS5        g! , (       d  f       NH= f! , (       d  f       g= f)z;
Ensure exception for Channel.pause() with non-init mixer.
r  r  N)
r   rq   r   r  r&   r  rT   rU   r)  r*  r+  s      r!   test_pause_unpause__before_init/ChannelTypeTest.test_pause_unpause__before_init  s     L)<=>**,

##FLL2IJMMO K ##FLL2IJOO KJ KJ KJs   %B8C	8
C	
Cc                 D   [         R                  R                  S5      S:X  a  U R                  S5        [        R
                  " S5      n[        R                  " 5       u  p#nSnSnSn[        US-  U-  [        U5      S	-  -  5      n[        R                  " S
[        XX-  5      -  5      n	[        R                  " S
[        Xh-  5      -  5      n
[        R                  " S
[        Xx-  5      -  5      nUR                  U	5        UR                  U
5        [        R                  R                  US-   5        U R                  UR!                  5       5        U R#                  UR%                  5       U
5        U R'                  UR)                  5       5        [        R                  R                  US-   5        UR                  U	5        U R                  UR!                  5       5        U R#                  UR%                  5       U	5        [        R                  R                  US-   5        UR                  U	5        UR                  U
5        UR                  U5        U R'                  UR)                  5       5        [        R                  R                  US-   5        U R+                  UR!                  5       5        UR                  U	5        UR                  U
5        UR-                  5         U R'                  UR)                  5       5        U R+                  UR!                  5       5        UR                  U	5        UR                  U
5        UR                  U5        U R#                  UR%                  5       U	5        U R#                  UR)                  5       U5        g)z,
Ensure the Channel.queue() works correctly
PYGAME_MSYS21zSkip test on MSYS2r   r  r  ,  rd   r   r  r  N)rj   r]  r^  r   r   r  r0   r0  r2   rq   r  r  rT   r  r  rr   r  r1   r  rD   r  r   r!  )r)   r  r   r   r   r  r  sound_length_in_ms_3r  r  r  sound3s               r!   
test_queueChannelTypeTest.test_queue,  s    ::>>.)S0MM./ --"&+nn&6#	8 ""I,8CK1<LMNWs+=+L'MMNW,@,O(PQRW,@,O(PQR 	Vf+c12((*+**,f5'++-.-34 	f((*+**,f5+c12 	VfV'++-.-34))+, 	Vf'++-.))+, 	Vff**,f5**,f5r    c                    [         R                  " S5      n[         R                  " [        S5      5      nUR	                  U5        UR                  5         U R                  UR                  5       5        UR                  U5        UR                  5         U R                  UR                  5       5        UR	                  U5        U R                  UR                  5       5        g )Nr   r  )
r   r  rq   r   r  r!  r   r  r  rr   r  s      r!   r5  ChannelTypeTest.test_stopf  s     --"L)<=> 	U))+,e))+,U((*+r    r   N)r   r   r   r   classmethodrf  rj  ro  rv  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r5  r   r   r    r!   rb  rb    sz       @

-.,/4%8$86t,r    rb  c                   J    \ rS rSrS rS rS r\R                  S 5       r	Sr
g)ChannelSetVolumeTesti  c                     [         R                  " 5         [        R                   R                  S5      U l        [        R                   R                  [        S5      5      U l        g )Nr   zdata/boom.wav)r   r.   rT   r  r  rq   r   r   r(   s    r!   ro  ChannelSetVolumeTest.setUp  s<    

||++A.\\''_(EF
r    c                 .    [         R                  " 5         g rC   ri  r(   s    r!   r*   ChannelSetVolumeTest.tearDown      

r    c                     U R                   R                  U R                  5        U R                   R                  S5        U R	                  U R                   R                  5       S5        g )Nrc   r  r  r   
set_volumer1   r  r(   s    r!   !test_set_volume_with_one_argument6ChannelSetVolumeTest.test_set_volume_with_one_argument  sG    $**%$002C8r    c                     U R                   R                  U R                  5        U R                   R                  SS5        U R	                  U R                   R                  5       S5        g )N333333?ffffff?)r  r  r  r(   s    r!   "test_set_volume_with_two_arguments7ChannelSetVolumeTest.test_set_volume_with_two_arguments  sK     	$**%S)002J?r    )r  r   N)r   r   r   r   ro  r*   r  r   r`  r  r   r   r    r!   r  r    s.    G
9
 @ @r    r  c                   &    \ rS rSrS rS rS rSrg)ChannelEndEventTesti  c                     [         R                  R                  5         [         R                  R                  S5        [        R
                  " 5       c  [        R                  " 5         g g )N)(   r  )rT   displayr.   set_moder   r0   r(   s    r!   ro  ChannelEndEventTest.setUp  s?    )>>#JJL $r    c                 j    [         R                  R                  5         [        R                  " 5         g rC   )rT   r  r&   r   r(   s    r!   r*   ChannelEndEventTest.tearDown  s    

r    c                 H   [         R                  " S5      n[         R                  " [        S5      5      nUR	                  U5        [
        R                  S-   nUR                  U5        UR                  5       nU R                  XC5        UR                  5         UR                  5       (       a6  [
        R                  R                  S5        UR                  5       (       a  M6  [
        R                  R                  U5      nU R!                  [#        U5      S:  5        g)z=Ensure Channel.get_endevent() returns the correct event type.r   r  r   r   N)r   r  rq   r   r  rT   	USEREVENTset_endeventget_endeventr1   r!  r  r  r  eventr^  rr   rt   )r)   r  r   	END_EVENTgot_end_eventeventss         r!   test_get_endevent%ChannelEndEventTest.test_get_endevent  s    --"L)<=>U $$q(	Y',,.2 	  KKR     !!-0Fa(r    r   N)r   r   r   r   ro  r*   r  r   r   r    r!   r  r    s    )r    r  c                   P    \ 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g)TestSoundPlayi  c                     [         R                  " 5         [        [        R                  R                  SS5      5      U l        [         R                  " U R                  S9U l        g )Nr_   r`   ra   )	r   r.   r   rj   rk   rl   r"  rq   r   r(   s    r!   ro  TestSoundPlay.setUp  s:    

$RWW\\&.%IJ[[dmm4
r    c                 .    [         R                  " 5         g rC   ri  r(   s    r!   r*   TestSoundPlay.tearDown  r  r    c                     U R                   R                  5       nU R                  U[        R                  R
                  5        U R                  UR                  5       5        g)zTest playing a sound once.N)r   r  r<  rT   r   r  rr   r  ru  s     r!   test_play_onceTestSoundPlay.test_play_once  sA    **//#gv||';';<((*+r    c                    [         R                  " 5       u  pnSn[        US-  U-  [        U5      S-  -  5      n[         R                  " S[        XE-  5      -  5      nU R                  UR                  5       US-  SS9  SnUR                  US	9nU R                  U[        R                   R                  5        [        R                  R                  XG-  S-
  5        U R                  UR                  5       5        [        R                  R                  US
-   5        U R                  UR                  5       5        g)z$Test playing a sound multiple times.r  rd   r   r  g     @@r   )places   loopsr  N)r   r0   r0  r2   rq   r  rs   r  r<  rT   r  r  r  rr   r  r   )	r)   r   r   r   r  r  r   	num_loopsr  s	            r!   test_play_multiple_times&TestSoundPlay.test_play_multiple_times  s    ',nn&6#	8 I,8CK1<LMNGc*<*K&LLM 2V ;A 	 	
 	**9*-gv||';';< 	,8C?@((*+ 	+c12))+,r    c                    [         R                  " 5       u  pnSn[        US-  U-  [        U5      S-  -  5      n[         R                  " S[        XE-  5      -  5      nUR                  SS9nU R                  U[        R                   R                  5        [        S5       HA  nU R                  UR                  5       5        [        R                  R                  U5        MC     g)	z"Test playing a sound indefinitely.r  rd   r   r  r   r  r   N)r   r0   r0  r2   rq   r  r<  rT   r  rL   rr   r  r  r  )	r)   r   r   r   r  r  r   r  _s	            r!   test_play_indefinitely$TestSoundPlay.test_play_indefinitely  s    &+nn&6#	8 I,8CK1<LMNGc*<*K&LLM**2*&gv||';';< qAOOG,,./KK/0 r    c                 D   U R                   R                  SS9nU R                  U[        R                  R
                  5        U R                  UR                  5       5        [        R                  R                  S5        U R                  UR                  5       5        g)z"Test playing a sound with maxtime.r  maxtime   N)r   r  r<  rT   r   r  rr   r  r  r  r   ru  s     r!   test_play_with_maxtime$TestSoundPlay.test_play_with_maxtime  sn    **//#/.gv||';';<((*+"))+,r    c                    U R                   R                  SS9nU R                  U[        R                  R
                  5        U R                  UR                  5       5        [        R                  R                  S5        U R                  UR                  5       S5        U R                  UR                  5       S5        [        R                  R                  S5        U R                  UR                  5       S5        g)	z"Test playing a sound with fade_ms.i  fade_msr  r  g?r  r  N)r   r  r<  rT   r   r  rr   r  r  r  assertGreaterr  
assertLessr1   ru  s     r!   test_play_with_fade_ms$TestSoundPlay.test_play_with_fade_ms  s    **//#/.gv||';';<((*+7--/5**,d3++-s3r    c                     U R                  [        5         U R                  R                  SS9  SSS5        g! , (       d  f       g= f)z(Test playing a sound with invalid loops.invalidr  NrS   ru   r   r  r(   s    r!   test_play_with_invalid_loops*TestSoundPlay.test_play_with_invalid_loops  s.    y)JJOO)O, *))	   9
Ac                     U R                  [        5         U R                  R                  SS9  SSS5        g! , (       d  f       g= f)z*Test playing a sound with invalid maxtime.r  r  Nr  r(   s    r!   test_play_with_invalid_maxtime,TestSoundPlay.test_play_with_invalid_maxtime  .    y)JJOOIO. *))r  c                     U R                  [        5         U R                  R                  SS9  SSS5        g! , (       d  f       g= f)z*Test playing a sound with invalid fade_ms.r  r   Nr  r(   s    r!   test_play_with_invalid_fade_ms,TestSoundPlay.test_play_with_invalid_fade_ms  r  r  )r"  r   N)r   r   r   r   ro  r*   r  r  r  r  r  r	  r  r  r   r   r    r!   r  r    s4    5
,-21-4-
/
/r    r  c                       \ rS rSr\S 5       rS rS rS 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g)SoundTypeTesti  c                 .    [         R                  " 5         g rC   ri  rd  s    r!   rj  SoundTypeTest.tearDownClass  rl  r    c                 \    [         R                  " 5       c  [         R                  " 5         g g rC   rn  rd  s    r!   ro  SoundTypeTest.setUp  rq  r    c                 *   [        [        R                  R                  SS5      5      n[        R
                  " U5      n[        R
                  " US9nU R                  U[        R
                  5        U R                  U[        R
                  5        g)z.Ensure Sound() creation with a filename works.r_   r`   ra   Nr   rj   rk   rl   r   rq   r<  )r)   r"  r  r  s       r!   
test_soundSoundTypeTest.test_sound$  s_    V^ DEX&(+fekk2fekk2r    c                    [        [        R                  R                  SS5      5      n[	        US5       n[
        R                  " U5      nU R                  U[
        R                  5        SSS5        g! , (       d  f       g= f)z1Ensure Sound() creation with a file object works.r_   r`   r   N)r   rj   rk   rl   r   r   rq   r<  )r)   r"  file_objr   s       r!   test_sound__from_file_object*SoundTypeTest.test_sound__from_file_object-  sW    V^ DE (D!XKK)E!!%5 "!!s   7A66
Bc                     [        [        R                  R                  SS5      5      n[        R
                  " US9n[        R
                  " U5      nU R                  U[        R
                  5        g)z4Ensure Sound() creation with a Sound() object works.r_   r`   ra   Nr  )r)   r"  	sound_objr   s       r!   test_sound__from_sound_object+SoundTypeTest.test_sound__from_sound_object7  sK    V^ DEKKX.	I&eU[[1r    c                 R   [         R                  " [        [        R                  R                  SS5      5      5      n[        R                  " U5      n[        R                  " US9nU R                  U[        R                  5        U R                  U[        R                  5        g)z9Ensure Sound() creation with a pathlib.Path object works.r_   r`   ra   N)	pathlibPathr   rj   rk   rl   r   rq   r<  )r)   rk   r  r  s       r!   test_sound__from_pathlib&SoundTypeTest.test_sound__from_pathlib@  sh    ||Lfn)MNOT"$'fekk2fekk2r    c                 $    U R                  5         g)z,Ensure Sound() creation with a buffer works.Nr  r(   s    r!   todo_test_sound__from_buffer*SoundTypeTest.todo_test_sound__from_bufferH  s    		r    c           	          [        S[        [        R                  R	                  SS5      5      5      n[
        R                  " U5      nU R                  U[
        R                  5        g)z,Ensure Sound() creation with an array works.ur_   r`   N)r   r   rj   rk   rl   r   rq   r<  )r)   array1r  s      r!   test_sound__from_array$SoundTypeTest.test_sound__from_arrayL  sD    sLfn)MNOV$fekk2r    c                     U R                  [        5         [        R                  " 5         SSS5        g! , (       d  f       g= f)z>Ensure exception raised for Sound() creation with no argument.N)rS   ru   r   rq   r(   s    r!   test_sound__without_arg%SoundTypeTest.test_sound__without_argR  s%    y)KKM *))r{  c                    [         R                  " 5         [        [        R                  R                  SS5      5      nU R                  [        R                  S5         [         R                  " US9  SSS5        g! , (       d  f       g= f)zAEnsure exception raised for Sound() creation with non-init mixer.r_   r`   r  ra   N)
r   r&   r   rj   rk   rl   r  rT   rU   rq   )r)   r"  s     r!   test_sound__before_init%SoundTypeTest.test_sound__before_initW  sR    

V^ DE##FLL2IJKKX& KJJs   A==
Bz	pypy skipc                 \    SSK JnJnJn  UR                  nX$l        U/Ul        SnU" U5      n[        R                  " US9nU R                  UR                  U5        [        R                  R                  5         U R                  [        R                  S5         UR                    SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                    SSS5        f ! , (       d  f       f = f= f)z!Test the _samples_address getter.r   )	pythonapic_void_p	py_object   abcdefghre   r  N)ctypesr9  r:  r;  PyBytes_FromStringrestypeargtypesr   rq   assertNotEqualr   rT   r&   r  rU   )r)   r9  r:  r;  Bytes_FromStringsamplessample_bytesr\   s           r!   test_samples_address"SoundTypeTest.test_samples_address_  s    	%==(;;'/$)2%!G+G4L++W-C 4 4lCLL''6MN$$ ONN LL''6MN$$ ONNs0   AC B44
C?D+D	D+
D($D+c                     [          H  n[        R                  R                  5         [        R                  R	                  US9  [        [        R                  R                  SS5      5      n[        R                  " US9nUR                  5       n[        R                  R                  5       u  pVn[        U5      S-  n[        [        U5      5      U-  U-  U-  n	U R                  XR!                  5       5        M     [        R                  R                  5         U R#                  [        R$                  S5         WR!                  5         SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R#                  [        R$                  S5         WR!                  5         SSS5        f ! , (       d  f       f = f= f)z-Tests if get_length returns a correct length.)r   r_   	punch.wavra   r   r  N)SIZESrT   r   r&   r.   r   rj   rk   rl   rq   r[   r0   r2   floatrt   r  rs   r  rU   )
r)   r   r"  r   sound_bytesmix_freqmix_bitsmix_channels	mix_bytesr=  s
             r!   test_get_lengthSoundTypeTest.test_get_lengtht  sI   	#!!#!!t!,'V[(IJ2 $mmo39<<3H3H3J0LMA-	#k*+h6B\Q   &&8H8H8JK   LL''6MN  " ONN LL''6MN  " ONNs0   D E+  E
E(+?G*G;	G
GGc                     [        [        R                  R                  SS5      5      n[        R
                  " US9nU R                  UR                  5       S5        UR                  5         U R                  UR                  5       S5        UR                  5         U R                  UR                  5       S5        UR                  5         U R                  UR                  5       S5        [        R                  R                  5         U R                  [        R                  S5         UR                  5         SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                  5         SSS5        f ! , (       d  f       f = f= f)	zb
Tests if Sound.get_num_channels returns the correct number
of channels playing a specific sound.
r_   r`   ra   r   r   r   r  N)r   rj   rk   rl   r   rq   r1   rH   r  r!  rT   r&   r  rU   )r)   r"  r   s      r!   test_get_num_channels#SoundTypeTest.test_get_num_channels  s+   
	)#BGGLL$HIHKKX.EU335q9JJLU335q9JJLU335q9JJLU335q9LL''6MN&&( ONN LL''6MN&&( ONNs0   C-E -E
E?GF1(	G1
F?;Gc                 p    Sn[        [        R                  R                  SS5      5      n[        R
                  " US9nUR                  5       nU R                  XA5        [        R                  R                  5         U R                  [        R                  S5         UR                  5         SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                  5         SSS5        f ! , (       d  f       f = f= f)z)Ensure a sound's volume can be retrieved.r  r_   r`   ra   r  N)r   rj   rk   rl   r   rq   r  r  rT   r&   r  rU   r)   r  r"  r   r  s        r!   r  SoundTypeTest.test_get_volume  s    	#!O#BGGLL$HIHKKX.E%%'F""6;LL''6MN  " ONN LL''6MN  " ONNs0   A C  B::
C?D5
D$	D5$
D2.D5c                     Sn[        [        R                  R                  SS5      5      n[        R
                  " US9nUR                  S5        UR                  5       nU R                  XA5        [        R                  R                  5         U R                  [        R                  S5         UR                  5         SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                  5         SSS5        f ! , (       d  f       f = f= f)z7Ensure a sound's volume can be retrieved while playing.r  r_   r`   ra   r   r  N)r   rj   rk   rl   r   rq   r  r  r  rT   r&   r  rU   rV  s        r!   test_get_volume__while_playing,SoundTypeTest.test_get_volume__while_playing  s    	#!O#BGGLL$HIHKKX.EJJrN%%'F""6;LL''6MN  " ONN LL''6MN  " ONNs0   A1C 1C
C?ED5,	E5
E?Ec           
          Sn[        [        R                  R                  SS5      5      n[        R
                  " US9nUR                  5       nSU4SSSS	S
SSSS4
nU H4  u  pgUR                  U5        U R                  UR                  5       XqS9  M6     [        R                  R                  5         U R                  [        R                  S5         UR                  S5        SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                  S5        SSS5        f ! , (       d  f       f = f= f)z#Ensure a sound's volume can be set.      ?r_   r`   ra   r   r   g        {Gz?r_  皙?ra  rc   rc   ?rd  Gz?rf  r   r  皙?r  g       @r  deltar  r   N)r   rj   rk   rl   r   rq   r  r  r  rT   r&   r  rU   r)   float_deltar"  r   current_volumevolumesvolume_set_valuer  s           r!   test_set_volumeSoundTypeTest.test_set_volume  s1   	$#K#BGGLL$HIHKKX.E"--/N ^$G 6=1   !12&&$$& '  6= LL''6MN  # ONN LL''6MN  # ONNs0   BD C22
D ?E.E	E.
E+'E.c           
           Sn[        [        R                  R                  SS5      5      n[        R
                  " US9nUR                  5       nSU4SSSS	S
SSSS4
nUR                  SS9  U H4  u  pgUR                  U5        U R                  UR                  5       XqS9  M6     [        R                  R                  5         U R                  [        R                  S5         UR                  S5        SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                  S5        SSS5        f ! , (       d  f       f = f= f)z1Ensure a sound's volume can be set while playing.r\  r_   r`   ra   r   r]  r^  r`  rb  rc  re  rg  rh  rj  r  rk  r  r   N)r   rj   rk   rl   r   rq   r  r  r  r  rT   r&   r  rU   rm  s           r!   test_set_volume__while_playing,SoundTypeTest.test_set_volume__while_playing  s?   	$#K#BGGLL$HIHKKX.E"--/N ^$G JJRJ 5<1   !12&&$$& '  6= LL''6MN  # ONN LL''6MN  # ONNs0   B&D &D
D?E=E,#	E=,
E:6E=c                     Sn[        [        R                  R                  SS5      5      n[        R
                  " US9nUR                  5         U R                  UR                  5       U5        [        R                  R                  5         U R                  [        R                  S5         UR                  5         SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                  5         SSS5        f ! , (       d  f       f = f= f)z4Ensure stop can be called while not playing a sound.r   r_   r`   ra   r  N)r   rj   rk   rl   r   rq   r!  r1   rH   rT   r&   r  rU   r)   expected_channelsr"  r   s       r!   r5  SoundTypeTest.test_stop  s    	 !#BGGLL$HIHKKX.EJJLU3357HILL''6MN

 ONN LL''6MN

 ONNs0   A/C /C		
C?ED3*	E3
E=Ec                     Sn[        [        R                  R                  SS5      5      n[        R
                  " US9nUR                  S5        UR                  5         U R                  UR                  5       U5        [        R                  R                  5         U R                  [        R                  S5         UR                  5         SSS5        g! , (       d  f       g= f! [        R                  R                  5         U R                  [        R                  S5         WR                  5         SSS5        f ! , (       d  f       f = f= f)z"Ensure stop stops a playing sound.r   r_   r`   ra   r   r  N)r   rj   rk   rl   r   rq   r  r!  r1   rH   rT   r&   r  rU   rx  s       r!   test_stop__while_playing&SoundTypeTest.test_stop__while_playing  s    	 !#BGGLL$HIHKKX.EJJrNJJLU3357HILL''6MN

 ONN LL''6MN

 ONNs0   B C+  C
C(+?E*E;	E
EEc                 J    Sn[         R                  " US9nUR                  5       nU R                  U[        5        U R                  X15        [        R                   R                  5         U R                  [        R                  S5         UR                  5         SSS5        g! , (       d  f       g= f! [        R                   R                  5         U R                  [        R                  S5         WR                  5         SSS5        f ! , (       d  f       f = f= f)z.Ensure get_raw returns the correct bytestring.r<  re   r  N)
r   rq   r[   r<  bytesr1   rT   r&   r  rU   )r)   rC  r\   raws       r!   test_get_rawSoundTypeTest.test_get_raw!  s    	!G++W-C++-C!!#u-S*LL''6MN ONN LL''6MN ONNs0   AB8 B''
B58?D"7D	D"
DD"c                      " S S[         R                  5      n[        [        R                  R                  SS5      5      nU" U5      n UR                  5         g ! [         a    U R                  S5         g f = f)Nc                   (   ^  \ rS rSrU 4S jrSrU =r$ )>SoundTypeTest.test_correct_subclassing.<locals>.CorrectSublassi1  c                     > [         TU ]  US9  g )Nra   )super__init__)r)   rb   rt  s     r!   r  GSoundTypeTest.test_correct_subclassing.<locals>.CorrectSublass.__init__2  s     d +r    r   )r   r   r   r   r  r   __classcell__)rt  s   @r!   CorrectSublassr  1  s    , ,r    r  r_   r`   z#This should not raise an exception.)	r   rq   r   rj   rk   rl   r  	Exceptionr   )r)   r  r"  corrects       r!   test_correct_subclassing&SoundTypeTest.test_correct_subclassing0  sd    	,U[[ 	,  V^ DE *	=  	=II;<	=s   A A;:A;c                      " S S[         R                  5      nU" 5       nU R                  [        UR                  5        g )Nc                       \ rS rSrS rSrg)BSoundTypeTest.test_incorrect_subclassing.<locals>.IncorrectSuclassi>  c                     g rC   r   r(   s    r!   r  KSoundTypeTest.test_incorrect_subclassing.<locals>.IncorrectSuclass.__init__?  s    r    r   N)r   r   r   r   r  r   r   r    r!   IncorrectSuclassr  >  s    r    r  )r   rq   rS   RuntimeErrorr  )r)   r  	incorrects      r!   test_incorrect_subclassing(SoundTypeTest.test_incorrect_subclassing=  s2    	u{{ 	 %&	,	(<(<=r    r   N)r   r   r   r   r  rj  ro  r  r  r#  r(  r+  r0  r3  r6  r   rY  r\  rE  rP  rS  r  rY  rr  ru  r5  r|  r  r  r  r   r   r    r!   r  r    s     36233
' __Wk*% +%(#.)*## $B $D =>r    r  c                   &    \ rS rSrS rS rS rSrg)TestSoundFadeoutiG  c                 n    [         R                  " 5       c  [        R                   R                  5         g g rC   )r   r0   rT   r.   r(   s    r!   ro  TestSoundFadeout.setUpH  s$    >>#LL $r    c                 @    [         R                  R                  5         g rC   rT   r   r&   r(   s    r!   r*   TestSoundFadeout.tearDownL      r    c                 <   [        [        R                  R                  SS5      5      n[        R
                  " US9nUR                  5       nUR                  S5        [        R                  R                  S5        U R                  UR                  5       5        g)zaTests if fadeout stops sound playback after fading it out over the time argument in milliseconds.r_   rH  ra   rd   i  N)r   rj   rk   rl   r   rq   r  r  rT   r  r  r   r  )r)   r"  r   r  s       r!   test_fadeout_with_valid_time-TestSoundFadeout.test_fadeout_with_valid_timeO  si    V[ AB***,))+,r    r   N)r   r   r   r   ro  r*   r  r   r   r    r!   r  r  G  s     -r    r  c                   H    \ 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g)TestGetBusyiu  z)Test pygame.mixer.get_busy.

|tags:slow|
c                 @    [         R                  R                  5         g rC   )rT   r   r.   r(   s    r!   ro  TestGetBusy.setUp{  r  r    c                 @    [         R                  R                  5         g rC   r  r(   s    r!   r*   TestGetBusy.tearDown~  r  r    c                 ^    U R                  [        R                  R                  5       5        g)z<
Test that get_busy returns False when no sound is playing.
N)r   rT   r   r  r(   s    r!   test_no_sound_playing!TestGetBusy.test_no_sound_playing  s     	..01r    c                    [         R                  R                  [        S5      5      nUR	                  5         [
        R                  " S5        U R                  [         R                  R                  5       5        UR                  5         g)z<
Test that get_busy returns True when one sound is playing.
r  皙?N
rT   r   rq   r   r  r  sleeprr   r  r!  r)   r   s     r!   test_one_sound_playing"TestGetBusy.test_one_sound_playing  sT     ""<0C#DE



3--/0

r    c                    [         R                  R                  [        S5      5      n[         R                  R                  [        S5      5      nUR	                  5         UR	                  5         [
        R                  " S5        U R                  [         R                  R                  5       5        UR                  5         UR                  5         g)zC
Test that get_busy returns True when multiple sounds are playing.
r  r  Nr  r)   r  r  s      r!   test_multiple_sounds_playing(TestGetBusy.test_multiple_sounds_playing  s     ##L1D$EF##L1D$EF

3--/0r    c                    [         R                  R                  [        S5      5      n[         R                  R                  [        S5      5      nUR	                  5         UR	                  5         [
        R                  " S5        UR                  5         UR                  5         [
        R                  " S5        U R                  [         R                  R                  5       5        g)z?
Test that get_busy returns False when all sounds are stopped.
r  r  N)
rT   r   rq   r   r  r  r  r!  r   r  r  s      r!   test_all_sounds_stopped#TestGetBusy.test_all_sounds_stopped  s     ##L1D$EF##L1D$EF

3

3..01r    c                    [         R                  R                  [        S5      5      n[         R                  R                  [        S5      5      nUR	                  5         UR	                  5         [
        R                  " S5        UR                  S5        UR                  S5        [
        R                  " S5        U R                  [         R                  R                  5       5        g)zL
Test that get_busy returns False when all sounds are stopped with
fadeout.
r  r  r  r  N)
rT   r   rq   r   r  r  r  r  r   r  r  s      r!   $test_all_sounds_stopped_with_fadeout0TestGetBusy.test_all_sounds_stopped_with_fadeout  s    
 ##L1D$EF##L1D$EF

3ss

3..01r    c                    [         R                  R                  [        S5      5      nUR	                  SS9  [
        R                  " S5        U R                  [         R                  R                  5       5        UR                  5         g)z=Tests that get_busy() returns True when a sound is fading outr  rd   r   ri  Nr  r  s     r!   test_sound_fading_out!TestGetBusy.test_sound_fading_out  sW    ""<0C#DE

4
 

3--/0

r    r   N)r   r   r   r   r   ro  r*   r  r  r  r  r  r  r   r   r    r!   r  r  u  s/    
222r    r  __main__)ro   rj   r   r&  rZ  r  r   r   r   rT   r   python_implementationr\  FREQUENCIESrI  CHANNELSBUFFERSCONFIGSr/   r   TestCaser#   rb  r  r  r  r  r  r  r   main)r   sr   s   000r!   <module>r     so   
 	      0  
H224
4 +q6&  A.  / / ba1	M Q	@h'' Q	@nw,h'' w,t@8,, @.)(++ )HY/H%% Y/xm>H%% m>`	-x(( -\L(## Lb zMMO ]-s   #E