o
    OZŽhj¸  ã                   @   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   úG/var/www/auris/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"   )Ú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   r3   Ú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   r0   z4SpriteCollideTest.test_collide_circle__no_radius_setc              	   C   r1   r2   )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 r5   )	r   rD   r9   r   r:   r;   r&   r   r<   r=   r   r   r	   Ú8test_collide_circle_ratio__no_radius_and_ratio_of_twentyn   rA   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 )Nr6   Fr"   )r   rD   r&   r   r   r%   rB   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"   r7   )r   rD   r9   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   é  r7   Fr"   )r   Úradiusr   r   r   rB   r9   r   r:   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   rI   g      à?r7   Fr"   )r   rJ   r   r   r   rD   r9   r   r:   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)éÿ   rM   rM   rM   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)rM   rM   rM   r   rM   Fr"   )r   r   rN   r   r   r   rP   rQ   ÚassertFalser   r&   r   rO   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   r:   Ú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   r:   r   rU   r   rW   r%   ÚlenÚlistÚvaluesÚ
assertTruer   r   ÚclearrV   )r   r^   r_   r`   rb   rY   rX   Ú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   ro   )NFr   rp   r   r   r	   rq   €  rr   Fr7   T)r   r   rj   r   r   rk   r   r9   r:   r;   re   ÚsortÚaddr   r   )r   Zcollided_callback_trueZcollided_callback_falserl   rm   Ú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   )rf   r   r   r.   r   r   r   r   ÚcenterZ
inflate_ipÚrightÚbottomrS   r   r   r   r	   Útest_collide_rectÌ  s   z#SpriteCollideTest.test_collide_rectN)r   r   r   r    r'   r(   r,   r/   r4   r@   rC   rE   rF   rG   rH   rK   rL   rR   rT   rZ   ri   rn   rv   rz   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   rN   Ú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   ÚGrouprS   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   ÚassertNotInrt   r   rW   )r   Zag3r:   rh   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_internalrW   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   rM   ©é   r‘   ©é   r‘   )r   Údrawr†   rg   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)rM   r   r   rM   r   )r   rM   r   rM   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   ÚemptyrS   r   r   r   r   r   r	   Ú
test_emptyD  s   
z AbstractGroupTypeTest.test_emptyc                 C   s,   |   | j | j¡¡ |  | j | j¡¡ d S r‹   )rf   r   Úhas_internalr   rS   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   rS   Úgroupsr‡   r   r   r   rt   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   rS   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 ©Nr7   )r9   r   r   r;   r   r:   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´   rh   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	   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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   ÚLGrt   Úget_layer_of_spriter%   rc   Ú_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   rt   rÊ   r%   rc   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É   rt   rÊ   r%   rc   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É   rt   rÊ   r%   rc   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%   rc   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%   rc   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%   rc   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Ò   Úrangert   r%   rc   rË   rÊ   ©r   rÎ   Úsprite_countr:   Ú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É   rt   r%   rc   rË   rÊ   )r   r:   Ú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É   rt   r%   rc   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É   rt   r%   rc   rË   rÊ   )r   rÎ   r:   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%   rc   rË   rÊ   )r   rë   r:   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É   rt   r%   rc   rË   r   )r   r:   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É   rt   r%   rc   rË   rd   Úreversedr:   r<   )r   r:   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É   rt   Úlayersr<   )r   r:   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É   rt   r   rs   Ú	enumerater:   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É   rt   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É   rt   Zget_sprites_atr%   )r   r:   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É   rt   r   Úget_top_layerr%   ÚmaxrÌ   re   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É   rt   r   Zget_bottom_layerr%   ÚminrÌ   re   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É   rt   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É   rt   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É   rt   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É   rt   rï   r÷   Úget_sprites_from_layerrW   r   rc   r%   re   )r   r:   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¶   r7   r·   )r   rÔ   rÉ   rt   rï   rs   r;   r9   r  r<   r%   rc   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É   rt   r   r:   ÚcopyZassertIsInstanceÚtyperW   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   rN   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.
        TNrA  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    r0  r1  r@  rB  rC  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Ž   rW   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¢   rS   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®   rF  r©   r±   r   r   r   r	   r´   î  rÁ   r´   r)   r¶   r·   rÂ   r‘   rÃ   r¸   )r   r   r   r±   r%   r®   rF  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¤   )r9   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¤   )r9   rž   r;   r   rt   r<   )r   rG  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)rS   r   Úalivert   rž   rf   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)   r7   )r   rž   r9   r;   r   rt   r<   )r   rì   r    rG  rž   r   r   r	   Útest_groups  s   ûzSpriteBase.test_groupsc                 C   sN   | j  | j¡ |  | j  ¡ ¡ | j  ¡  |  | j  ¡ g ¡ |  | j  ¡ ¡ d S r‹   )r   rt   rž   rf   rI  Úkillr<   rS   r   r   r   r	   Ú	test_kill  s
   
zSpriteBase.test_killc                 C   s2   | j  | j¡ | j  | j¡ |  | j  ¡ g ¡ d S r‹   )r   rt   rž   r   r<   r   r   r   r	   r¡   (  s   zSpriteBase.test_removeN)r   r   r   r    r   r£   rº   rÅ   rH  r   rJ  rK  rM  r¡   r   r   r   r	   rD  Ä  s    
	
rD  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ÚOrderedUpdatesrE  r   r   r   r	   rN  2  s    ürN  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Ù   rO  rP  r*  rE  r   r   r   r	   rQ  =  s    ûrQ  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>)ÚgcrE  r   rt   ÚcollectrS   rI  )r   rS  rž   r   r   r	   Útest_weak_group_refL  s   z&WeakSpriteTypeTest.test_weak_group_refN)r   r   r   r   Z
WeakSpriter   rU  r   r   r   r	   rR  I  r&  rR  c                   @   s   e Zd ZejZdS )ÚDirtyWeakSpriteTypeTestN)r   r   r   r   ZWeakDirtySpriter   r   r   r   r	   rV  Z  s    
rV  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                   @   rW  )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  ó    rZ  )rÂ   rû   rY  )ÚweakrefrS  r   r   ZGroupSingler   r   ÚrefrT  ZassertIsNotNoner±   r”   rV   )r   r\  rS  rZ  r    Úscreenrh   Úrr   r   r	   Útest_memoryleak_bugb  s    

z'SingleGroupBugsTest.test_memoryleak_bugN)r   r   r   r`  r   r   r   r	   rX  a  r[  rX  Ú__main__)Zunittestr   r   ZTestCaser   r
   r{   rÆ   r"  r'  r)  rD  rN  rQ  rR  rV  rX  r   Úmainr   r   r   r	   Ú<module>   s6      Z ,    n"ÿ