o
    ¢Äij¸  ã                   @   s  d dl Z d dlZd dlm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
ƒZG dd„ dee jƒZG dd„ dee jƒZ	G dd„ dee jƒZ
G dd„ dƒZG dd„ dee jƒZG dd„ dee jƒZG dd„ deƒZG dd„ deeƒZG dd„ de jƒZedkre  ¡  dS dS )é    N©Úspritec                   @   s   e Zd ZdS )ÚSpriteModuleTestN)Ú__name__Ú
__module__Ú__qualname__© r   r   úR/home/kim/smarthome/.venv/lib/python3.10/site-packages/pygame/tests/sprite_test.pyr      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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 ),ÚSpriteCollideTestc                 C   sÎ   t  ¡ | _t  ¡ | _t  | j¡| _t  | j¡| _t  | j¡| _t 	dtj
d¡| j_t 	dtj
d¡| j_t 	dtj
d¡| j_| jj ¡ | j_| jj ¡ | j_| jj ¡ | j_| jj dd¡ | jj dd¡ d S )N)é2   é
   é    ©r   r   é(   r   éd   )r   ÚAbstractGroupÚagÚag2ÚSpriteÚs1Ús2Ús3ÚpygameÚSurfaceZSRCALPHAÚimageÚget_rectÚrectÚmove_ip©Úselfr   r   r	   ÚsetUp   s   

zSpriteCollideTest.setUpc                 C   s&   |   tj| j| jdd d| jg¡ d S ©NF©ÚdokillZcollided©ÚassertEqualr   Úspritecollider   r   r   r   r   r   r	   Ú0test_spritecollide__works_if_collided_cb_is_None&   s   þzBSpriteCollideTest.test_spritecollide__works_if_collided_cb_is_Nonec                 C   s$   |   tj| j| jdd| jg¡ d S )NF)r#   r$   r   r   r   r	   Ú3test_spritecollide__works_if_collided_cb_not_passed-   s   ÿzESpriteCollideTest.test_spritecollide__works_if_collided_cb_not_passedc                 C   s    | j ttj| j| jddd d S )NFé   r"   )ZassertRaisesÚ	TypeErrorr   r&   r   r   r   r   r   r	   Ú/test_spritecollide__collided_must_be_a_callable3   s   
ÿzASpriteCollideTest.test_spritecollide__collided_must_be_a_callablec                 C   ó(   |   tj| j| jdtjd| jg¡ d S r!   )r%   r   r&   r   r   Úcollide_rectr   r   r   r   r	   Ú5test_spritecollide__collided_defaults_to_collide_rect9   ó   ÿüzGSpriteCollideTest.test_spritecollide__collided_defaults_to_collide_rectc              	   C   ó,   |   tj| j| jdt d¡d| jg¡ d S ©NFg      ð?r"   )r%   r   r&   r   r   Úcollide_rect_ratior   r   r   r   r	   Ú2test_collide_rect_ratio__ratio_of_one_like_defaultB   s   ÿüzDSpriteCollideTest.test_collide_rect_ratio__ratio_of_one_like_defaultc                 C   sJ   t  d¡}t| j ¡ td}tt j| j| jd|dtd}|  ||¡ d S ©Nç      4@©ÚkeyFr"   )	r   r2   Úsortedr   ÚspritesÚidr&   r   ÚassertListEqual©r   Úcollided_funcÚexpected_spritesZcollided_spritesr   r   r	   Ú8test_collide_rect_ratio__collides_all_at_ratio_of_twentyK   ó   
ÿüzJSpriteCollideTest.test_collide_rect_ratio__collides_all_at_ratio_of_twentyc                 C   r,   r!   )r%   r   r&   r   r   Úcollide_circler   r   r   r   r	   Ú"test_collide_circle__no_radius_setY   r/   z4SpriteCollideTest.test_collide_circle__no_radius_setc              	   C   r0   r1   )r%   r   r&   r   r   Úcollide_circle_ratior   r   r   r   r	   Ú5test_collide_circle_ratio__no_radius_and_ratio_of_oneb   s   üùzGSpriteCollideTest.test_collide_circle_ratio__no_radius_and_ratio_of_onec                 C   sJ   t  d¡}t| j ¡ td}tt j| j| jd|dtd}|  ||¡ d S r4   )	r   rC   r8   r   r9   r:   r&   r   r;   r<   r   r   r	   Ú8test_collide_circle_ratio__no_radius_and_ratio_of_twentyn   r@   zJSpriteCollideTest.test_collide_circle_ratio__no_radius_and_ratio_of_twentyc                 C   sH   t  d¡}t j| j| jd|d |  t j| j| jdt jd| jg¡ d S )Nr5   Fr"   )r   rC   r&   r   r   r%   rA   r   )r   r=   r   r   r	   Ú7test_collide_circle__radius_set_by_collide_circle_ratio|   s   
ÿüzISpriteCollideTest.test_collide_circle__radius_set_by_collide_circle_ratioc                 C   sV   t  d¡}tt j| j| jd|dtd}tt j| j| jd|dtd}|  ||¡ d S )Ng       @Fr"   r6   )r   rC   r8   r&   r   r   r:   r;   r<   r   r   r	   Ú;test_collide_circle_ratio__no_radius_and_ratio_of_two_twiceŒ   s   
ÿüÿüzMSpriteCollideTest.test_collide_circle_ratio__no_radius_and_ratio_of_two_twicec                 C   s^   d| j _d| j_d| j_tj}t| j ¡ t	d}ttj
| j | jd|dt	d}|  ||¡ d S )Nr   r   é  r6   Fr"   )r   Úradiusr   r   r   rA   r8   r   r9   r:   r&   r;   r<   r   r   r	   Ú#test_collide_circle__with_radii_set¤   s   ÿüz5SpriteCollideTest.test_collide_circle__with_radii_setc                 C   sb   d| j _d| j_d| j_t d¡}t| j ¡ t	d}ttj
| j | jd|dt	d}|  ||¡ d S )Nr   r   rH   g      à?r6   Fr"   )r   rI   r   r   r   rC   r8   r   r9   r:   r&   r;   r<   r   r   r	   Ú)test_collide_circle_ratio__with_radii_setµ   s   
ÿüz;SpriteCollideTest.test_collide_circle_ratio__with_radii_setc                 C   s²   | j j d¡ | jj d¡ | jj d¡ |  tj| j | jdtj	d| jg¡ t
j | j j¡| j _t
j | jj¡| j_t
j | jj¡| j_|  tj| j | jdtj	d| jg¡ d S )N)éÿ   rL   rL   rL   Fr"   )r   r   Úfillr   r   r%   r   r&   r   Úcollide_maskr   ÚmaskÚfrom_surfacer   r   r   r	   Útest_collide_mask__opaqueÆ   s$   ÿüÿüz+SpriteCollideTest.test_collide_mask__opaquec                 C   sŽ   | j j d¡ | jj d¡ | jj d¡ tj | j jd¡| j _tj | jjd¡| j_tj | jjd¡| j_|  t	j
| j | jdt	jd¡ d S )N)rL   rL   rL   r   rL   Fr"   )r   r   rM   r   r   r   rO   rP   ÚassertFalser   r&   r   rN   r   r   r   r	   Útest_collide_mask__transparentà   s   ÿÿz0SpriteCollideTest.test_collide_mask__transparentc                 C   s¸   | j }t | j| j¡}|  ||¡ | j j dd¡ t | j| j¡}|  |¡ | j	j dd¡ | j	}t | j| j¡}|  ||¡ | j j dd¡ | j 
¡ }t | j| j¡}|  ||¡ d S )Nr   r   i—ÿÿÿiöÿÿÿ)r   r   Úspritecollideanyr   r   r%   r   r   ÚassertIsNoner   r9   ÚassertIn)r   Zexpected_spriteÚcollided_spriteÚexpected_sprite_choicesr   r   r	   Ú0test_spritecollideany__without_collided_callbackð   s   


