o
    tVÆgj¸  ã                   @   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   úL/home/ubuntu/.local/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ÚSurfaceÚ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©ÚdokillÚ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   r5   Úsortedr   ÚspritesÚidr(   r   ÚassertListEqual©r    Úcollided_funcÚexpected_spritesÚ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   r2   z4SpriteCollideTest.test_collide_circle__no_radius_setc              	   C   r3   r4   )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 r7   )	r   rG   r;   r   r<   r=   r(   r   r>   r?   r   r   r	   Ú8test_collide_circle_ratio__no_radius_and_ratio_of_twentyn   rD   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 )Nr8   Fr#   )r   rG   r(   r   r   r'   rE   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#   r9   )r   rG   r;   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   é  r9   Fr#   )r   Úradiusr   r   r   rE   r;   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   rL   g      à?r9   Fr#   )r   rM   r   r   r   rG   r;   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)éÿ   rP   rP   rP   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)rP   rP   rP   r   rP   Fr#   )r   r   rQ   r   r   r   rS   rT   ÚassertFalser   r(   r   rR   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    Ú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   rX   r   rZ   r'   ÚlenÚlistÚvaluesÚ
assertTruer   r   ÚclearrY   )r    rb   rc   rd   rf   r]   r\   Ú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`   ra   r   r   r	   Ú<lambda>  ó    zMSpriteCollideTest.test_groupcollide__with_collided_callback.<locals>.<lambda>c                 S   rs   )NFr   rt   r   r   r	   ru   €  rv   Fr9   T)r   r   rn   r   r   ro   r   r;   r<   r=   ri   ÚsortÚaddr   r   )r    Úcollided_callback_trueÚcollided_callback_falserp   rq   Ú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   )rj   r   r   r0   r   r   r   r   ÚcenterÚ
inflate_ipÚrightÚbottomrV   r   r   r   r	   Útest_collide_rectÌ  s   z#SpriteCollideTest.test_collide_rectN)r   r   r   r!   r)   r*   r.   r1   r6   rC   rF   rH   rI   rJ   rK   rN   rO   rU   rW   r^   rm   rr   r|   r   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‡   Úgrey)r   r   r   r   r   r   r   r   Ús4r   r   r   rQ   Ú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   ÚGrouprV   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‰   ÚassertNotInrx   r   rZ   )r    Úag3r<   rl   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_internalrZ   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   rP   ©é   rš   ©é   rš   )r   ÚdrawrŽ   rk   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)rP   r   r   rP   r™   )r   rP   r   rP   r›   r   r   )
r   r   rŽ   r'   rž   Ú
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   ÚemptyrV   r   r   r   r   r   r	   Ú
test_emptyD  s   
z AbstractGroupTypeTest.test_emptyc                 C   s,   |   | j | j¡¡ |  | j | j¡¡ d S r“   )rj   r   Úhas_internalr   rV   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   rV   Úgroupsr   r   r   r‰   rx   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   rV   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 ©Nr9   )r;   r   r   r=   r   r<   r>   )r    rA   Ú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¿   rl   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š   ©Ú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   ÚLGrx   Úget_layer_of_spriter'   rg   Ú_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   rx   rÖ   r'   rg   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Õ   rx   rÖ   r'   rg   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Õ   rx   rÖ   r'   rg   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'   rg   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'   rg   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'   rg   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Þ   Úrangerx   r'   rg   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Õ   rx   r'   rg   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Õ   rx   r'   rg   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Õ   rx   r'   rg   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'   rg   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Õ   rx   r'   rg   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Õ   rx   r'   rg   r×   rh   Úreversedr<   r>   )r    r<   rü   rø   rA   Ú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Õ   rx   Úlayersr>   )r    r<   Úexpected_layersÚ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Õ   rx   r   rw   Ú	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Õ   rx   r'   rØ   Úchange_layerrÔ   )r    rÚ   rÛ   Ú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Õ   rx   Úget_sprites_atr'   )r    r<   rA   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Õ   rx   r   Úget_top_layerr'   ÚmaxrØ   ri   r×   )r    r  rø   Ú	top_layerr   r   r	   Útest_get_top_layer–  ó   
 z#LayeredGroupBase.test_get_top_layerc                 C   r  )Nr  rÓ   r   )	rÕ   rx   r   Úget_bottom_layerr'   ÚminrØ   ri   r×   )r    r  rø   Ú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Õ   rx   r   r   r×   Ú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Õ   rx   r   r   r×   Ú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Õ   rx   r   r!  rÖ   Ú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Õ   rx   rû   r  Úget_sprites_from_layerrZ   r§   rg   r'   ri   )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Á   r9   rÂ   )r   rà   rÕ   rx   rû   rw   r=   r;   r3  r>   r'   rg   Úswitch_layer)r    Úsprites1Úsprites2r  r  rÛ   Úlayer2_spritesÚ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Õ   rx   r   r<   ÚcopyÚassertIsInstanceÚtyperZ   r¨   )r    rÛ   Ú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-  r0  r2  r4  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	   rA  0  ó    rA  c                   @   r@  )Ú#LayeredUpdatesTypeTest__DirtySpritec                 C   rB  r“   rC  r   r   r   r	   r!   :  rD  z)LayeredUpdatesTypeTest__DirtySprite.setUpN)r   r   r   r   ÚDirtySpriter!   r   r   r   r	   rF  7  rE  rF  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   rB  r“   )r   ÚLayeredDirtyrÕ   r   r   r   r	   r!   A  rD  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 rJ  )rÕ   r   r   Úset_clipr¡   rK  r   rL  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   rQ   r¡   r   rG  rÕ   r   ÚwÚhr   Úsource_rectÚtopleftÚ
subsurfaceÚsizeÚbottomrightÚdirtyrõ   r   r   ÚlockÚcollidepointrž   r'   Úunlock)r    Úuse_source_rectÚREDÚBLUEÚWHITEÚYELLOWrN  Ú	start_posÚred_sprite_sourceÚblue_sprite_sourceÚimage_sourceÚblue_spriteÚstart_xÚstart_yÚend_xÚend_yÚ
red_spriterò   ÚyÚxÚ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©ru  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.
        TNrv  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   rG  r!   rO  rQ  ru  rw  rx  r   r   r   r	   rH  >  s    
]rH  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—   rZ   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¬   rV   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¹   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
   z"SpriteBase.test_update_with_kwargsc                 C   s:   t | jtd}|  | j¡}t | ¡ td}|  ||¡ d S r®   )r;   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®   )r;   r¨   r=   r   rx   r>   )r    r|  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)rV   r   Úaliverx   r¨   rj   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+   r9   )r  r¨   r;   r=   r   rx   r>   )r    rø   rª   r|  r¨   r   r   r	   Útest_groups  s   ûzSpriteBase.test_groupsc                 C   sN   | j  | j¡ |  | j  ¡ ¡ | j  ¡  |  | j  ¡ g ¡ |  | j  ¡ ¡ d S r“   )r   rx   r¨   rj   r~  Úkillr>   rV   r   r   r   r	   Ú	test_kill  s
   
zSpriteBase.test_killc                 C   s2   | j  | j¡ | j  | j¡ |  | j  ¡ g ¡ d S r“   )r   rx   r¨   r§   r>   r   r   r   r	   r«   (  s   zSpriteBase.test_removeN)r   r   r   r!   r˜   r­   rÅ   rÑ   r}  r–   r  r€  r‚  r«   r   r   r   r	   ry  Ä  s    
	
ry  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ÚOrderedUpdatesrz  r   r   r   r	   rƒ  2  s    ürƒ  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   rG  r   r‘   rå   r„  r…  rI  rz  r   r   r   r	   r†  =  s    ûr†  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>)Úgcrz  r   rx   ÚcollectrV   r~  )r    rˆ  r¨   r   r   r	   Útest_weak_group_refL  s   z&WeakSpriteTypeTest.test_weak_group_refN)r   r   r   r   Ú
WeakSpriter   rŠ  r   r   r   r	   r‡  I  rE  r‡  c                   @   s   e Zd ZejZdS )ÚDirtyWeakSpriteTypeTestN)r   r   r   r   ÚWeakDirtySpriter   r   r   r   r	   rŒ  Z  s    
rŒ  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                   @   rŽ  )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  ó    r‘  )rÍ   r
  r  )Úweakrefrˆ  r   r   ÚGroupSingler   r   Úrefr‰  ÚassertIsNotNoner¼   r   rY   )r    r“  rˆ  r‘  rª   Úscreenrl   Úrr   r   r	   Útest_memoryleak_bugb  s    

z'SingleGroupBugsTest.test_memoryleak_bugN)r   r   r   r™  r   r   r   r	   r  a  r’  r  Ú__main__)Úunittestr   r   ÚTestCaser   r
   r‚   rÒ   rA  rF  rH  ry  rƒ  r†  r‡  rŒ  r  r   Úmainr   r   r   r	   Ú<module>   s6      Z ,    n"ÿ