o
    OZh\$                     @   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DOWNRIGHTLEFTZINSERTHOMEZ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   r0   )r   r1   )r   r2   )r   r3   )r   r4   )r   r5   )r   r6   )r    r7   )r$   r8   )r%   r9   )r(   r'   r;   )r)   r&   r:   )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 rK   J/var/www/auris/lib/python3.10/site-packages/pygame/tests/constants_test.pycreate_overlap_set   s   rM   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_NrK   .0r]   rK   rK   rL   	<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@   rA   selfrH   rK   rK   rL   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)ry   r?   r@   rA   assertIstypeintr}   rH   rI   rK   rK   rL   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   rq   rr   rK   rs   rK   rK   rL   ru      rv   zBKConstantsTests.test_k__value_overlap.<locals>.<setcomp>.<genexpr>rG   rt   itemrK   rK   rL   	<setcomp>   s    z8KConstantsTests.test_k__value_overlap.<locals>.<setcomp>N)K_AND_KSCAN_COMMON_OVERLAPSrM   ry   assertSetEqualr}   ZEXPECTED_OVERLAPSrJ   rK   rK   rL   test_k__value_overlap   s
   
z%KConstantsTests.test_k__value_overlapN)__name__
__module____qualname____doc__ZK_SPECIFIC_NAMEStupleK_AND_KSCAN_COMMON_NAMESry   r~   r   r   rK   rK   rK   rL   rO      s    1rO   c                   @   rN   )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   rq   ZKSCAN_NrK   rs   rK   rK   rL   ru   '  s    
zKscanConstantsTests.<genexpr>c                 C   rw   )zEnsures KSCAN constants exist.rx   N)KSCAN_NAMESrz   r{   r@   rA   r|   rK   rK   rL   test_kscan__existence+  r   z)KscanConstantsTests.test_kscan__existencec                 C   r   )z-Ensures KSCAN constants are the correct type.N)r   r?   r@   rA   r   r   r   r   rK   rK   rL   test_kscan__type0  r   z$KscanConstantsTests.test_kscan__typec                 C   r   )z4Ensures no unexpected KSCAN constant values overlap.c                 S   r   )c                 s   rq   r   rK   rs   rK   rK   rL   ru   :  rv   zJKscanConstantsTests.test_kscan__value_overlap.<locals>.<setcomp>.<genexpr>r   r   rK   rK   rL   r   9  s    z@KscanConstantsTests.test_kscan__value_overlap.<locals>.<setcomp>N)r   rM   r   r   r   rK   rK   rL   test_kscan__value_overlap7  s
   
z-KscanConstantsTests.test_kscan__value_overlapN)r   r   r   r   ZKSCAN_SPECIFIC_NAMESr   r   r   r   r   r   rK   rK   rK   rL   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   rw   )zEnsures KMOD constants exist.rx   N)KMOD_CONSTANTSrz   r{   r@   rA   r|   rK   rK   rL   test_kmod__existence]  r   z'KmodConstantsTests.test_kmod__existencec                 C   r   )z,Ensures KMOD constants are the correct type.N)r   r?   r@   rA   r   r   r   r   rK   rK   rL   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)rG   rM   r   r   r   rK   rK   rL   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@   rA   ZassertFalse)r}   ZNO_BITWISE_OVERLAPZkmodsrH   rI   rK   rK   rL   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@   rA   assertEqual)r}   ZKMOD_COMPRISED_DICT	base_nameZ	seq_namesZexpected_valuerH   rI   rK   rK   rL   test_kmod__bitwise_overlap  s   z-KmodConstantsTests.test_kmod__bitwise_overlapN)
r   r   r   r   r   r   r   r   r   r   rK   rK   rK   rL   r   C  s    r   __main__)ZunittestZpygame.constantsr@   r   r   rM   ZTestCaserO   r   r   r   mainrK   rK   rK   rL   <module>   s    oNTf