zBSpriteCollideTest.test_spritecollideany__without_collided_callbackc                 C   s<  i }i }dg}|||fdd„}| j  ¡ }t | j| j |¡}|  ||¡ |  t|ƒd¡ |  || j d¡ |  t|ƒd¡ |  t| 	¡ ƒd d¡ |  
| j|v pS| j|v ¡ | ¡  | ¡  d|d< t | j| j |¡}|  |¡ |  t|ƒd¡ |  || j t| j ƒ¡ |  t|ƒt| j ƒ¡ | j D ]
}|  || d¡ q‘d S )NTc                 S   s8   |  | d¡}d| || < |  |d¡}d| ||< |d S )Nr   r)   )Úget)Úspr_aÚspr_bÚ
arg_dict_aÚ
arg_dict_bÚreturn_containerÚcountr   r   r	   Úcollided_callback$  s
   zZSpriteCollideTest.test_spritecollideany__with_collided_callback.<locals>.collided_callbackr)   r   F)r   r9   r   rT   r   rV   r%   ÚlenÚlistÚvaluesÚ
assertTruer   r   ÚclearrU   )r   r]   r^   r_   ra   rX   rW   Úsr   r   r	   Ú-test_spritecollideany__with_collided_callback  s4   
û


ÿz?SpriteCollideTest.test_spritecollideany__with_collided_callbackc                 C   s  | j | jgi}tj | j| jdd¡}|  ||¡ tj | j| jdd¡}|  ||¡ tj | j| jdd¡}|  ||¡ i }tj | j| jdd¡}|  ||¡ | jj	 
dd¡ | j | jgi}tj | j| jdd¡}|  ||¡ i }tj | j| jdd¡}|  ||¡ d S )NFTiœÿÿÿ)r   r   r   r   Úgroupcollider   r   ÚassertDictEqualr   r   r   )r   Úexpected_dictÚcrashedr   r   r	   Ú,test_groupcollide__without_collided_callbackZ  s"   z>SpriteCollideTest.test_groupcollide__without_collided_callbackc                 C   s  dd„ }dd„ }i }t j | j| jdd|¡}|  ||¡ | jt| j ¡ t	di}t j | j| jdd|¡}| 
¡ D ]}|jt	d q8|  ||¡ t j | j| jdd|¡}| 
¡ D ]}|jt	d qW|  ||¡ i }t j | j| jdd|¡}|  ||¡ | jt| j ¡ t	di}t j | j| jdd|¡}| 
¡ D ]}|jt	d q–|  ||¡ i }t j | j| jdd|¡}|  ||¡ | j | j¡ | j | j¡ i }t j | j| jdd|¡}|  ||¡ | j| jg| j| jgi}t j | j| jdd|¡}|  ||¡ i }t j | j| jdd|¡}|  ||¡ d S )Nc                 S   ó   dS )NTr   ©r[   r\   r   r   r	   Ú<lambda>  ó    zMSpriteCollideTest.test_groupcollide__with_collided_callback.<locals>.<lambda>c                 S   rn   )NFr   ro   r   r   r	   rp   €  rq   Fr6   T)r   r   ri   r   r   rj   r   r8   r9   r:   rd   ÚsortÚaddr   r   )r   Zcollided_callback_trueZcollided_callback_falserk   rl   Úvaluer   r   r	   Ú)test_groupcollide__with_collided_callback~  sl   ÿÿÿÿÿÿÿÿÿz;SpriteCollideTest.test_groupcollide__with_collided_callbackc                 C   s.  |   tj | j| j¡¡ |   tj | j| j¡¡ | jjj| jj_|   tj | j| j¡¡ |   tj | j| j¡¡ | jj 	dd¡ |   tj | j| j¡¡ |   tj | j| j¡¡ | jjj
| jjjf| jj_|   tj | j| j¡¡ |   tj | j| j¡¡ |  tj | j| j¡¡ |  tj | j| j¡¡ d S )Nr   )re   r   r   r-   r   r   r   r   ÚcenterZ
inflate_ipÚrightÚbottomrR   r   r   r   r	   Útest_collide_rectÌ  s   z#SpriteCollideTest.test_collide_rectN)r   r   r   r    r'   r(   r+   r.   r3   r?   rB   rD   rE   rF   rG   rJ   rK   rQ   rS   rY   rh   rm   ru   ry   r   r   r   r	   r
      s,    			#G$Nr
   c                   @   st   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d„ Zdd„ ZdS )ÚAbstractGroupTypeTestc                 C   sj  t  ¡ | _t  ¡ | _t  | j¡| _t  | j¡| _t  | j¡| _t  | j¡| _t	 
