o
    tVÆgR*  ã                   @   s€   d dl Z d dlZd dlm  mZ d dlmZm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r>e  ¡  dS dS )
é    N)ÚpromptÚquestionc                   @   sd   e 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d„ Zdd„ ZdS )ÚControllerModuleTestc                 C   ó   t  ¡  d S ©N©Ú
controllerÚinit©Úself© r   úP/home/ubuntu/.local/lib/python3.10/site-packages/pygame/tests/controller_test.pyÚsetUp   ó   zControllerModuleTest.setUpc                 C   r   r   ©r   Úquitr
   r   r   r   ÚtearDown   r   zControllerModuleTest.tearDownc                 C   s"   t  ¡  t  ¡  |  t  ¡ ¡ d S r   )r   r   r	   Ú
assertTrueÚget_initr
   r   r   r   Ú	test_init   ó   zControllerModuleTest.test_initc                 C   ó"   t  ¡  t  ¡  |  t  ¡ ¡ d S r   )r   r	   r   r   r
   r   r   r   Útest_init__multiple   r   z(ControllerModuleTest.test_init__multiplec                 C   s   t  ¡  |  t  ¡ ¡ d S r   ©r   r   ÚassertFalser   r
   r   r   r   Ú	test_quit   s   zControllerModuleTest.test_quitc                 C   r   r   r   r
   r   r   r   Útest_quit__multiple   r   z(ControllerModuleTest.test_quit__multiplec                 C   s   |   t ¡ ¡ d S r   )r   r   r   r
   r   r   r   Útest_get_init!   s   z"ControllerModuleTest.test_get_initc                 C   s>   t  d¡ |  t  ¡ ¡ t  d¡ |  t  ¡ ¡ t  d¡ d S )NTF)r   Úset_eventstater   Úget_eventstater   r
   r   r   r   Útest_get_eventstate$   s
   

z(ControllerModuleTest.test_get_eventstatec                 C   s   |   t ¡ d¡ d S )Nr   )ÚassertGreaterEqualr   Ú	get_countr
   r   r   r   Útest_get_count-   ó   z#ControllerModuleTest.test_get_countc              	   C   s²   t t ¡ ƒD ]5}t |¡rt |¡}|  |tj¡ | ¡  q|  tj	j
j¡ t |¡}W d   ƒ n1 s6w   Y  q|  t¡ t d¡ W d   ƒ d S 1 sRw   Y  d S )NÚTest)Úranger   r"   Úis_controllerÚ
ControllerÚassertIsInstancer   ÚassertRaisesÚpygameÚ_sdl2Úsdl2ÚerrorÚ	TypeError)r   ÚiÚcr   r   r   Útest_is_controller0   s   


ÿ€"ÿz'ControllerModuleTest.test_is_controllerc                 C   s   |   t d¡¡ d S )Néÿÿÿÿ)ÚassertIsNoner   Úname_forindexr
   r   r   r   Útest_name_forindex=   r$   z'ControllerModuleTest.test_name_forindexN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r    r#   r2   r6   r   r   r   r   r      s    	r   c                   @   s\   e 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d„ ZdS )ÚControllerTypeTestc                 C   r   r   r   r
   r   r   r   r   B   r   zControllerTypeTest.setUpc                 C   r   r   r   r
   r   r   r   r   E   r   zControllerTypeTest.tearDownc                 C   ó.   t t ¡ ƒD ]}t |¡rt |¡  S qd S r   ©r&   r   r"   r'   r(   ©r   r0   r   r   r   Ú_get_first_controllerH   ó
   
