o
    OZŽh	B  ã                   @   sp   d dl Z d dlZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd	„ d	e jƒZed
kr6e  ¡  dS dS )é    Nc                   @   sB   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚMidiInputTestÚinteractivec                 C   ó@   dd l }|j ¡  |j ¡ }|dkr|j |¡| _d S d | _d S ©Nr   éÿÿÿÿ)Úpygame.midiÚmidiÚinitÚget_default_input_idÚInputÚ
midi_input)ÚselfÚpygameÚin_id© r   úE/var/www/auris/lib/python3.10/site-packages/pygame/tests/midi_test.pyÚsetUp
   ó   


zMidiInputTest.setUpc                 C   ó   | j r| j  ¡  tj ¡  d S ©N)r   Úcloser   r   Úquit©r   r   r   r   ÚtearDown   ó   
zMidiInputTest.tearDownc                 C   óš   t j ¡ }| jr|  | jj|¡ t j ¡ }|  t jjt jj	|¡ |  t jjt jj	d¡ |  t jjt jj	d¡ |  t
t jj	d¡ |  tt jj	tddƒ¡ d S ©Ni1#  r   Ú1234é   éc   )r   r   r
   r   ÚassertEqualÚ	device_idÚget_default_output_idÚassertRaisesÚMidiExceptionr   Ú	TypeErrorÚOverflowErrorÚpow©r   Úir   r   r   Ú
test_Input   ó   

zMidiInputTest.test_Inputc                 C   sD   | j s|  d¡ |  | j  ¡ ¡ tj ¡  |  t| j j¡ d | _ d S ©NúNo midi Input device)	r   ÚskipTestÚassertFalseÚpollr   r   r   r#   ÚRuntimeErrorr   r   r   r   Ú	test_poll(   s   


zMidiInputTest.test_pollc                 C   sN   | j s|  d¡ | j  d¡}|  |g ¡ tj ¡  |  t| j jd¡ d | _ d S )Nr-   é   é4   )	r   r.   Úreadr    r   r   r   r#   r1   )r   r5   r   r   r   Ú	test_read4   s   


zMidiInputTest.test_readc                 C   ó:   | j s|  d¡ |  | j j¡ | j  ¡  |  | j j¡ d S r,   )r   r.   ÚassertIsNotNoneÚ_inputr   ÚassertIsNoner   r   r   r   Ú
test_closeA   s
   

zMidiInputTest.test_closeN)
Ú__name__Ú
__module__Ú__qualname__Ú__tags__r   r   r*   r2   r6   r;   r   r   r   r   r      s    
r   c                   @   sr   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚMidiOutputTestr   c                 C   r   r   )r   r   r	   r"   ÚOutputÚmidi_output)r   r   Zm_out_idr   r   r   r   M   r   zMidiOutputTest.setUpc                 C   r   r   )rB   r   r   r   r   r   r   r   r   r   W   r   zMidiOutputTest.tearDownc                 C   r   r   )r   r   r"   rB   r    r!   r
   r#   r$   rA   r%   r&   r'   r(   r   r   r   Útest_Output\   r+   zMidiOutputTest.test_Outputc                 C   sÄ   | j r`| j }| ddd¡ | ddd¡ |  t¡}| ddd¡ W d   ƒ n1 s+w   Y  |  t|jƒd¡ |  t¡}| ddd¡ W d   ƒ n1 sPw   Y  |  t|jƒd¡ d S d S )Nr3   é   r   é   úChannel not between 0 and 15.r   )rB   Únote_onZnote_offr#   Ú