d¡| j_| jj t	 d¡¡ | jj ¡ | j_t	 
d¡| j_| jj t	 d¡¡ | jj ¡ | j_d| jj_t	 
d¡| j_| jj t	 d¡¡ | jj ¡ | j_d| jj_t	 
d¡| j_| jj t	 d¡¡ | jj ¡ | j_d| jj_d| jj_t	 
d¡| _t	 
d¡| _| j t	 d¡¡ d S )	Nr   ÚredÚgreenr   ÚblueÚwhite)é   r   Zgrey)r   r   r   r   r   r   r   r   Ús4r   r   r   rM   ÚColorr   r   ÚleftÚtopÚbgÚscrr   r   r   r	   r    ì  s2   





zAbstractGroupTypeTest.setUpc              
   C   s  |   d| j| jv ¡ |   d| j | j¡¡ |   d| j | j| jg¡¡ |  d| j | j| j| jg¡¡ |  d| j | j| j| j¡¡ |  d| j | jt | j| j¡¡¡ |  d| j | j| j| jg¡¡ |  	| jjg Ž ¡ |  	| j g ¡¡ |  	| j g g¡¡ |   d| j
 | j¡¡ dS )z-See if AbstractGroup.has() works as expected.TN)r%   r   r   Úhasr   ÚassertNotEqualr   r   ÚGrouprR   r   r   r   r   r	   Útest_has  s    $ zAbstractGroupTypeTest.test_hasc                 C   sb   t  ¡ }| j| j| j| jf}|D ]}|  ||¡ q| | j| jg| j¡ |D ]}|  	||¡ q&d S ©N)
r   r   r   r   r   r€   ÚassertNotInrs   r   rV   )r   Zag3r9   rg   r   r   r	   Útest_add#  s   ÿzAbstractGroupTypeTest.test_addc                 C   s2   |   | j| j¡ | j | j¡ |  | j| j¡ d S rŠ   )r‹   r   r   Úadd_internalrV   r   r   r   r	   Útest_add_internal/  s   z'AbstractGroupTypeTest.test_add_internalc                 C   sL   | j  | j¡ | j  | j| j¡ |  d| j d¡¡ |  d| j d¡¡ d S )N)r   r   r   rL   ©é   r   ©é   r   )r   Údrawr…   rf   r„   r%   Úget_atr   r   r   r	   Ú
test_clear6  s   z AbstractGroupTypeTest.test_clearc              	   C   s~   | j  | j¡ |  d| j d¡¡ |  d| j d¡¡ |  | j j| j t dddd¡¡ |  | j j| j	 t dddd¡¡ d S )N)rL   r   r   rL   r   )r   rL   r   rL   r‘   r   r   )
r   r“   r…   r%   r”   Z
spritedictr   r   ÚRectr   r   r   r   r	   Ú	test_draw<  s
   "&zAbstractGroupTypeTest.test_drawc                 C   s2   | j  ¡  |  | j| j v ¡ |  | j| j v ¡ d S rŠ   )r   ÚemptyrR   r   r   r   r   r   r	   Ú
test_emptyD  s   
z AbstractGroupTypeTest.test_emptyc                 C   s,   |   | j | j¡¡ |  | j | j¡¡ d S rŠ   )re   r   Úhas_internalr   rR   r   r   r   r   r	   Útest_has_internalI  s   z'AbstractGroupTypeTest.test_has_internalc                 C   sT  | j  | j¡ |  | j | j ¡ v ¡ |  | j  | j¡¡ | j | j| j¡ |  | j| j ¡ v ¡ |  | j| j ¡ v ¡ |  | j | j| j¡¡ | j  	| j| j| j¡ | j 	| j| j¡ t
 | j¡}| j  | j|g| j¡ |  | j | j ¡ v ¡ |  | j | j ¡ v ¡ |  | j | j ¡ v ¡ |  | j | j ¡ v ¡ |  | j  | j| j| j| j¡¡ d S rŠ   )r   Úremover   rR   Úgroupsr†   r   r   r€   rs   r   rˆ   r   ©r   Úgr   r   r	   Útest_removeM  s    $z!AbstractGroupTypeTest.test_removec                 C   s&   | j  | j¡ |  | j  | j¡¡ d S rŠ   )r   Úremove_internalr   rR   rš   r   r   r   r	   Útest_remove_internale  s   z*AbstractGroupTypeTest.test_remove_internalc                 C   s6   t | j| jftd}t | j ¡ td}|  ||¡ d S ©Nr6   )r8   r   r   r:   r   r9   r;   )r   r>   Zsprite_listr   r   r	   Útest_spritesi  s   z"AbstractGroupTypeTest.test_spritesc                 C   sD   G dd„ dt jjƒ}|| jƒ}| j ddd¡ |  |jg d¢¡ d S )Nc                   @   ó    e Zd Zg Zdd„ Zdd„ ZdS )z6AbstractGroupTypeTest.test_update.<locals>.test_spritec                 W   ó   t jjj| g|¢R Ž  d S rŠ   ©r   r   r   Ú__init__©r   r   r   r   r	   r¨   s  ó   z?AbstractGroupTypeTest.test_update.<locals>.test_sprite.__init__c                 W   ó   |  j |7  _ d S rŠ   ©Úsink©r   Úargsr   r   r	   Úupdatev  ó   z=AbstractGroupTypeTest.test_update.<locals>.test_sprite.updateN©r   r   r   r­   r¨   r°   r   r   r   r	   Útest_spritep  ó    r³   r)   é   é   ©r)   rµ   r¶   )r   r   r   r   r°   r%   r­   ©r   r³   rg   r   r   r	   Útest_updateo  s   
	z!AbstractGroupTypeTest.test_updatec                 C   s^   G dd„ dt jjƒ}|| jƒ}| jjdddddd |  |jg d	¢¡ |  |jdddœ¡ d S )
