o
    i\$                     @   sn   d dl Z d dlZdZdZdd 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r5e   dS dS )    N)kUNKNOWNZ	BACKSPACEZTABCLEARZRETURNPAUSEESCAPESPACECOMMAMINUSZPERIODSLASH0123456789	SEMICOLONZEQUALSZLEFTBRACKET	BACKSLASHZRIGHTBRACKETDELETEKP0KP1KP2KP3KP4KP5KP6KP7KP8KP9Z	KP_PERIODZ	KP_DIVIDEZKP_MULTIPLYZKP_MINUSZKP_PLUSZKP_ENTERZ	KP_EQUALSZUPZDOWNZRIGHTZLEFTZINSERTHOMEENDZPAGEUPZPAGEDOWNZF1ZF2ZF3ZF4ZF5ZF6ZF7ZF8ZF9ZF10ZF11ZF12ZF13ZF14ZF15NUMLOCKZCAPSLOCK	SCROLLOCKZRSHIFTZLSHIFTZRCTRLZLCTRLZRALTZLALTRMETALMETALSUPERRSUPERZMODEZHELPPRINTZSYSREQBREAKZMENUPOWEREUROKP_0KP_1KP_2KP_3KP_4KP_5KP_6KP_7KP_8KP_9NUMLOCKCLEAR
SCROLLLOCKRGUILGUIPRINTSCREENCURRENCYUNITZCURRENCYSUBUNIT))r   r-   )r   r.   )r   r/   )r   r0   )r   r1   )r   r2   )r   r3   )r   r4   )r   r5   )r    r6   )r#   r7   )r$   r8   )r'   r&   r:   )r(   r%   r9   )r)   r;   )r*   r   )r,   r<   c                 C   s`   i }| D ]}t tj|}||t | qt }| D ]}t|dkr-|t| q|S )zHelper function to find overlapping constant values/names.

    Returns a set of fronzensets:
        set(frozenset(names of overlapping constants), ...)
       )	getattrpygame	constants
setdefaultsetaddvalueslen	frozenset)Zconstant_namesZoverlap_dictnamevalueoverlapsZoverlap_names rJ   U/home/kim/smarthome/.venv/lib/python3.10/site-packages/pygame/tests/constants_test.pycreate_overlap_set   s   rL   c                   @   B   e Zd ZdZdZedd ee D Zdd Zdd Z	d	d
 Z
dS )KConstantsTestszTest K_* (key) constants.)-abcdefghijklmnopqrstuvwxyzZQUOTEZ	BACKQUOTEZEXCLAIMZQUOTEDBLHASHZDOLLARZ	AMPERSANDZ	LEFTPARENZ
RIGHTPARENZASTERISKPLUSCOLONLESSGREATERZQUESTIONATZCARETZ
UNDERSCOREPERCENTc                 c       | ]}d | V  qdS ZK_NrJ   .0r\   rJ   rJ   rK   	<genexpr>       zKConstantsTests.<genexpr>c                 C   *   | j D ]}| ttj|d|  qdS )zEnsures K constants exist.missing constant N)K_NAMES
assertTruehasattrr?   r@   selfrG   rJ   rJ   rK   test_k__existence      
z!KConstantsTests.test_k__existencec                 C   ,   | j D ]}ttj|}| t|t qdS )z)Ensures K constants are the correct type.N)rx   r>   r?   r@   assertIstypeintr|   rG   rH   rJ   rJ   rK   test_k__type      
zKConstantsTests.test_k__typec                 C   (   dd t D }t| j}| || dS )z0Ensures no unexpected K constant values overlap.c                 S      h | ]}t d d |D qS )c                 s   rp   rq   rJ   rr   rJ   rJ   rK   rt      ru   zBKConstantsTests.test_k__value_overlap.<locals>.<setcomp>.<genexpr>rF   rs   itemrJ   rJ   rK   	<setcomp>   s    z8KConstantsTests.test_k__value_overlap.<locals>.<setcomp>N)K_AND_KSCAN_COMMON_OVERLAPSrL   rx   assertSetEqualr|   ZEXPECTED_OVERLAPSrI   rJ   rJ   rK   test_k__value_overlap   s
   