ValueErrorr    ÚstrÚ	exception©r   ÚoutÚcmr   r   r   Útest_note_offk   ó   ÿÿ÷zMidiOutputTest.test_note_offc                 C   sÄ   | j r`| j }| ddd¡ | ddd¡ |  t¡}| ddd¡ W d   ƒ n1 s+w   Y  |  t|jƒd¡ |  t¡}| ddd¡ W d   ƒ n1 sPw   Y  |  t|jƒd¡ d S d S )	Nr3   rD   r   é*   é
   rE   rF   r   )rB   rG   r#   rH   r    rI   rJ   rK   r   r   r   Útest_note_onw   rO   zMidiOutputTest.test_note_onc                 C   sN  | j s|  d¡ | j }| d¡ |jddd |  t¡}| d¡ W d   ƒ n1 s,w   Y  |  t|jƒd¡ |  t¡}| d¡ W d   ƒ n1 sOw   Y  |  t|jƒd	¡ |  t¡}| dd
¡ W d   ƒ n1 ssw   Y  |  t|jƒd¡ |  t¡}| dd¡ W d   ƒ n1 s—w   Y  |  t|jƒd¡ d S )NúNo midi devicer3   rP   r   ©ZchanneliúÿÿÿzUndefined instrument id: -6éœ   zUndefined instrument id: 156r   rF   é   )rB   r.   Zset_instrumentr#   rH   r    rI   rJ   rK   r   r   r   Útest_set_instrumentƒ   s*   

ÿÿÿÿz"MidiOutputTest.test_set_instrumentc                 C   s8  | j s|  d¡ | j }| g d¢dgg¡ | dgdgg¡ | g d¢dgg d¢dgg¡ | g ¡ dd„ td	ƒD ƒ}| |¡ d
d„ tdƒD ƒ}|  t|j|¡ |  t¡}| d¡ W d   ƒ n1 sfw   Y  d}|  t|j	ƒ|¡ |  t¡}| dg¡ W d   ƒ n1 sŒw   Y  |  t|j	ƒ|¡ d S )NrS   )éÀ   r   r   é N  rX   )é   é<   éd   iP  c                 S   ó&   g | ]}d d|d gdd|  g‘qS ©rZ   r[   r\   rY   r   ©Ú.0r)   r   r   r   Ú
<listcomp>¤   ó   & z-MidiOutputTest.test_write.<locals>.<listcomp>i   c                 S   r]   r^   r   r_   r   r   r   ra   §   rb   i  z
Non sens ?z2unsupported operand type(s) for &: 'str' and 'int'zHey what's that?)
rB   r.   ÚwriteÚranger#   Ú
IndexErrorr%   r    rI   rJ   )r   rL   Zverrry_longZtoo_longrM   Ú	error_msgr   r   r   Ú
test_write–   s(   


ÿÿzMidiOutputTest.test_writec                 C   sJ   | j s|  d¡ | j }| d¡ | ddd¡ | ddd¡ | d¡ d S )NrS   rX   rZ   éA   r\   é€   )rB   r.   Zwrite_short©r   rL   r   r   r   Útest_write_short³   s   

zMidiOutputTest.test_write_shortc                 C   s0   | j s|  d¡ | j }| tj ¡ g d¢¡ d S )NrS   )éð   é}   rV   é   é   é   é÷   )rB   r.   Zwrite_sys_exr   r   Útimerj   r   r   r   Útest_write_sys_ex¿   s   
z MidiOutputTest.test_write_sys_exc                 C   s  | j s|  d¡ | j }|  t¡}|jddd W d   ƒ n1 s"w   Y  |  t|jƒd¡ |  t¡}|jddd W d   ƒ n1 sGw   Y  |  t¡}| dd¡ W d   ƒ n1 sbw   Y  |  t|jƒd	¡ |  t¡}| d
d¡ W d   ƒ d S 1 s‡w   Y  d S )NrS   r3   r   rT   rF   rV   iïØÿÿé   z=Pitch bend value must be between -8192 and +8191, not -10001.i©)  r   )rB   r.   r#   rH   Z
pitch_bendr    rI   rJ   rK   r   r   r   Útest_pitch_bendÆ   s(   
ÿÿÿþ"ÿzMidiOutputTest.test_pitch_bendc                 C   r7   )NrS   )rB   r.   r8   Ú_outputr   r:   r   r   r   r   r;   Ú   s
   

zMidiOutputTest.test_closec                 C   s>   | j s|  d¡ |  | j jd¡ | j  ¡  |  | j jd¡ d S )NrS   r   rt   )rB   r.   r    Z_abortedÚabortr   r   r   r   Ú
test_abortá   s
   

zMidiOutputTest.test_abortN)r<   r=   r>   r?   r   r   rC   rN   rR   rW   rg   rk   rs   ru   r;   rx   r   r   r   r   r@   J   s    
r@   c                   @   sf   e Zd ZdZdgZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚMidiModuleTestz‰Midi module tests that require midi hardware or midi.init().

    See MidiModuleNonInteractiveTest for non-interactive module tests.
    r   c                 C   s   dd l }|j ¡  d S ©Nr   )r   r   r	   ©r   r   r   r   r   r   ñ   s   zMidiModuleTest.setUpc                 C   s   t j ¡  d S r   )r   r   r   r   r   r   r   r   ö   s   zMidiModuleTest.tearDownc                 C   s(   t j ¡ }|  |t¡ |  |dk¡ d S rz   )r   r   Ú	get_countÚassertIsInstanceÚintÚ
assertTrue©r   Úcr   r   r   Útest_get_countù   s   
zMidiModuleTest.test_get_countc                 C   sB   t j ¡ }|  |t¡ |  |dk¡ t j ¡  |  tt jj	¡ d S ©Nr   )
r   r   r
   r}   r~   r   r   r#   r1   r"   )r   Zmidin_idr   r   r   Útest_get_default_input_idþ   s
   

z(MidiModuleTest.test_get_default_input_idc                 C   sB   t j ¡ }|  |t¡ |  |dk¡ t j ¡  |  tt jj¡ d S rƒ   )	r   r   r"   r}   r~   r   r   r#   r1   r€   r   r   r   Útest_get_default_output_id  s
   

z)MidiModuleTest.test_get_default_output_idc                 C   sà   t j ¡ }|dkr&t j |¡\}}}}}|  |d¡ |  |d¡ |  |d¡ t j ¡ }|dkrNt j |¡}|\}}}}}|  |d¡ |  |d¡ |  |d¡ t j ¡ }	t|	ƒD ]}
|  t j |
¡¡ qWt j |	¡}|  	|¡ d S )Nr   rt   r   )
r   r   r"   Zget_device_infor    r
   r|   rd   r8   r:   )r   Zan_idZinterfÚnameÚinputÚoutputZopenedZan_in_idÚrZout_of_rangeÚnumÚinfor   r   r   Útest_get_device_info  s$   


z#MidiModuleTest.test_get_device_infoc                 C   sV   t j ¡  |  tt jj¡ t j ¡  t j ¡  t j ¡  t j ¡  |  t j ¡ ¡ d S r   )	r   r   r   r#   r1   r|   r	   r   Úget_initr   r   r   r   Ú	test_init$  s   




zMidiModuleTest.test_initc                 C   sZ   t j ¡  t j ¡  t j ¡  t j ¡  t j ¡  t j ¡  t j ¡  |  t j ¡ ¡ d S r   )r   r   r   r	   r/   r   r   r   r   r   Ú	test_quit/  s   






zMidiModuleTest.test_quitc                 C   s   |   tj ¡ ¡ d S r   )r   r   r   r   r   r   r   r   Útest_get_init;  s   zMidiModuleTest.test_get_initc                 C   s>   t j ¡ }|  |t¡ |  d|  kodk ¡ d S   ¡ d S )Nr   r\   )r   r   rr   r}   r~   r   )r   Úmtimer   r   r   Ú	test_time?  s   
(zMidiModuleTest.test_timeN)r<   r=   r>   Ú__doc__r?   r   r   r‚   r„   r…   rŒ   rŽ   r   r   r’   r   r   r   r   ry   é   s    ry   c                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚMidiModuleNonInteractiveTestz~Midi module tests that do not require midi hardware or midi.init().

    See MidiModuleTest for interactive module tests.
    c                 C   s   dd l }d S rz   )r   r{   r   r   r   r   L  ó   z"MidiModuleNonInteractiveTest.setUpc                 C   óP   |   tjjtj¡ |   tjjtjj¡ |  tjjtj¡ |  tjjtjj¡ dS )z¤Ensures 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   r   r   r   Útest_midiinO  ó   z(MidiModuleNonInteractiveTest.test_midiinc                 C   r–   )z¦Ensures 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   r   r   r   Útest_midiout[  rœ   z)MidiModuleNonInteractiveTest.test_midioutc                 C   sP   dd„ }|   tjj¡}|ƒ  W d  ƒ n1 sw   Y  |  |jjd¡ dS )z0Ensures the MidiException is raised as expected.c                   S   s   t j d¡‚)NúHello Midi param)r   r   r$   r   r   r   r   Úraiseitj  r•   z@MidiModuleNonInteractiveTest.test_MidiException.<locals>.raiseitNrž   )r#   r   r   r$   r    rJ   Z	parameter)r   rŸ   rM   r   r   r   Útest_MidiExceptiong  s
   ÿz/MidiModuleNonInteractiveTest.test_MidiExceptionc                 C   sþ   d}d}d}d}d}d}d}t |ƒ}tdƒD ]f}	tj ||	¡}
|  t |
ƒ|¡ t|
ƒD ]P\}}|| }|| }|  |jjd¡ |  |j	tj
¡ |  |j|| ¡ |  |j|| ¡ |  |j|| ¡ |  |j|| ¡ |  |j|| ¡ |  |j|	¡ q+qdS )z<Ensures midi events are properly converted to pygame events.r   rt   r   é   ))©rX   r   rt   r   rY   ))rZ   r[   iè  Zstring_datai!N  ))Ú0Ú1Ú2Ú3Ú4ÚEventN)Úlenrd   r   r   Úmidis2eventsr    Ú	enumerateÚ	__class__r<   Útyper—   ÚstatusZdata1Zdata2Zdata3Ú	timestampZvice_id)r   Z	MIDI_DATAZ	MD_STATUSZMD_DATA1ZMD_DATA2ZMD_DATA3Ú	TIMESTAMPZmidi_eventsZexpected_num_eventsr!   Z	pg_eventsr)   Zpg_eventÚ
midi_eventZmidi_event_datar   r   r   Útest_midis2eventsr  s0   ñûz.MidiModuleNonInteractiveTest.test_midis2eventsc              	   C   óT   d}d}||fD ]}|   t¡ tj |gd¡}W d  ƒ n1 s"w   Y  qdS )z=Ensures midi events with missing values are handled properly.))rX   r   rt   rY   )r¢   r   N©r#   rH   r   r   rª   )r   Zmidi_event_missing_dataZmidi_event_missing_timestampr±   Úeventsr   r   r   Ú%test_midis2events__missing_event_data  ó   ÿ€ÿzBMidiModuleNonInteractiveTest.test_midis2events__missing_event_datac              	   C   r³   )z;Ensures midi events with extra values are handled properly.)©rX   r   rt   r   ÚextrarY   )r¢   rY   r¹   r   Nr´   )r   Zmidi_event_extra_dataZmidi_event_extra_timestampr±   rµ   r   r   r   Ú#test_midis2events__extra_event_data¦  r·   z@MidiModuleNonInteractiveTest.test_midis2events__extra_event_datac                 C   sD   d}|   t¡ tj |gd¡}W d  ƒ dS 1 sw   Y  dS )z\Ensures midi events with extra data and no timestamps are handled
        properly.
        )r¸   r   Nr´   )r   Z"midi_event_extra_data_no_timestamprµ   r   r   r   Ú5test_midis2events__extra_event_data_missing_timestamp¯  s   "ÿzRMidiModuleNonInteractiveTest.test_midis2events__extra_event_data_missing_timestampc                 C   s  ddl m}m}m} |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd	¡ |  |d
ƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ dS )z8of frequencies to midi note numbers and ansi note names.r   )Úfrequency_to_midiÚmidi_to_frequencyÚmidi_to_ansi_noteg     €;@é   gš™™™™YB@é   g     Z°@él   ZA0éG   ZB4éR   zA#5éS   ZB5é]   ZA6é^   zA#6é_   ZB6é`   ZC7éf   zF#7ZC8N)r   r¼   r½   r¾   r    )r   r¼   r½   r¾   r   r   r   Útest_conversions¸  s"   z-MidiModuleNonInteractiveTest.test_conversionsN)r<   r=   r>   r“   r   r›   r   r    r²   r¶   rº   r»   rÊ   r   r   r   r   r”   F  s    +			r”   Ú__main__)	Zunittestr   ZTestCaser   r@   ry   r”   r<   Úmainr   r   r   r   Ú<module>   s    C  ] 	ÿ