Nc                   @   ó$   e Zd Zg Zi Zdd„ Zdd„ ZdS )zBAbstractGroupTypeTest.test_update_with_kwargs.<locals>.test_spritec                 W   r¦   rŠ   r§   r©   r   r   r	   r¨   ƒ  rª   zKAbstractGroupTypeTest.test_update_with_kwargs.<locals>.test_sprite.__init__c                 _   ó   |  j |7  _ | j |¡ d S rŠ   )r­   Úsink_kwargsr°   ©r   r¯   Úkwargsr   r   r	   r°   †  ó   zIAbstractGroupTypeTest.test_update_with_kwargs.<locals>.test_sprite.updateN)r   r   r   r­   r¼   r¨   r°   r   r   r   r	   r³     ó
    r³   r)   rµ   r¶   é   r   ©ZfooÚbarr·   )r   r   r   r   r°   r%   r­   r¼   r¸   r   r   r	   Útest_update_with_kwargs~  s
   
z-AbstractGroupTypeTest.test_update_with_kwargsN)r   r   r   r    r‰   rŒ   rŽ   r•   r—   r™   r›   r    r¢   r¤   r¹   rÄ   r   r   r   r	   rz   ë  s     rz   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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-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9S ):ÚLayeredGroupBasec                 C   st   d}|   ¡ }| jj||d | j |¡}|  t| jjƒd¡ |  || j |¡¡ |  ||¡ |  || jj| ¡ d S )Niš  ©Úlayerr)   )r   ÚLGrs   Úget_layer_of_spriter%   rb   Ú_spritelistÚ_spritelayers©r   Úexpected_layerÚsprrÇ   r   r   r	   Útest_get_layer_of_sprite—  s   z)LayeredGroupBase.test_get_layer_of_spritec                 C   sL   | j j}|  ¡ }| j  |¡ | j  |¡}|  t| j jƒd¡ |  ||¡ d S ©Nr)   )rÈ   Ú_default_layerr   rs   rÉ   r%   rb   rÊ   rÌ   r   r   r	   rŒ   ¢  s   zLayeredGroupBase.test_addc                 C   sN   d}|   ¡ }||_| j |¡ | j |¡}|  t| jjƒd¡ |  ||¡ d S )Nr   r)   ©r   Ú_layerrÈ   rs   rÉ   r%   rb   rÊ   rÌ   r   r   r	   Ú%test_add__sprite_with_layer_attribute«  s   z6LayeredGroupBase.test_add__sprite_with_layer_attributec                 C   sL   d}|   ¡ }| jj||d | j |¡}|  t| jjƒd¡ |  ||¡ d S )Nr   rÆ   r)   )r   rÈ   rs   rÉ   r%   rb   rÊ   rÌ   r   r   r	   Útest_add__passing_layer_keywordµ  s   z0LayeredGroupBase.test_add__passing_layer_keywordc                 C   sR   d}|   ¡ }d|_| jj||d | j |¡}|  t| jjƒd¡ |  ||¡ d S )NéÈ   r   rÆ   r)   rÒ   rÌ   r   r   r	   Ú&test_add__overriding_sprite_layer_attr¾  s   z7LayeredGroupBase.test_add__overriding_sprite_layer_attrc                 C   sD   |   ¡ }t  |¡}|j}|j| }|  t|jƒd¡ |  ||¡ d S rÐ   )r   ÚLayeredUpdatesrÑ   rË   r%   rb   rÊ   )r   rÎ   Úlrg2rÍ   rÇ   r   r   r	   Útest_add__adding_sprite_on_initÈ  s   

z0LayeredGroupBase.test_add__adding_sprite_on_initc                 C   sH   d}|   ¡ }||_t  |¡}|j| }|  t|jƒd¡ |  ||¡ d S )Nr   r)   ©r   rÓ   rØ   rË   r%   rb   rÊ   ©r   rÍ   rÎ   rÙ   rÇ   r   r   r	   Ú test_add__sprite_init_layer_attrÑ  s   