z%KConstantsTests.test_k__value_overlapN)__name__
__module____qualname____doc__ZK_SPECIFIC_NAMEStupleK_AND_KSCAN_COMMON_NAMESrx   r}   r   r   rJ   rJ   rJ   rK   rN      s    1rN   c                   @   rM   )KscanConstantsTestsz"Test KSCAN_* (scancode) constants.)0ABCDEFGHIJKLMNOPQRSTUVWXYZZ
APOSTROPHEZGRAVEZINTERNATIONAL1ZINTERNATIONAL2ZINTERNATIONAL3ZINTERNATIONAL4ZINTERNATIONAL5ZINTERNATIONAL6ZINTERNATIONAL7ZINTERNATIONAL8ZINTERNATIONAL9ZLANG1ZLANG2ZLANG3ZLANG4ZLANG5ZLANG6ZLANG7ZLANG8ZLANG9ZNONUSBACKSLASHZ	NONUSHASHc                 c   rp   ZKSCAN_NrJ   rr   rJ   rJ   rK   rt   '  s    
zKscanConstantsTests.<genexpr>c                 C   rv   )zEnsures KSCAN constants exist.rw   N)KSCAN_NAMESry   rz   r?   r@   r{   rJ   rJ   rK   test_kscan__existence+  r~   z)KscanConstantsTests.test_kscan__existencec                 C   r   )z-Ensures KSCAN constants are the correct type.N)r   r>   r?   r@   r   r   r   r   rJ   rJ   rK   test_kscan__type0  r   z$KscanConstantsTests.test_kscan__typec                 C   r   )z4Ensures no unexpected KSCAN constant values overlap.c                 S   r   )c                 s   rp   r   rJ   rr   rJ   rJ   rK   rt   :  ru   zJKscanConstantsTests.test_kscan__value_overlap.<locals>.<setcomp>.<genexpr>r   r   rJ   rJ   rK   r   9  s    z@KscanConstantsTests.test_kscan__value_overlap.<locals>.<setcomp>N)r   rL   r   r   r   rJ   rJ   rK   test_kscan__value_overlap7  s
   
z-KscanConstantsTests.test_kscan__value_overlapN)r   r   r   r   ZKSCAN_SPECIFIC_NAMESr   r   r   r   r   r   rJ   rJ   rJ   rK   r      s    4r   c                   @   s<   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dS )KmodConstantsTestsz%Test KMOD_* (key modifier) constants.)	KMOD_NONEKMOD_LSHIFTKMOD_RSHIFT
KMOD_SHIFT
KMOD_LCTRL
KMOD_RCTRL	KMOD_CTRL	KMOD_LALT	KMOD_RALTKMOD_ALT
KMOD_LMETA
KMOD_RMETA	KMOD_METAKMOD_NUM	KMOD_CAPS	KMOD_MODE	KMOD_LGUI	KMOD_RGUIKMOD_GUIc                 C   rv   )zEnsures KMOD constants exist.rw   N)KMOD_CONSTANTSry   rz   r?   r@   r{   rJ   rJ   rK   test_kmod__existence]  r~   z'KmodConstantsTests.test_kmod__existencec                 C   r   )z,Ensures KMOD constants are the correct type.N)r   r>   r?   r@   r   r   r   r   rJ   rJ   rK   test_kmod__typeb  r   z"KmodConstantsTests.test_kmod__typec                 C   s<   t ddgt ddgt ddgh}t| j}| || dS )z3Ensures no unexpected KMOD constant values overlap.r   r   r   r   r   r   N)rF   rL   r   r   r   rJ   rJ   rK   test_kmod__value_overlapi  s   



z+KmodConstantsTests.test_kmod__value_overlapc                 C   s8   d}d}|D ]}t tj|}| ||@  ||O }qdS )z8Ensures certain KMOD constants have no overlapping bits.)r   r   r   r   r   r   r   r   r   r   r   r   r   N)r>   r?   r@   ZassertFalse)r|   ZNO_BITWISE_OVERLAPZkmodsrG   rH   rJ   rJ   rK   test_kmod__no_bitwise_overlapv  s   
z0KmodConstantsTests.test_kmod__no_bitwise_overlapc                 C   s\   dddddd}|  D ]\}}d}|D ]
}|ttj|O }qttj|}| || qdS )	z5Ensures certain KMOD constants have overlapping bits.)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r   r   r   r   N)itemsr>   r?   r@   ZassertEqual)r|   ZKMOD_COMPRISED_DICT	base_nameZ	seq_namesZexpected_valuerG   rH   rJ   rJ   rK   test_kmod__bitwise_overlap  s   z-KmodConstantsTests.test_kmod__bitwise_overlapN)
r   r   r   r   r   r   r   r   r   r   rJ   rJ   rJ   rK   r   C  s    r   __main__)ZunittestZpygame.constantsr?   r   r   rL   ZTestCaserN   r   r   r   mainrJ   rJ   rJ   rK   <module>   s    oNTf