ÿÿz(ControllerTypeTest._get_first_controllerc                 C   s,   |   ¡ }|r|  |tj¡ d S |  d¡ d S ©NúNo controller connected)r>   r)   r   r(   ÚskipTest©r   r1   r   r   r   Útest_constructionM   ó   z$ControllerTypeTest.test_constructionc                 C   s,   |   ¡ }|r|  | ¡ ¡ d S |  d¡ d S r@   )r>   r   r   rB   rC   r   r   r   Útest__auto_initT   rE   z"ControllerTypeTest.test__auto_initc                 C   sB   |   ¡ }|r|  | ¡ ¡ | ¡  |  | ¡ ¡ d S |  d¡ d S r@   )r>   r   r   r   r   rB   rC   r   r   r   r   [   s   z ControllerTypeTest.test_get_initc                 C   sT   t t ¡ ƒD ]}t |¡rtj |¡} nq|  d¡ tj 	|¡}|  
|tj¡ d S r@   )r&   r   r"   r'   r+   ÚjoystickÚJoystickrB   r(   Úfrom_joystickr)   )r   r0   Újoyr1   r   r   r   Útest_from_joystickd   s   
þ
z%ControllerTypeTest.test_from_joystickc                 C   s>   |   ¡ }|r| ¡ }|  |ttj d¡ƒ¡ d S |  d¡ d S )Nr   rA   )r>   Úas_joystickr)   Útyper+   rG   rH   rB   )r   r1   rJ   r   r   r   Útest_as_joysticko   s
   z#ControllerTypeTest.test_as_joystickc                 C   s@   |   ¡ }|r| ¡ }|  |t¡ |  |d ¡ d S |  d¡ d S )NÚarA   )r>   Úget_mappingr)   ÚdictÚassertIsNotNonerB   )r   r1   Úmappingr   r   r   Útest_get_mappingw   s   z#ControllerTypeTest.test_get_mappingc                 C   sº   |   ¡ }|rV| ¡ }d|d< d|d< | |¡ | ¡ }|  t|ƒt|ƒ¡ |D ],}|| dvr:|  || || ¡ q'|dkrI|  || |d ¡ q'|  || |d ¡ q'd S |  d¡ d S )NÚb3rO   Úb0Úy)rO   rW   rA   )r>   rP   Úset_mappingÚassertEqualÚlenrB   )r   r1   rS   Únew_mappingr0   r   r   r   Útest_set_mapping€   s    
ù	z#ControllerTypeTest.test_set_mappingN)r7   r8   r9   r   r   r>   rD   rF   r   rK   rN   rT   r\   r   r   r   r   r:   A   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S )ÚControllerInteractiveTestÚinteractivec                 C   r;   r   r<   r=   r   r   r   r>   ™   r?   z/ControllerInteractiveTest._get_first_controllerc                 C   r   r   r   r
   r   r   r   r   ž   r   zControllerInteractiveTest.setUpc                 C   r   r   r   r
   r   r   r   r   ¡   r   z"ControllerInteractiveTest.tearDownc                 C   s<   t dƒ t ¡  t ¡  t ¡ }td |¡ƒ}|  |¡ d S )NzXPlease connect at least one controller before the test for controller.get_count() startszEget_count() thinks there are {} joysticks connected. Is that correct?)r   r   r   r	   r"   r   Úformatr   )r   Újoystick_numÚansr   r   r   Útest__get_count_interactive¤   s   ÿþz5ControllerInteractiveTest.test__get_count_interactivec                 C   sÌ   |   ¡ }|s|  d¡ tj ¡  tj ¡  tj d¡}tj d d¡}d}| d¡ | 	| 
ddd¡d¡ tj ¡  t d¡ |rZtj ¡ D ]}|jtjkrOd	}|jtjkrWd	}qE|s@tj ¡  tj ¡  d S ©
NrA   ©é  re   é   T©éÿ   rh   rh   ú+Press button 'x' (on ps4) or 'a' (on xbox).©r   r   r   ©r   r   F)r>   rB   r+   Údisplayr	   ÚfontÚset_modeÚFontÚfillÚblitÚrenderÚupdater   r   ÚeventÚgetrM   ÚQUITÚCONTROLLERBUTTONDOWNr   ©r   r1   Úscreenrm   Úrunningrt   r   r   r   Ú"test_set_eventstate_on_interactive¶   s2   