z1LayeredGroupBase.test_add__sprite_init_layer_attrc                 C   sF   d}|   ¡ }t j||d}|j| }|  t|jƒd¡ |  ||¡ d S )Né!   rÆ   r)   )r   rØ   rË   r%   rb   rÊ   rÜ   r   r   r	   Ú#test_add__sprite_init_passing_layerÛ  s   
z4LayeredGroupBase.test_add__sprite_init_passing_layerc                 C   sL   d}|   ¡ }d|_t j||d}|j| }|  t|jƒd¡ |  ||¡ d S )NrÞ   é7   rÆ   r)   rÛ   rÜ   r   r   r	   Ú%test_add__sprite_init_overiding_layerä  s   
z6LayeredGroupBase.test_add__sprite_init_overiding_layerc                    sp   ˆ j j}d}‡ fdd„t|ƒD ƒ}ˆ j  |¡ ˆ  tˆ j jƒ|¡ t|ƒD ]}ˆ j  || ¡}ˆ  ||¡ q%d S )Nr   c                    ó   g | ]}ˆ   ¡ ‘qS r   r   ©Ú.0Ú_r   r   r	   Ú
<listcomp>ñ  ó    z9LayeredGroupBase.test_add__spritelist.<locals>.<listcomp>)rÈ   rÑ   Úrangers   r%   rb   rÊ   rÉ   ©r   rÍ   Úsprite_countr9   ÚirÇ   r   r   r	   Útest_add__spritelistî  s   ýz%LayeredGroupBase.test_add__spritelistc                 C   s|   g }d}t |ƒD ]}| |  ¡ ¡ ||d _q| j |¡ |  t| jjƒ|¡ t |ƒD ]}| j 	|| ¡}|  ||¡ q+d S )Nr   éÿÿÿÿ)
rè   Úappendr   rÓ   rÈ   rs   r%   rb   rÊ   rÉ   )r   r9   Úsprite_and_layer_countrë   rÇ   r   r   r	   Ú$test_add__spritelist_with_layer_attrü  s   ýz5LayeredGroupBase.test_add__spritelist_with_layer_attrc                    sp   d}d}‡ fdd„t |ƒD ƒ}ˆ jj||d ˆ  tˆ jjƒ|¡ t |ƒD ]}ˆ j || ¡}ˆ  ||¡ q%d S )NrÞ   r   c                    râ   r   r   rã   r   r   r	   ræ     rç   zGLayeredGroupBase.test_add__spritelist_passing_layer.<locals>.<listcomp>rÆ   )rè   rÈ   rs   r%   rb   rÊ   rÉ   ré   r   r   r	   Ú"test_add__spritelist_passing_layer  s   ýz3LayeredGroupBase.test_add__spritelist_passing_layerc                 C   s„   d}g }d}t |ƒD ]}| |  ¡ ¡ ||d _q
| jj||d |  t| jjƒ|¡ t |ƒD ]}| j 	|| ¡}|  ||¡ q/d S )NrÞ   r   rí   rÆ   )
rè   rî   r   rÇ   rÈ   rs   r%   rb   rÊ   rÉ   )r   rÍ   r9   rï   rë   rÇ   r   r   r	   Ú%test_add__spritelist_overriding_layer  s   ýz6LayeredGroupBase.test_add__spritelist_overriding_layerc                    sh   d}‡ fdd„t |ƒD ƒ}t |¡}|j}ˆ  t|jƒ|¡ t |ƒD ]}| || ¡}ˆ  ||¡ q"d S )Nr   c                    râ   r   r   rã   r   r   r	   ræ   -  rç   z>LayeredGroupBase.test_add__spritelist_init.<locals>.<listcomp>)rè   r   rØ   rÑ   r%   rb   rÊ   rÉ   )r   rê   r9   rÙ   rÍ   rë   rÇ   r   r   r	   Útest_add__spritelist_init+  s   
ýz*LayeredGroupBase.test_add__spritelist_initc                 C   sŠ   g }d}t |ƒD ]}| |  ¡ ¡ t d¡|d _q| j |¡ |  t	| jj
ƒ|¡ t |ƒD ]
}| j || ¡ q.|  t	| jj
ƒd¡ d S )Nr   )r   r   r   r   rí   r   )rè   rî   r   r   r–   r   rÈ   rs   r%   rb   rÊ   rœ   )r   r9   rê   rë   r   r   r	   Útest_remove__sprite9  s   z$LayeredGroupBase.test_remove__spritec                 C   sx   g }d}t |ddƒD ]}| |  ¡ ¡ ||d _q
| j |¡ |  t| jjƒ|¡ t	t
|ƒƒ}| j ¡ }|  ||¡ d S )Nr   r   rí   )rè   rî   r   rÓ   rÈ   rs   r%   rb   rÊ   rc   Úreversedr9   r;   )r   r9   rï   rë   r>   Zactual_spritesr   r   r	   r¤   I  s   
zLayeredGroupBase.test_spritesc                 C   sp   g }g }d}t |ƒD ]}| |¡ t dƒD ]}| |  ¡ ¡ ||d _qq
| j |¡ | j ¡ }|  ||¡ d S )Nr   r   rí   )rè   rî   r   rÓ   rÈ   rs   Úlayersr;   )r   r9   Zexpected_layersZlayer_countrë   Újrö   r   r   r	   Útest_layers[  s   
þ
zLayeredGroupBase.test_layersc                 C   sf   g d¢}|D ]}| j j|  ¡ |d q| ¡  t| j  ¡ ƒD ]\}}| j  |¡}|  ||| ¡ qd S )N)r)   rÁ   é   é   r¶   rù   rµ   rù   rÁ   r   rù   r)   r   é	   é   rù   é6   rú   rµ   é+   rù   r)   rÆ   )rÈ   rs   r   rr   Ú	enumerater9   rÉ   r%   )r   rö   ÚlayÚidxrÎ   rÇ   r   r   r	   Útest_add__layers_are_correctj  s   ýz-LayeredGroupBase.test_add__layers_are_correctc                 C   s”   d}|   ¡ }| jj||d |  | jj| |¡ d}| j ||¡ |  | jj| |¡ d}|   ¡ }d|_| j |¡ | j ||¡ |  |j|¡ d S )Néc   rÆ   é,   éM   rà   )r   rÈ   rs   r%   rË   Zchange_layerrÇ   )r   rÍ   rÎ   Zspr2r   r   r	   Útest_change_layeru  s   z"LayeredGroupBase.test_change_layerc                 C   s|   g }g }t dƒD ]!}|  ¡ }t |d |d dd¡|_| |¡ |dk r)| |¡ q| j |¡ | j d¡}|  	||¡ d S )Nr¶   r   r   rµ   ©r   r   )
rè   r   r   r–   r   rî   rÈ   rs   Zget_sprites_atr%   )r   r9   r>   rë   rÎ   Úresultr   r   r	   Útest_get_sprites_at‰  s   

