
    i	B                         d dl Z d dlZ G d de j                        Z G d de j                        Z G d de j                        Z G d d	e j                        Zed
k(  r e j                          yy)    Nc                   6    e Zd ZdgZd Zd Zd Zd Zd Zd Z	y)	MidiInputTestinteractivec                     dd l }|j                  j                          |j                  j                         }|dk7  r!|j                  j	                  |      | _        y d | _        y Nr   )pygame.midimidiinitget_default_input_idInput
midi_input)selfpygamein_ids      `/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pygame/tests/midi_test.pysetUpzMidiInputTest.setUp
   sK    002B;$kk//6DO"DO    c                     | j                   r| j                   j                          t        j                  j	                          y N)r   closer   r
   quitr   s    r   tearDownzMidiInputTest.tearDown   s)    ??OO!!#r   c                 B   t         j                  j                         }| j                  r&| j	                  | j                  j
                  |       t         j                  j                         }| j                  t         j                  j                  t         j                  j                  |       | j                  t         j                  j                  t         j                  j                  d       | j                  t         j                  j                  t         j                  j                  d       | j                  t        t         j                  j                  d       | j                  t        t         j                  j                  t        dd             y Ni1#  r   1234   c   )r   r
   r   r   assertEqual	device_idget_default_output_idassertRaisesMidiExceptionr   	TypeErrorOverflowErrorpowr   is     r   
test_Inputz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                 .   | j                   s| j                  d       | j                  | j                   j                                t        j
                  j                          | j                  t        | j                   j                         d | _         y NNo midi Input device)	r   skipTestassertFalsepollr   r
   r   r#   RuntimeErrorr   s    r   	test_pollzMidiInputTest.test_poll(   sd    MM01--/0 	,(<(<=r   c                 8   | j                   s| j                  d       | j                   j                  d      }| j                  |g        t        j
                  j                          | j                  t        | j                   j                  d       d | _         y )Nr-      4   )	r   r.   readr    r   r
   r   r#   r1   )r   r6   s     r   	test_readzMidiInputTest.test_read4   so    MM01##A&r" 	,(<(<bAr   c                    | j                   s| j                  d       | j                  | j                   j                         | j                   j	                          | j                  | j                   j                         y r,   )r   r.   assertIsNotNone_inputr   assertIsNoner   s    r   
test_closezMidiInputTest.test_closeA   sV    MM01T__334$//001r   N)
__name__
__module____qualname____tags__r   r   r*   r2   r7   r<    r   r   r   r      s(    H#
H
2r   r   c                   Z    e Zd ZdgZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)MidiOutputTestr   c                     dd l }|j                  j                          |j                  j                         }|dk7  r!|j                  j	                  |      | _        y d | _        y r   )r	   r
   r   r"   Outputmidi_output)r   r   m_out_ids      r   r   zMidiOutputTest.setUpM   sM    ;;446r>%{{11(;D#Dr   c                     | j                   r| j                   j                          t        j                  j	                          y r   )rF   r   r   r
   r   r   s    r   r   zMidiOutputTest.tearDownW   s-    ""$r   c                 B   t         j                  j                         }| j                  r&| j	                  | j                  j
                  |       t         j                  j                         }| j                  t         j                  j                  t         j                  j                  |       | j                  t         j                  j                  t         j                  j                  d       | j                  t         j                  j                  t         j                  j                  d       | j                  t        t         j                  j                  d       | j                  t        t         j                  j                  t        dd             y r   )r   r
   r"   rF   r    r!   r   r#   r$   rE   r%   r&   r'   r(   s     r   test_Outputz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                 
   | j                   r| j                   }|j                  ddd       |j                  ddd       | j                  t              5 }|j                  ddd       d d d        | j                  t        j                        d       | j                  t              5 }|j                  ddd       d d d        | j                  t        |j                        d       y y # 1 sw Y   xY w# 1 sw Y   <xY w)Nr4      r      Channel not between 0 and 15.r   )rF   note_onnote_offr#   
ValueErrorr    str	exceptionr   outcms      r   test_note_offzMidiOutputTest.test_note_offk   s    ""CKK2q!LLB""":. ("QB'(S.0OP"":. ("QB'(S.0OP ( (( (   C-*C9-C69Dc                 
   | j                   r| j                   }|j                  ddd       |j                  ddd       | j                  t              5 }|j                  ddd       d d d        | j	                  t        j                        d       | j                  t              5 }|j                  ddd       d d d        | j	                  t        |j                        d       y y # 1 sw Y   xY w# 1 sw Y   <xY w)	Nr4   rL   r   *   
   rM   rN   r   )rF   rO   r#   rQ   r    rR   rS   rT   s      r   test_note_onzMidiOutputTest.test_note_onw   s    ""CKK2q!KK2r""":. '"Ar2&'S.0OP"":. '"Ar2&'S.0OP ' '' 'rX   c                    | j                   s| j                  d       | j                   }|j                  d       |j                  dd       | j                  t              5 }|j                  d       d d d        | j                  t        j                        d       | j                  t              5 }|j                  d       d d d        | j                  t        |j                        d	       | j                  t              5 }|j                  dd
       d d d        | j                  t        |j                        d       | j                  t              5 }|j                  dd       d d d        | j                  t        |j                        d       y # 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   TxY w)NNo midi devicer4   rZ   r   channelizUndefined instrument id: -6   zUndefined instrument id: 156r   rN      )rF   r.   set_instrumentr#   rQ   r    rR   rS   rT   s      r   test_set_instrumentz"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!7F.F: G!F+.F7:GGc                    | j                   s| j                  d       | j                   }|j                  g ddgg       |j                  dgdgg       |j                  g ddgg ddgg       |j                  g        t        d      D cg c]  }dd	|d
z  gdd
|z  z   g }}|j                  |       t        d      D cg c]  }dd	|d
z  gdd
|z  z   g }}| j	                  t
        |j                  |       | j	                  t              5 }|j                  d       d d d        d}| j                  t        j                        |       | j	                  t              5 }|j                  dg       d d d        | j                  t        |j                        |       y c c}w c c}w # 1 sw Y   xY w# 1 sw Y   ExY w)Nr^   )   r   r    N  rf   )   <   d   iP  i   rh   ri   rj   i  z
Non sens ?z2unsupported operand type(s) for &: 'str' and 'int'zHey what's that?)
rF   r.   writeranger#   
IndexErrorr%   r    rR   rS   )r   rU   r)   verrry_longtoo_longrV   	error_msgs          r   
test_writezMidiOutputTest.test_write   s   MM*+		L%()*		TFE?#$ 			L%(?E*BCD		"GLT{S!r1s7+US1W_=SS		+DI$KPqdBC(%#'/:PP*cii:y) 	$RIIl#	$H	R\\*I6y) 	,RII)*+	,R\\*I6 T Q	$ 	$
	, 	,s$   F+F0F5*G5F>G
c                     | j                   s| j                  d       | j                   }|j                  d       |j                  ddd       |j                  ddd       |j                  d       y )Nr^   rf   rh   A   rj      )rF   r.   write_shortr   rU   s     r   test_write_shortzMidiOutputTest.test_write_short   s[    MM*+b#&b#&r   c                     | j                   s| j                  d       | j                   }|j                  t        j                  j                         g d       y )Nr^   )   }   rb               )rF   r.   write_sys_exr   r
   timerv   s     r   test_write_sys_exz MidiOutputTest.test_write_sys_ex   sA    MM*+))+-WXr   c                    | j                   s| j                  d       | j                   }| j                  t              5 }|j	                  dd       d d d        | j                  t        j                        d       | j                  t              5 }|j	                  dd       d d d        | j                  t              5 }|j	                  dd       d d d        | j                  t        |j                        d	       | j                  t              5 }|j	                  d
d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   wxY w# 1 sw Y   y xY w)Nr^   r4   r   r_   rN   rb   i   z=Pitch bend value must be between -8192 and +8191, not -10001.i)  r   )rF   r.   r#   rQ   
pitch_bendr    rR   rS   rT   s      r   test_pitch_bendzMidiOutputTest.test_pitch_bend   s1   MM*+z* 	*bNN1bN)	*R\\*,KLz* 	*bNN1bN)	*z* 	&bNN61%	&N	
 z* 	%bNN5!$	% 	%	* 	*	* 	*	& 	&	% 	%s/   D7EEE7E EEE$c                    | j                   s| j                  d       | j                  | j                   j                         | j                   j	                          | j                  | j                   j                         y )Nr^   )rF   r.   r9   _outputr   r;   r   s    r   r<   zMidiOutputTest.test_close   s^    MM*+T--556 $**223r   c                 
   | j                   s| j                  d       | j                  | j                   j                  d       | j                   j	                          | j                  | j                   j                  d       y )Nr^   r   r   )rF   r.   r    _abortedabortr   s    r   
test_abortzMidiOutputTest.test_abort   sb    MM*+))22A6 ))22A6r   N)r=   r>   r?   r@   r   r   rJ   rW   r\   rd   rq   rw   r   r   r<   r   rA   r   r   rC   rC   J   sJ    H$
I
Q
QM&7:
Y%(47r   rC   c                   R    e Zd ZdZdgZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)MidiModuleTestzMidi module tests that require midi hardware or midi.init().

    See MidiModuleNonInteractiveTest for non-interactive module tests.
    r   c                 @    dd l }|j                  j                          y Nr   )r	   r
   r   r   r   s     r   r   zMidiModuleTest.setUp   s    r   c                 @    t         j                  j                          y r   )r   r
   r   r   s    r   r   zMidiModuleTest.tearDown   s    r   c                     t         j                  j                         }| j                  |t               | j                  |dk\         y r   )r   r
   	get_countassertIsInstanceint
assertTruer   cs     r   test_get_countzMidiModuleTest.test_get_count   s4    KK!!#a%Qr   c                 ,   t         j                  j                         }| j                  |t               | j                  |dk\         t         j                  j                          | j                  t        t         j                  j                         y Nr   )
r   r
   r   r   r   r   r   r#   r1   r"   )r   midin_ids     r   test_get_default_input_idz(MidiModuleTest.test_get_default_input_id   s^    ;;335h,B',(I(IJr   c                 ,   t         j                  j                         }| j                  |t               | j                  |dk\         t         j                  j                          | j                  t        t         j                  j                         y r   )	r   r
   r"   r   r   r   r   r#   r1   r   s     r   test_get_default_output_idz)MidiModuleTest.test_get_default_output_id  s^    KK--/a%R ,(I(IJr   c                    t         j                  j                         }|dk7  r[t         j                  j                  |      \  }}}}}| j	                  |d       | j	                  |d       | j	                  |d       t         j                  j                         }|dk7  r]t         j                  j                  |      }|\  }}}}}| j	                  |d       | j	                  |d       | j	                  |d       t         j                  j                         }	t        |	      D ]0  }
| j                  t         j                  j                  |
             2 t         j                  j                  |	      }| j                  |       y )Nr   r   r   )
r   r
   r"   get_device_infor    r   r   rl   r9   r;   )r   an_idinterfnameinputoutputopenedan_in_idrout_of_rangenuminfos               r   test_get_device_infoz#MidiModuleTest.test_get_device_info  s>   113B;28++2M2Me2T/FD%VQ'UA&VQ';;335r>++H5A23/FD%VQ'UA&VQ'{{,,.& 	CC  !<!<S!AB	C{{**<8$r   c                    t         j                  j                          | j                  t        t         j                  j
                         t         j                  j                          t         j                  j                          t         j                  j                          t         j                  j                          | j                  t         j                  j                                y r   )	r   r
   r   r#   r1   r   r   r   get_initr   s    r   	test_initzMidiModuleTest.test_init$  s    ,(=(=>,,./r   c                    t         j                  j                          t         j                  j                          t         j                  j                          t         j                  j                          t         j                  j                          t         j                  j                          t         j                  j                          | j	                  t         j                  j                                y r   )r   r
   r   r   r/   r   r   s    r   	test_quitzMidiModuleTest.test_quit/  s    --/0r   c                 ^    | j                  t        j                  j                                y r   )r   r   r
   r   r   s    r   test_get_initzMidiModuleTest.test_get_init;  s    ,,./r   c                     t         j                  j                         }| j                  |t               | j                  d|cxk  xr
 dk         y c        y )Nr   rj   )r   r
   r   r   r   r   )r   mtimes     r   	test_timezMidiModuleTest.test_time?  s@      "eS)U(S()()r   N)r=   r>   r?   __doc__r@   r   r   r   r   r   r   r   r   r   r   rA   r   r   r   r      sD    
 H
 
KK .	0
10*r   r   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)MidiModuleNonInteractiveTestz~Midi module tests that do not require midi hardware or midi.init().

    See MidiModuleTest for interactive module tests.
    c                     dd l }y r   )r	   r   s     r   r   z"MidiModuleNonInteractiveTest.setUpL  s    r   c                    | j                  t        j                  j                  t        j                         | j                  t        j                  j                  t        j                  j                         | j                  t        j                  j                  t        j                         | j                  t        j                  j                  t        j                  j                         y)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_midiinz(MidiModuleNonInteractiveTest.test_midiinO  s     	++V]];++V]]-A-ABFKK..?FKK..0E0EFr   c                    | j                  t        j                  j                  t        j                         | j                  t        j                  j                  t        j                  j                         | j                  t        j                  j                  t        j                         | j                  t        j                  j                  t        j                  j                         y)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_midioutz)MidiModuleNonInteractiveTest.test_midiout[  s     	,,fnn=,,fmm.C.CDFKK//?FKK//1E1EFr   c                     d }| j                  t        j                  j                        5 } |        ddd       | j	                  j
                  j                  d       y# 1 sw Y   0xY w)z0Ensures the MidiException is raised as expected.c                  @    t         j                  j                  d      )NHello Midi param)r   r
   r$   rA   r   r   raiseitz@MidiModuleNonInteractiveTest.test_MidiException.<locals>.raiseitj  s    ++++,>??r   Nr   )r#   r   r
   r$   r    rS   	parameter)r   r   rV   s      r   test_MidiExceptionz/MidiModuleNonInteractiveTest.test_MidiExceptiong  s[    	@ v{{889 	RI	 	//1CD	 	s   A$$A-c                    d}d}d}d}d}d}d}t        |      }t        d      D ]d  }	t        j                  j	                  ||	      }
| j                  t        |
      |       t        |
      D ]  \  }}||   }||   }| j                  |j                  j                  d       | j                  |j                  t        j                         | j                  |j                  ||          | j                  |j                  ||          | j                  |j                  ||          | j                  |j                  ||          | j                  |j                  ||          | j                  |j                   |	        g y)z<Ensures midi events are properly converted to pygame events.r   r   r      ))rf   r   r   r   rg   ))rh   ri   i  string_datai!N  ))01234EventN)lenrl   r   r
   midis2eventsr    	enumerate	__class__r=   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_midis2eventsz.MidiModuleNonInteractiveTest.test_midis2eventsr  sl    			

 "+. q 	>I00iHIS^-@A(3 >8(^
",Y"7
   !3!3!<!<gF  >  /)2LM  1JK  1JK  1JK  !3!3Z	5JK  !1!19=>	>r   c                     d}d}||fD ]A  }| j                  t              5  t        j                  j	                  |gd      }ddd       C y# 1 sw Y   NxY w)z=Ensures midi events with missing values are handled properly.))rf   r   r   rg   )r   r   Nr#   rQ   r   r
   r   )r   midi_event_missing_datamidi_event_missing_timestampr   eventss        r   %test_midis2events__missing_event_datazBMidiModuleNonInteractiveTest.test_midis2events__missing_event_data  sj    "7'9$24PQ 	CJ"":. C11:,BC C	CC C   "AA	c                     d}d}||fD ]A  }| j                  t              5  t        j                  j	                  |gd      }ddd       C y# 1 sw Y   NxY w)z;Ensures midi events with extra values are handled properly.)rf   r   r   r   extrarg   )r   rg   r   r   Nr   )r   midi_event_extra_datamidi_event_extra_timestampr   r   s        r   #test_midis2events__extra_event_dataz@MidiModuleNonInteractiveTest.test_midis2events__extra_event_data  sj     A%F"02LM 	CJ"":. C11:,BC C	CC Cr   c                     d}| j                  t              5  t        j                  j	                  |gd      }ddd       y# 1 sw Y   yxY w)z\Ensures 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_timestampzRMidiModuleNonInteractiveTest.test_midis2events__extra_event_data_missing_timestamp  sM     .I*z* 	W[[--/Q.RTUVF	W 	W 	Ws   "AAc                    ddl m}m}m} | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d	       | j	                   |d
      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       | j	                   |d      d       y)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_conversionsz-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   N)r=   r>   r?   r   r   r   r   r   r   r   r   r   r  rA   r   r   r   r   F  s;    

G
G	E)>VCCW7r   r   __main__)	unittestr   TestCaser   rC   r   r   r=   mainrA   r   r   <module>r     s{     @2H%% @2F\7X&& \7~Z*X&& Z*zE78#4#4 E7P zHMMO r   