þ

€ú
z<ControllerInteractiveTest.test_set_eventstate_on_interactivec                 C   sô   |   ¡ }|s|  d¡ tj ¡  tj ¡  tj d¡}tj d d¡}d}| d¡ | 	| 
ddd¡d¡ tj ¡  t d	¡ |rntj tj¡D ]}|rMd	}qG| tj¡rltj tj¡rjtj ¡  tj ¡  |  ¡  nd	}|s@tj ¡  tj ¡  d S rc   )r>   rB   r+   rl   r	   rm   rn   ro   rp   rq   rr   rs   r   r   rt   ru   rv   Ú
get_buttonÚCONTROLLER_BUTTON_AÚpeekrw   r   Úfailrx   r   r   r   Ú#test_set_eventstate_off_interactiveÖ   s:   



þ

€


õ
z=ControllerInteractiveTest.test_set_eventstate_off_interactivec           	      C   s†  |   ¡ }|s|  d¡ tj ¡  tj ¡  tj d¡}tj d d¡}d}| ddd¡}| ddd¡}ddg}|r·tj	 
¡ D ]L}|jtjkrGd}|jtjkrV|jd	krVd|d	< |jtjkre|jd	kred|d	< |jtjkr‰|jtjkrsd}|jtjkr‰d}tj ¡  tj ¡  |  ¡  q=| tj¡|d
< | d¡ | |d¡ | |d¡ | | t|ƒdd¡d¡ tj ¡  |s8tj ¡  tj ¡  d S )NrA   rd   rf   Tri   rj   z<The two values should match up. Press "y" or "n" to confirm.Fr   é   rg   rk   ©r   rf   ©r   é(   )r>   rB   r+   rl   r	   rm   rn   ro   rr   rt   ru   rM   rv   rw   ÚbuttonÚCONTROLLERBUTTONUPÚKEYDOWNÚkeyÚK_yÚK_nr   r   r|   r}   rp   rq   Ústrrs   )	r   r1   ry   rm   rz   Úlabel1Úlabel2Ú
is_pressedrt   r   r   r   Útest_get_button_interactiveû   sV   


ÿý

€

è
z5ControllerInteractiveTest.test_get_button_interactivec           
      C   sX  |   ¡ }|s|  d¡ tj ¡  tj ¡  tj d¡}tj d d¡}d}| ddd¡}| ddd¡}| ddd¡}|r tj	 
¡ D ].}|jtjkrJd	}|jtjkrn|jtjkrXd	}|jtjkrnd	}tj ¡  tj ¡  |  ¡  q@| tj¡}	| d
¡ | |d¡ | |d¡ | |d¡ | | t|	ƒdd¡d¡ tj ¡  |s;tj ¡  tj ¡  d S )NrA   rd   rf   Tz8Press down the right trigger. The value on-screen shouldrj   z?indicate how far the trigger is pressed down. This value shouldz8be in the range of 0-32767. Press "y" or "n" to confirm.Frg   rk   r‚   rƒ   )r   é<   )r>   rB   r+   rl   r	   rm   rn   ro   rr   rt   ru   rM   rv   r‡   rˆ   r‰   rŠ   r   r   Úget_axisÚCONTROLLER_AXIS_TRIGGERRIGHTrp   rq   r‹   rs   )
r   r1   ry   rm   rz   rŒ   r   Úlabel3rt   Úright_triggerr   r   r   Útest_get_axis_interactive/  sT   


ÿýÿ

€

ë
z3ControllerInteractiveTest.test_get_axis_interactiveN)r7   r8   r9   Ú__tags__r>   r   r   rb   r{   r€   r   r•   r   r   r   r   r]   –   s     %4r]   Ú__main__)Úunittestr+   Úpygame._sdl2.controllerr,   r   Úpygame.tests.test_utilsr   r   ÚTestCaser   r:   r]   r7   Úmainr   r   r   r   Ú<module>   s    :U Oÿ