€z$LayeredGroupBase.test_get_sprites_atc                 C   óŠ   g d¢}|D ]}| j j|  ¡ |d q| j  ¡ }|  || j  ¡ ¡ |  |t|ƒ¡ |  |t| j j ¡ ƒ¡ |  || j j| j jd  ¡ d S )N©
r)   r   rµ   rú   rÁ   r   r¶   éX   é   r   rÆ   rí   )	rÈ   rs   r   Úget_top_layerr%   ÚmaxrË   rd   rÊ   )r   rö   rë   Z	top_layerr   r   r	   Útest_get_top_layer–  ó   
 z#LayeredGroupBase.test_get_top_layerc                 C   r
  )Nr  rÆ   r   )	rÈ   rs   r   Zget_bottom_layerr%   ÚminrË   rd   rÊ   )r   rö   rë   Zbottom_layerr   r   r	   Útest_get_bottom_layer¡  r  z&LayeredGroupBase.test_get_bottom_layerc                 C   óv   g d¢}|D ]}| j j|  ¡ |d q|  ¡ }| j j|dd |  || j jd ¡ | j  |¡ |  || j jd ¡ d S )Nr  rÆ   r¶   rí   )rÈ   rs   r   r‡   rÊ   Zmove_to_frontr%   ©r   rö   rë   rÎ   r   r   r	   Útest_move_to_front¬  ó   z#LayeredGroupBase.test_move_to_frontc                 C   r  )Nr  rÆ   rà   r   )rÈ   rs   r   r‡   rÊ   Zmove_to_backr%   r  r   r   r	   Útest_move_to_back¹  r  z"LayeredGroupBase.test_move_to_backc                 C   sR   g d¢}|D ]}| j j|  ¡ |d q| j  ¡ }| j  | j  ¡ ¡}|  ||¡ d S )Nr  rÆ   )rÈ   rs   r   r  rÉ   Zget_top_spriter%   )r   rö   rë   rÍ   rÇ   r   r   r	   Útest_get_top_spriteÆ  s   
z$LayeredGroupBase.test_get_top_spritec                 C   s¼   i }g d¢}|D ]}|   ¡ }||_| j |¡ ||vrg ||< ||  |¡ q| j ¡ D ]%}| j |¡D ]}|  ||| ¡ ||  |¡ t	|| ƒdkrP||= q4q,|  
t	| ¡ ƒd¡ d S )N) r)   rÁ   r   rù   r¶   rü   rú   rµ   r)   r¶   rÁ   r   rù   rü   rú   rû   r)   rµ   r¶   rÁ   r   rù   rü   rú   rû   r   r)   rù   r   rÁ   r¶   rµ   r   )r   rÓ   rÈ   rs   rî   rö   Úget_sprites_from_layerrV   rœ   rb   r%   rd   )r   r9   rö   r   rÎ   r   r   r	   Útest_get_sprites_from_layerÏ  s$   "€ûz,LayeredGroupBase.test_get_sprites_from_layerc                 C   s8  g }g }g d¢}|D ]}|   ¡ }||_| j |¡ |dkr#| |¡ q
| |¡ q
|jtd |jtd t| j d¡td}t| j d¡td}|  	||¡ |  	||¡ |  
t| jƒt|ƒt|ƒ ¡ | j dd¡ t| j d¡td}t| j d¡td}|  	||¡ |  	||¡ |  
t| jƒt|ƒt|ƒ ¡ d S )N)r¶   rµ   r¶   rµ   r¶   r¶   rµ   rµ   r¶   rµ   r¶   rµ   r¶   rµ   r¶   rµ   r¶   r¶   rµ   rµ   r¶   rµ   r¶   rµ   r6   r¶   )r   rÓ   rÈ   rs   rî   rr   r:   r8   r  r;   r%   rb   Zswitch_layer)r   Zsprites1Zsprites2rö   r   rÎ   Zlayer2_spritesZlayer3_spritesr   r   r	   Útest_switch_layer  s.   "z"LayeredGroupBase.test_switch_layerc                 C   sZ   | j  |  ¡ ¡ | j  ¡ d }| j  ¡ }|  |t| j ƒ¡ |  ||¡ |  || ¡ ¡ d S )Nr   )	rÈ   rs   r   r9   ÚcopyZassertIsInstanceÚtyperV   r   )r   rÎ   Zlg_copyr   r   r	   Ú	test_copy#  s   
zLayeredGroupBase.test_copyN)r   r   r   rÏ   rŒ   rÔ   rÕ   r×   rÚ   rÝ   rß   rá   rì   rð   rñ   rò   ró   rô   r¤   rø   r  r  r	  r  r  r  r  r  r  r  r  r   r   r   r	   rÅ   –  s:    	
	
	
	
	6rÅ   c                   @   ó   e Zd ZejZdd„ ZdS )Ú"LayeredUpdatesTypeTest__SpriteTestc                 C   ó   t  ¡ | _d S rŠ   ©r   rØ   rÈ   r   r   r   r	   r    3  ó   z(LayeredUpdatesTypeTest__SpriteTest.setUpN)r   r   r   r   r   r    r   r   r   r	   r!  0  ó    r!  c                   @   r   )Ú#LayeredUpdatesTypeTest__DirtySpritec                 C   r"  rŠ   r#  r   r   r   r	   r    :  r$  z)LayeredUpdatesTypeTest__DirtySprite.setUpN)r   r   r   r   ÚDirtySpriter    r   r   r   r	   r&  7  r%  r&  c                   @   sD   e Zd ZejZdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Z	dd„ Z
