
    &h	B                         S SK r S SK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)    Nc                   >    \ rS rSrS/rS rS rS rS rS r	S r
S	rg
)MidiInputTest   interactivec                     SS K nUR                  R                  5         UR                  R                  5       nUS:w  a!  UR                  R	                  U5      U l        g S U l        g Nr   )pygame.midimidiinitget_default_input_idInput
midi_input)selfpygamein_ids      N/var/www/auris/envauris/lib/python3.13/site-packages/pygame/tests/midi_test.pysetUpMidiInputTest.setUp
   sK    002B;$kk//6DO"DO    c                     U R                   (       a  U R                   R                  5         [        R                  R	                  5         g N)r   closer   r   quitr   s    r   tearDownMidiInputTest.tearDown   s)    ??OO!!#r   c                 L   [         R                  R                  5       nU R                  (       a&  U R	                  U R                  R
                  U5        [         R                  R                  5       nU R                  [         R                  R                  [         R                  R                  U5        U R                  [         R                  R                  [         R                  R                  S5        U R                  [         R                  R                  [         R                  R                  S5        U R                  [        [         R                  R                  S5        U R                  [        [         R                  R                  [        SS5      5        g Ni1#  r	   1234   c   )r   r   r   r   assertEqual	device_idget_default_output_idassertRaisesMidiExceptionr   	TypeErrorOverflowErrorpowr   is     r   
test_InputMidiInputTest.test_Input   s    KK,,.??T__66: KK--/ 	&++33V[[5F5FJ&++33V[[5F5FM&++33V[[5F5FK)V[[%6%6?-):):C2JGr   c                 8   U R                   (       d  U R                  S5        U R                  U R                   R                  5       5        [        R
                  R                  5         U R                  [        U R                   R                  5        S U l         g NNo midi Input device)	r   skipTestassertFalsepollr   r   r   r&   RuntimeErrorr   s    r   	test_pollMidiInputTest.test_poll(   sd    MM01--/0 	,(<(<=r   c                 B   U R                   (       d  U R                  S5        U R                   R                  S5      nU R                  U/ 5        [        R
                  R                  5         U R                  [        U R                   R                  S5        S U l         g )Nr1      4   )	r   r2   readr#   r   r   r   r&   r5   )r   r;   s     r   	test_readMidiInputTest.test_read4   so    MM01##A&r" 	,(<(<bAr   c                    U R                   (       d  U R                  S5        U R                  U R                   R                  5        U R                   R	                  5         U R                  U R                   R                  5        g r0   )r   r2   assertIsNotNone_inputr   assertIsNoner   s    r   
test_closeMidiInputTest.test_closeA   sV    MM01T__334$//001r   )r   N)__name__
__module____qualname____firstlineno____tags__r   r   r-   r6   r<   rB   __static_attributes__ r   r   r   r      s(    H#
H
2r   r   c                   b    \ 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)MidiOutputTestJ   r   c                     SS K nUR                  R                  5         UR                  R                  5       nUS:w  a!  UR                  R	                  U5      U l        g S U l        g r   )r
   r   r   r%   Outputmidi_output)r   r   m_out_ids      r   r   MidiOutputTest.setUpM   sM    ;;446r>%{{11(;D#Dr   c                     U R                   (       a  U R                   R                  5         [        R                  R	                  5         g r   )rP   r   r   r   r   r   s    r   r   MidiOutputTest.tearDownW   s-    ""$r   c                 L   [         R                  R                  5       nU R                  (       a&  U R	                  U R                  R
                  U5        [         R                  R                  5       nU R                  [         R                  R                  [         R                  R                  U5        U R                  [         R                  R                  [         R                  R                  S5        U R                  [         R                  R                  [         R                  R                  S5        U R                  [        [         R                  R                  S5        U R                  [        [         R                  R                  [        SS5      5        g r   )r   r   r%   rP   r#   r$   r   r&   r'   rO   r(   r)   r*   r+   s     r   test_OutputMidiOutputTest.test_Output\   s    KK--/T--77; KK,,. 	&++33V[[5G5GK&++33V[[5G5GN&++33V[[5G5GL)V[[%7%7@-););SBZHr   c                 (   U R                   (       a  U R                   nUR                  SSS5        UR                  SSS5        U R                  [        5       nUR                  SSS5        S S S 5        U R                  [        WR                  5      S5        U R                  [        5       nUR                  SSS5        S S S 5        U R                  [        UR                  5      S5        g g ! , (       d  f       N= f! , (       d  f       NF= f)Nr9      r      Channel not between 0 and 15.r	   )rP   note_onnote_offr&   
ValueErrorr#   str	exceptionr   outcms      r   test_note_offMidiOutputTest.test_note_offk   s    ""CKK2q!LLB""":."QB' /S.0OP"":."QB' /S.0OP  /. /.   C2/D2
D 
Dc                 (   U R                   (       a  U R                   nUR                  SSS5        UR                  SSS5        U R                  [        5       nUR                  SSS5        S S S 5        U R	                  [        WR                  5      S5        U R                  [        5       nUR                  SSS5        S S S 5        U R	                  [        UR                  5      S5        g g ! , (       d  f       N= f! , (       d  f       NF= f)	Nr9   rY   r   *   
   rZ   r[   r	   )rP   r\   r&   r^   r#   r_   r`   ra   s      r   test_note_onMidiOutputTest.test_note_onw   s    ""CKK2q!KK2r""":."Ar2& /S.0OP"":."Ar2& /S.0OP  /. /.rf   c                    U R                   (       d  U R                  S5        U R                   nUR                  S5        UR                  SSS9  U R                  [        5       nUR                  S5        S S S 5        U R                  [        WR                  5      S5        U R                  [        5       nUR                  S5        S S S 5        U R                  [        UR                  5      S	5        U R                  [        5       nUR                  SS
5        S S S 5        U R                  [        UR                  5      S5        U R                  [        5       nUR                  SS5        S S S 5        U R                  [        UR                  5      S5        g ! , (       d  f       GN3= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nh= f)NNo midi devicer9   rh   r!   channelizUndefined instrument id: -6   zUndefined instrument id: 156r	   r[      )rP   r2   set_instrumentr&   r^   r#   r_   r`   ra   s      r   test_set_instrument"MidiOutputTest.test_set_instrument   s`   MM*+12q)z*br" +R\\*,IJz*bs# +R\\*,JKz*bq"% +R\\*,KLz*bq"% +R\\*,KL +* +* +* +*s0   %F#9F5G"G#
F25
G
G
G%c                    U R                   (       d  U R                  S5        U R                   nUR                  / SQS//5        UR                  S/S//5        UR                  / SQS// SQS//5        UR                  / 5        [        S5       Vs/ s H  nSS	US
-  /SS
U-  -   /PM     nnUR                  U5        [        S5       Vs/ s H  nSS	US
-  /SS
U-  -   /PM     nnU R	                  [
        UR                  U5        U R	                  [        5       nUR                  S5        S S S 5        SnU R                  [        WR                  5      U5        U R	                  [        5       nUR                  S/5        S S S 5        U R                  [        UR                  5      U5        g s  snf s  snf ! , (       d  f       N= f! , (       d  f       NO= f)Nrm   )   r   r    N  rv   )   <   d   iP  i   rx   ry   rz   i  z
Non sens ?z2unsupported operand type(s) for &: 'str' and 'int'zHey what's that?)
rP   r2   writeranger&   
IndexErrorr(   r#   r_   r`   )r   rb   r,   verrry_longtoo_longrc   	error_msgs          r   
test_writeMidiOutputTest.test_write   s   MM*+		L%()*		TFE?#$ 			L%(?E*BCD		"GLT{S{!r1s7+US1W_={S		+DI$KPKqdBC(%#'/:KP*cii:y)RIIl# *H	R\\*I6y)RII)*+ *R\\*I6 T Q *)
 *)s$   F6F;G 5G 
G
Gc                     U R                   (       d  U R                  S5        U R                   nUR                  S5        UR                  SSS5        UR                  SSS5        UR                  S5        g )Nrm   rv   rx   A   rz      )rP   r2   write_shortr   rb   s     r   test_write_shortMidiOutputTest.test_write_short   s[    MM*+b#&b#&r   c                     U R                   (       d  U R                  S5        U R                   nUR                  [        R                  R                  5       / SQ5        g )Nrm   )   }   rq               )rP   r2   write_sys_exr   r   timer   s     r   test_write_sys_ex MidiOutputTest.test_write_sys_ex   sA    MM*+))+-WXr   c                    U R                   (       d  U R                  S5        U R                   nU R                  [        5       nUR	                  SSS9  S S S 5        U R                  [        WR                  5      S5        U R                  [        5       nUR	                  SSS9  S S S 5        U R                  [        5       nUR	                  SS5        S S S 5        U R                  [        UR                  5      S	5        U R                  [        5       nUR	                  S
S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nrm   r9   r	   rn   r[   rq   i   z=Pitch bend value must be between -8192 and +8191, not -10001.i)  r!   )rP   r2   r&   r^   
pitch_bendr#   r_   r`   ra   s      r   test_pitch_bendMidiOutputTest.test_pitch_bend   s   MM*+z*bNN1bN) +R\\*,KLz*bNN1bN) +z*bNN61% +N	
 z*bNN5!$ +* +* +*** +*s0   D6EEE)6
E
E
E&)
E7c                    U R                   (       d  U R                  S5        U R                  U R                   R                  5        U R                   R	                  5         U R                  U R                   R                  5        g )Nrm   )rP   r2   r?   _outputr   rA   r   s    r   rB   MidiOutputTest.test_close   s^    MM*+T--556 $**223r   c                    U R                   (       d  U R                  S5        U R                  U R                   R                  S5        U R                   R	                  5         U R                  U R                   R                  S5        g )Nrm   r   r   )rP   r2   r#   _abortedabortr   s    r   
test_abortMidiOutputTest.test_abort   sb    MM*+))22A6 ))22A6r   )rP   N)rD   rE   rF   rG   rH   r   r   rV   rd   rj   rs   r   r   r   r   rB   r   rI   rJ   r   r   rL   rL   J   sJ    H$
I
Q
QM&7:
Y%(47r   rL   c                   Z    \ 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)MidiModuleTest   zMidi module tests that require midi hardware or midi.init().

See MidiModuleNonInteractiveTest for non-interactive module tests.
r   c                 @    SS K nUR                  R                  5         g Nr   )r
   r   r   r   r   s     r   r   MidiModuleTest.setUp   s    r   c                 @    [         R                  R                  5         g r   )r   r   r   r   s    r   r   MidiModuleTest.tearDown   s    r   c                     [         R                  R                  5       nU R                  U[        5        U R                  US:  5        g r   )r   r   	get_countassertIsInstanceint
assertTruer   cs     r   test_get_countMidiModuleTest.test_get_count   s4    KK!!#a%Qr   c                 ,   [         R                  R                  5       nU R                  U[        5        U R                  US:  5        [         R                  R                  5         U R                  [        [         R                  R                  5        g Nr	   )
r   r   r   r   r   r   r   r&   r5   r%   )r   midin_ids     r   test_get_default_input_id(MidiModuleTest.test_get_default_input_id   s^    ;;335h,B',(I(IJr   c                 ,   [         R                  R                  5       nU R                  U[        5        U R                  US:  5        [         R                  R                  5         U R                  [        [         R                  R                  5        g r   )	r   r   r%   r   r   r   r   r&   r5   r   s     r   test_get_default_output_id)MidiModuleTest.test_get_default_output_id  s^    KK--/a%R ,(I(IJr   c                    [         R                  R                  5       nUS:w  aY  [         R                  R                  U5      u  p#pEnU R	                  US5        U R	                  US5        U R	                  US5        [         R                  R                  5       nUS:w  a[  [         R                  R                  U5      nUu  p#pEnU R	                  US5        U R	                  US5        U R	                  US5        [         R                  R                  5       n	[        U	5       H1  n
U R                  [         R                  R                  U
5      5        M3     [         R                  R                  U	5      nU R                  U5        g )Nr	   r   r   )
r   r   r%   get_device_infor#   r   r   r|   r?   rA   )r   an_idinterfnameinputoutputopenedan_in_idrout_of_rangenuminfos               r   test_get_device_info#MidiModuleTest.test_get_device_info  s/   113B;28++2M2Me2T/F%VQ'UA&VQ';;335r>++H5A23/F%VQ'UA&VQ'{{,,.&C  !<!<S!AB '{{**<8$r   c                    [         R                  R                  5         U R                  [        [         R                  R
                  5        [         R                  R                  5         [         R                  R                  5         [         R                  R                  5         [         R                  R                  5         U R                  [         R                  R                  5       5        g r   )	r   r   r   r&   r5   r   r   r   get_initr   s    r   	test_initMidiModuleTest.test_init$  s    ,(=(=>,,./r   c                    [         R                  R                  5         [         R                  R                  5         [         R                  R                  5         [         R                  R                  5         [         R                  R                  5         [         R                  R                  5         [         R                  R                  5         U R	                  [         R                  R                  5       5        g r   )r   r   r   r   r3   r   r   s    r   	test_quitMidiModuleTest.test_quit/  s    --/0r   c                 ^    U R                  [        R                  R                  5       5        g r   )r   r   r   r   r   s    r   test_get_initMidiModuleTest.test_get_init;  s    ,,./r   c                     [         R                  R                  5       nU R                  U[        5        U R                  SUs=:*  =(       a
    S:  5        g s  5        g )Nr   rz   )r   r   r   r   r   r   )r   mtimes     r   	test_timeMidiModuleTest.test_time?  sC      "eS)U((S()()r   rJ   N)rD   rE   rF   rG   __doc__rH   r   r   r   r   r   r   r   r   r   r   rI   rJ   r   r   r   r      sD    
 H
 
KK .	0
10*r   r   c                   N    \ 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)MidiModuleNonInteractiveTestiF  zvMidi module tests that do not require midi hardware or midi.init().

See MidiModuleTest for interactive module tests.
c                     SS K ng r   )r
   r   s     r   r   "MidiModuleNonInteractiveTest.setUpL  s    r   c                    U R                  [        R                  R                  [        R                  5        U R                  [        R                  R                  [        R                  R                  5        U R                  [        R                  R                  [        R                  5        U R                  [        R                  R                  [        R                  R                  5        g)zEnsures the MIDIIN event id exists in the midi module.

The MIDIIN event id can be accessed via the midi module for backward
compatibility.
N)r#   r   r   MIDIINlocalsassertNotEqualMIDIOUTr   s    r   test_midiin(MidiModuleNonInteractiveTest.test_midiinO  s     	++V]];++V]]-A-ABFKK..?FKK..0E0EFr   c                    U R                  [        R                  R                  [        R                  5        U R                  [        R                  R                  [        R                  R                  5        U R                  [        R                  R                  [        R                  5        U R                  [        R                  R                  [        R                  R                  5        g)zEnsures the MIDIOUT event id exists in the midi module.

The MIDIOUT event id can be accessed via the midi module for backward
compatibility.
N)r#   r   r   r   r   r   r   r   s    r   test_midiout)MidiModuleNonInteractiveTest.test_midiout[  s     	,,fnn=,,fmm.C.CDFKK//?FKK//1E1EFr   c                     S nU R                  [        R                  R                  5       nU" 5         SSS5        U R	                  WR
                  R                  S5        g! , (       d  f       N5= f)z0Ensures the MidiException is raised as expected.c                  @    [         R                  R                  S5      e)NHello Midi param)r   r   r'   rJ   r   r   raiseit@MidiModuleNonInteractiveTest.test_MidiException.<locals>.raiseitj  s    ++++,>??r   Nr   )r&   r   r   r'   r#   r`   	parameter)r   r   rc   s      r   test_MidiException/MidiModuleNonInteractiveTest.test_MidiExceptiong  sT    	@ v{{889RI : 	//1CD :9s   A$$
A2c                    SnSnSnSnSnSnSn[        U5      n[        S5       GH^  n	[        R                  R	                  Xy5      n
U R                  [        U
5      U5        [        U
5       GH  u  pX{   nX   nU R                  UR                  R                  S5        U R                  UR                  [        R                  5        U R                  UR                  X   5        U R                  UR                  X   5        U R                  UR                  X   5        U R                  UR                  X   5        U R                  UR                  X   5        U R                  UR                   U	5        GM     GMa     g)z<Ensures midi events are properly converted to pygame events.r   r   r!      ))rv   r   r   r!   rw   ))rx   ry   i  string_datai!N  ))01234EventN)lenr|   r   r   midis2eventsr#   	enumerate	__class__rD   typer   statusdata1data2data3	timestampvice_id)r   	MIDI_DATA	MD_STATUSMD_DATA1MD_DATA2MD_DATA3	TIMESTAMPmidi_eventsexpected_num_eventsr$   	pg_eventsr,   pg_event
midi_eventmidi_event_datas                  r   test_midis2events.MidiModuleNonInteractiveTest.test_midis2eventsr  sP    			

 "+. qI00HIS^-@A(3(^
","7
   !3!3!<!<gF  >  /2LM  1JK  1JK  1JK  !3!3Z5JK  !1!19=  4 "r   c                     SnSnX4 HB  nU R                  [        5         [        R                  R	                  U/S5      nSSS5        MD     g! , (       d  f       MV  = f)z=Ensures midi events with missing values are handled properly.))rv   r   r   rw   )r   r   Nr&   r^   r   r   r   )r   midi_event_missing_datamidi_event_missing_timestampr  eventss        r   %test_midis2events__missing_event_dataBMidiModuleNonInteractiveTest.test_midis2events__missing_event_data  sQ    "7'9$2QJ"":.11:,B /. R..   "A
A	c                     SnSnX4 HB  nU R                  [        5         [        R                  R	                  U/S5      nSSS5        MD     g! , (       d  f       MV  = f)z;Ensures midi events with extra values are handled properly.)rv   r   r   r!   extrarw   )r   rw   r  r   Nr  )r   midi_event_extra_datamidi_event_extra_timestampr  r  s        r   #test_midis2events__extra_event_data@MidiModuleNonInteractiveTest.test_midis2events__extra_event_data  sQ     A%F"0MJ"":.11:,B /. N..r  c                     SnU R                  [        5         [        R                  R	                  U/S5      nSSS5        g! , (       d  f       g= f)zLEnsures midi events with extra data and no timestamps are handled
properly.
)r  r   Nr  )r   "midi_event_extra_data_no_timestampr  s      r   5test_midis2events__extra_event_data_missing_timestampRMidiModuleNonInteractiveTest.test_midis2events__extra_event_data_missing_timestamp  s@     .I*z*[[--/Q.RTUVF +**s   "A
Ac                    SSK JnJnJn  U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S	5        U R	                  U" S
5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        g)z8of frequencies to midi note numbers and ansi note names.r   )frequency_to_midimidi_to_frequencymidi_to_ansi_noteg     ;@   gYB@   g     Z@l   A0G   B4R   zA#5S   B5]   A6^   zA#6_   B6`   C7f   zF#7C8N)r
   r'  r(  r)  r#   )r   r'  r(  r)  s       r   test_conversions-MidiModuleNonInteractiveTest.test_conversions  sh   WW*40"5*40"5*62C8*2.5*2.5*3/8*2.5*2.5*2.6*2.5*2.5*2.6*2.5*2.5*3/7*3/6r   rJ   N)rD   rE   rF   rG   r   r   r   r   r   r  r  r   r$  r<  rI   rJ   r   r   r   r   F  s;    

G
G	E)>VCCW7r   r   __main__)	unittestr   TestCaser   rL   r   r   rD   mainrJ   r   r   <module>rB     sy     @2H%% @2F\7X&& \7~Z*X&& Z*zE78#4#4 E7P zMMO r   