o
    ¢ÄiR*  ã                   @   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   úV/home/kim/smarthome/.venv/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   Zget_eventstater   r
   r   r   r   Útest_get_eventstate$   s
   

z(ControllerModuleTest.test_get_eventstatec                 C   s   |   t ¡ d¡ d S )Nr   )Z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 )NZTest)Úranger   r    Úis_controllerÚ
ControllerÚassertIsInstancer   ZassertRaisesÚpygameÚ_sdl2Zsdl2ÚerrorÚ	TypeError)r   ÚiÚcr   r   r   Útest_is_controller0   s   


ÿ€"ÿz'ControllerModuleTest.test_is_controllerc                 C   s   |   t d¡¡ d S )Néÿÿÿÿ)ZassertIsNoner   Z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!   r-   r/   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   r+   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)r7   r&   r   r%   ÚskipTest©r   r,   r   r   r   Útest_constructionM   ó   z$ControllerTypeTest.test_constructionc                 C   s,   |   ¡ }|r|  | ¡ ¡ d S |  d¡ d S r9   )r7   r   r   r;   r<   r   r   r   Útest__auto_initT   r>   z"ControllerTypeTest.test__auto_initc                 C   sB   |   ¡ }|r|  | ¡ ¡ | ¡  |  | ¡ ¡ d S |  d¡ d S r9   )r7   r   r   r   r   r;   r<   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 r9   )r#   r   r    r$   r'   ÚjoystickÚJoystickr;   r%   Zfrom_joystickr&   )r   r+   Újoyr,   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   r:   )r7   Zas_joystickr&   Útyper'   r@   rA   r;   )r   r,   rB   r   r   r   Útest_as_joysticko   s
   z#ControllerTypeTest.test_as_joystickc                 C   s@   |   ¡ }|r| ¡ }|  |t¡ |  |d ¡ d S |  d¡ d S )NÚar:   )r7   Úget_mappingr&   ÚdictZassertIsNotNoner;   )r   r,   Ú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 )NZb3rF   Zb0Úy)rF   rK   r:   )r7   rG   Zset_mappingZassertEqualÚlenr;   )r   r,   rI   Znew_mappingr+   r   r   r   Útest_set_mapping€   s    
ù	z#ControllerTypeTest.test_set_mappingN)r0   r1   r2   r   r   r7   r=   r?   r   rC   rE   rJ   rM   r   r   r   r   r3   A   s    		r3   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   r4   r   r5   r6   r   r   r   r7   ™   r8   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   Zjoystick_numZ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 ©
Nr:   ©é  rT   é   T©éÿ   rW   rW   ú+Press button 'x' (on ps4) or 'a' (on xbox).©r   r   r   ©r   r   F)r7   r;   r'   Údisplayr	   ÚfontÚset_modeÚFontÚfillÚblitÚrenderÚupdater   r   ÚeventÚgetrD   ÚQUITÚCONTROLLERBUTTONDOWNr   ©r   r,   Úscreenr\   Úrunningrc   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 rR   )r7   r;   r'   r[   r	   r\   r]   r^   r_   r`   ra   rb   r   r   rc   rd   re   Ú
get_buttonÚCONTROLLER_BUTTON_AÚpeekrf   r   Úfailrg   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 )Nr:   rS   rU   TrX   rY   z<The two values should match up. Press "y" or "n" to confirm.Fr   é   rV   rZ   ©r   rU   ©r   é(   )r7   r;   r'   r[   r	   r\   r]   r^   ra   rc   rd   rD   re   rf   ZbuttonZCONTROLLERBUTTONUPÚKEYDOWNÚkeyÚK_yÚK_nr   rn   rk   rl   r_   r`   Ústrrb   )	r   r,   rh   r\   ri   Úlabel1Úlabel2Z
is_pressedrc   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 )Nr:   rS   rU   Tz8Press down the right trigger. The value on-screen shouldrY   z?indicate how far the trigger is pressed down. This value shouldz8be in the range of 0-32767. Press "y" or "n" to confirm.FrV   rZ   rq   rr   )r   é<   )r7   r;   r'   r[   r	   r\   r]   r^   ra   rc   rd   rD   re   rt   ru   rv   rw   r   rn   Zget_axisZCONTROLLER_AXIS_TRIGGERRIGHTr_   r`   rx   rb   )
r   r,   rh   r\   ri   ry   rz   Zlabel3rc   Zright_triggerr   r   r   Útest_get_axis_interactive/  sT   


ÿýÿ

€

ë
z3ControllerInteractiveTest.test_get_axis_interactiveN)r0   r1   r2   Z__tags__r7   r   r   rQ   rj   ro   r{   r}   r   r   r   r   rN   –   s     %4rN   Ú__main__)Zunittestr'   Zpygame._sdl2.controllerr(   r   Zpygame.tests.test_utilsr   r   ZTestCaser   r3   rN   r0   Úmainr   r   r   r   Ú<module>   s    :U Oÿ