dS )Ú!LayeredDirtyTypeTest__DirtySpritec                 C   r"  rŠ   )r   ÚLayeredDirtyrÈ   r   r   r   r	   r    A  r$  z'LayeredDirtyTypeTest__DirtySprite.setUpc                 C   s4   | j }t d¡}| t dddd¡¡ | |¡ d S ©N)r   r   r   r   )rÈ   r   r   Úrepaint_rectr–   r“   ©r   ÚgroupÚsurfacer   r   r	   Útest_repaint_rectD  s   
z3LayeredDirtyTypeTest__DirtySprite.test_repaint_rectc                 C   sJ   | j }t d¡}| t dddd¡¡ | t dddd¡¡ | |¡ d S r*  )rÈ   r   r   Zset_clipr–   r+  r“   r,  r   r   r	   Útest_repaint_rect_with_clipK  s
   
z=LayeredDirtyTypeTest__DirtySprite.test_repaint_rect_with_clipFc                 C   sö  t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}| |¡ d}t  dd¡}t  d	d
¡}	t  d¡}
|
 |¡ |
 ||¡ |
 ||	¡ t j | j¡}|rs|
|_t  ||	j	d |	j
d f¡|_|	|_|jj\}}||jj	 }||jj
 }n|
 |	¡|_t  ||	j¡|_|jj\}}|jj\}}t j | j¡}|
|_t  ||j¡|_||_d|_tdƒD ]}|j dd¡ | j |¡ q©| ¡  z8t||ƒD ]+}t||ƒD ]#}|j ||¡rÖ|}n|}| ||f¡}|  ||d|› d|› d¡ qÊqÃW | ¡  d S | ¡  w )Nr{   r}   r~   Úyellow)é<   éP   r   )é-   r   )r   rÁ   )r   r   )r   r   r  rü   rµ   rÁ   r)   zpos=(z, ú))r   r   r   rM   r–   r   r'  rÈ   r   ÚwÚhr   Zsource_rectZtopleftZ
subsurfaceÚsizeZbottomrightZdirtyrè   r   r“   ÚlockZcollidepointr”   r%   Úunlock)r   Zuse_source_rectZREDZBLUEZWHITEZYELLOWr.  Ú	start_posZred_sprite_sourceZblue_sprite_sourceZimage_sourceZblue_spriteZstart_xZstart_yZend_xZend_yZ
red_spriterå   ÚyÚxZexpected_colorÚcolorr   r   r	   Ú_nondirty_intersections_redrawnS  s^   







ÿøÿzALayeredDirtyTypeTest__DirtySprite._nondirty_intersections_redrawnc                 C   s   |   ¡  dS )zgEnsure non-dirty sprites are correctly redrawn
        when dirty sprites intersect with them.
        N©r?  r   r   r   r	   Ú#test_nondirty_intersections_redrawn°  s   zELayeredDirtyTypeTest__DirtySprite.test_nondirty_intersections_redrawnc                 C   s   |   d¡ dS )zšEnsure non-dirty sprites using source_rects are correctly redrawn
        when dirty sprites intersect with them.

        Related to issue #898.
        TNr@  r   r   r   r	   Ú5test_nondirty_intersections_redrawn__with_source_rect¶  s   zWLayeredDirtyTypeTest__DirtySprite.test_nondirty_intersections_redrawn__with_source_rectN)F)r   r   r   r   r'  r    r/  r0  r?  rA  rB  r   r   r   r	   r(  >  s    
]r(  c                   @   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 )Ú
SpriteBasec                 C   s.   g | _ | jD ]	}| j  |ƒ ¡ q|  ¡ | _d S rŠ   )r   ÚGroupsrî   r   r   )r   rˆ   r   r   r	   r    Å  s   
zSpriteBase.setUpc                 C   s:   | j D ]}| j |¡ q| j D ]}|  || j  ¡ ¡ qd S rŠ   )r   r   r   rV   rž   r   r   r	   rŽ   Ì  s
   

ÿzSpriteBase.test_add_internalc                 C   sT   | j D ]}| j |¡ q| j D ]}| j |¡ q| j D ]}|  || j  ¡ v ¡ qd S rŠ   )r   r   r   r¡   rR   rž   r   r   r	   r¢   Ó  s   


ÿzSpriteBase.test_remove_internalc                 C   s>   G dd„ dt jjƒ}|ƒ }| ddd¡ |  |jg d¢¡ d S )Nc                   @   r¥   )z+SpriteBase.test_update.<locals>.test_spritec                 W   r¦   rŠ   r§   r©   r   r   r	   r¨   â  rª   z4SpriteBase.test_update.<locals>.test_sprite.__init__c                 W   r«   rŠ   r¬   r®   r   r   r	   r°   å  r±   z2SpriteBase.test_update.<locals>.test_sprite.updateNr²   r   r   r   r	   r³   ß  r´   r³   r)   rµ   r¶   r·   )r   r   r   r°   r%   r­   r¸   r   r   r	   r¹   Ý  s   	zSpriteBase.test_updatec                 C   sX   G dd„ dt jjƒ}|ƒ }|jdddddd |  |jg d	¢¡ |  |jdddœ¡ d S )
Nc                   @   rº   )z7SpriteBase.test_update_with_kwargs.<locals>.test_spritec                 W   r¦   rŠ   r§   r©   r   r   r	   r¨   ò  rª   z@SpriteBase.test_update_with_kwargs.<locals>.test_sprite.__init__c                 _   r»   rŠ   )r­   Ú	sink_dictr°   r½   r   r   r	   r°   õ  r¿   z>SpriteBase.test_update_with_kwargs.<locals>.test_sprite.updateN)r   r   r   r­   rE  r¨   r°   r   r   r   r	   r³   î  rÀ   r³   r)   rµ   r¶   rÁ   r   rÂ   r·   )r   r   r   r°   r%   r­   rE  r¸   r   r   r	   rÄ   í  s
   z"SpriteBase.test_update_with_kwargsc                 C   s:   t | jtd}|  | j¡}t | ¡ td}|  ||¡ d S r£   )r8   r   r:   r   r;   )r   Úexpected_groupsr   r   r   r   r	   Ú%test___init____added_to_groups_passedÿ  s   z0SpriteBase.test___init____added_to_groups_passedc                 C   s>   t | jtd}| j | j¡ t | j ¡ td}|  ||¡ d S r£   )r8   r   r:   r   rs   r;   )r   rF  r   r   r   r	   rŒ     s   zSpriteBase.test_addc                 C   s4   |   | j ¡ d¡ | j | j¡ |  | j ¡ ¡ d S )Nz*Sprite should not be alive if in no groups)rR   r   Úalivers   r   re   r   r   r   r	   Ú
test_alive  s
   
ÿzSpriteBase.test_alivec                 C   s\   t | jƒD ]&\}}t| jd |d … td}| j |¡ t| j ¡ td}|  ||¡ qd S )Nr)   r6   )rÿ   r   r8   r:   r   rs   r;   )r   rë   rŸ   rF  r   r   r   r	   Útest_groups  s   ûzSpriteBase.test_groupsc                 C   sN   | j  | j¡ |  | j  ¡ ¡ | j  ¡  |  | j  ¡ g ¡ |  | j  ¡ ¡ d S rŠ   )r   rs   r   re   rH  Úkillr;   rR   r   r   r   r	   Ú	test_kill  s
   
zSpriteBase.test_killc                 C   s2   | j  | j¡ | j  | j¡ |  | j  ¡ g ¡ d S rŠ   )r   rs   r   rœ   r;   r   r   r   r	   r    (  s   zSpriteBase.test_removeN)r   r   r   r    rŽ   r¢   r¹   rÄ   rG  rŒ   rI  rJ  rL  r    r   r   r   r	   rC  Ä  s    
	
rC  c                   @   s&   e Zd ZejZejejejejgZ	dS )ÚSpriteTypeTestN)
r   r   r   r   r   rˆ   rØ   ÚRenderUpdatesÚOrderedUpdatesrD  r   r   r   r	   rM  2  s    ürM  c                   @   s*   e Zd ZejZejejejej	ej
gZdS )ÚDirtySpriteTypeTestN)r   r   r   r   r'  r   rˆ   rØ   rN  rO  r)  rD  r   r   r   r	   rP  =  s    ûrP  c                   @   s   e Zd ZejZdd„ ZdS )ÚWeakSpriteTypeTestc                 C   sB   ddl }dd„ | jD ƒ}| j |¡ ~| ¡  |  | j ¡ ¡ dS )z‰
        We create a list of groups, add them to the sprite.
        When we then delete the groups, the sprite should be "dead"
        r   Nc                 S   s   g | ]}|ƒ ‘qS r   r   )rä   rˆ   r   r   r	   ræ   S  s    z:WeakSpriteTypeTest.test_weak_group_ref.<locals>.<listcomp>)ÚgcrD  r   rs   ÚcollectrR   rH  )r   rR  r   r   r   r	   Útest_weak_group_refL  s   z&WeakSpriteTypeTest.test_weak_group_refN)r   r   r   r   Z
WeakSpriter   rT  r   r   r   r	   rQ  I  r%  rQ  c                   @   s   e Zd ZejZdS )ÚDirtyWeakSpriteTypeTestN)r   r   r   r   ZWeakDirtySpriter   r   r   r   r	   rU  Z  s    
rU  c                   @   ó   e Zd Zdd„ ZdS )ÚSingleGroupBugsTestc                 C   s–   dd l }dd l}G dd„ dtjƒ}t ¡ }t ddd¡}|ƒ }| |¡}||_~| ¡  |  	|ƒ ¡ | 
¡  | |¡ |ƒ |_| ¡  |  |ƒ ¡ d S )Nr   c                   @   rV  )z9SingleGroupBugsTest.test_memoryleak_bug.<locals>.MySpritec                 _   s:   t jj| g|¢R i |¤Ž t ddd¡| _| j ¡ | _d S )N)rµ   rÁ   r   é   )r   r   r¨   r   r   r   r   r   r½   r   r   r	   r¨   j  s   zBSingleGroupBugsTest.test_memoryleak_bug.<locals>.MySprite.__init__N)r   r   r   r¨   r   r   r   r	   ÚMySpritei  ó    rY  )rÁ   rú   rX  )ÚweakrefrR  r   r   ZGroupSingler   r   ÚrefrS  ZassertIsNotNoner°   r“   rU   )r   r[  rR  rY  rŸ   Úscreenrg   Úrr   r   r	   Útest_memoryleak_bugb  s    

z'SingleGroupBugsTest.test_memoryleak_bugN)r   r   r   r_  r   r   r   r	   rW  a  rZ  rW  Ú__main__)Zunittestr   r   ZTestCaser   r
   rz   rÅ   r!  r&  r(  rC  rM  rP  rQ  rU  rW  r   Úmainr   r   r   r	   Ú<module>   s6      Z ,    n"ÿ