§
    ¿Âªjü  ã                  ó  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZmZmZ ddlmZ ddlmZ  G d	„ d
ej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )u  AutoPOE2 - Unit Tests cho Skills Management & Auto Skill Binder.

Kiá»ƒm thá»­ tÃ­nh toÃ¡n hÃ¬nh há»�c Action Bar Ä‘a Ä‘á»™ phÃ¢n giáº£i,
bounding box pop-up, thuáº­t toÃ¡n phÃ¡t hiá»‡n pop-up scanner vÃ  quy trÃ¬nh binder.
TuÃ¢n thá»§ Rule 1, Rule 4, Rule 5.
é    )ÚannotationsN)Ú	MagicMockÚpatch)ÚImage)ÚActionBarSlotÚNormalizedSlotCoordÚACTION_BAR_DEFAULT_OFFSETSÚSKILL_POPUP_GEOMETRYÚget_slot_client_posÚget_popup_bounding_box)ÚSkillPopupScanner)ÚSkillBinderc                  ó*   — e Zd ZdZdd„Zdd„Zdd„ZdS )	ÚTestSkillGeometryuG   Kiá»ƒm thá»­ tÃ­nh toÃ¡n hÃ¬nh há»�c tá»�a Ä‘á»™ Action Bar vÃ  Pop-up.ÚreturnÚNonec                óÚ  — t          t          j        dd¦  «        \  }}|                      |dd¬¦  «         |                      |dd¬¦  «         t          t          j        dd¦  «        \  }}|                      |dd¬¦  «         |                      |dd¬¦  «         t          t          j        dd¦  «        \  }}|                      |dd¬¦  «         |                      |dd¬¦  «         d	S )
uR   Kiá»ƒm tra quy Ä‘á»•i tá»�a Ä‘á»™ slot trÃªn Ä‘á»™ phÃ¢n giáº£i windowed 1189x891.é¥  é{  éH  é   ©Údeltaé\  i  iu  N)r   r   ÚSLOT_EÚassertAlmostEqualÚSLOT_QÚSLOT_R)ÚselfÚx_eÚy_eÚx_qÚy_qÚx_rÚy_rs          ú/C:\Projects\AutoPOE2\tests\test_skill_binder.pyÚtest_slot_client_pos_1189x891z/TestSkillGeometry.test_slot_client_pos_1189x891   sø   € õ '¥}Ô';¸TÀ3ÑGÔG‰ˆˆSØ×Ò˜s C¨qÐÑ1Ô1Ð1Ø×Ò˜s C¨qÐÑ1Ô1Ð1õ '¥}Ô';¸TÀ3ÑGÔG‰ˆˆSØ×Ò˜s C¨qÐÑ1Ô1Ð1Ø×Ò˜s C¨qÐÑ1Ô1Ð1õ '¥}Ô';¸TÀ3ÑGÔG‰ˆˆSØ×Ò˜s C¨qÐÑ1Ô1Ð1Ø×Ò˜s C¨qÐÑ1Ô1Ð1Ð1Ð1ó    c                óš   — t          t          j        dd¦  «        \  }}|                      |d¦  «         |                      |d¦  «         dS )uM   Kiá»ƒm tra quy Ä‘á»•i tá»�a Ä‘á»™ slot trÃªn Ä‘á»™ phÃ¢n giáº£i 2K 2560x1440.i 
  i   i  id  N)r   r   r   ÚassertGreater)r   r    r!   s      r&   Útest_slot_client_pos_2560x1440z0TestSkillGeometry.test_slot_client_pos_2560x1440.   sL   € å&¥}Ô';¸TÀ4ÑHÔH‰ˆˆSØ×Ò˜3 Ñ%Ô%Ð%Ø×Ò˜3 Ñ%Ô%Ð%Ð%Ð%r(   c                ó>  — t          t          j        dd¦  «        \  }}}}|                      ||¦  «         |                      ||¦  «         ||z
  }|                      |dd¬¦  «         ||z
  }|                      |dd¬¦  «         |                      |d¦  «         dS )	uF   Kiá»ƒm tra tÃ­nh toÃ¡n bounding box cá»§a pop-up khi má»Ÿ tá»« Slot E.r   r   éò   é   r   i'  r   N)r   r   r   r*   r   Ú
assertLess)r   ÚleftÚtopÚrightÚbottomÚwidthÚheights          r&   Útest_popup_bounding_boxz)TestSkillGeometry.test_popup_bounding_box4   sµ   € å#9½-Ô:NÐPTÐVYÑ#ZÔ#ZÑ ˆˆc�5˜&Ø×Ò˜5 $Ñ'Ô'Ð'Ø×Ò˜6 3Ñ'Ô'Ð'ð ˜‘ˆØ×Ò˜u c°ÐÑ3Ô3Ð3ð ˜#‘ˆØ×Ò˜v s°!ÐÑ4Ô4Ð4ð 	�Š˜ Ñ$Ô$Ð$Ð$Ð$r(   N©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r+   r6   © r(   r&   r   r      sV   € € € € € ØQÐQð2ð 2ð 2ð 2ð"&ð &ð &ð &ð%ð %ð %ð %ð %ð %r(   r   c                  ó:   — e Zd ZdZd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )ÚTestSkillPopupScanneru-   Kiá»ƒm thá»­ thuáº­t toÃ¡n quÃ©t pop-up menu.r   r   c                ó,   — t          ¦   «         | _        d S )N)r   Úscanner)r   s    r&   ÚsetUpzTestSkillPopupScanner.setUpI   s   € Ý(Ñ*Ô*ˆŒˆˆr(   c                óî   — t          j        ddd¬¦  «        }t          dd¦  «        D ]}|                     |dfd¦  «         Œd}| j                             ||¦  «        }|                      |¦  «         d	S )
uX   áº¢nh cÃ³ ná»�n tá»‘i vÃ  viá»�n vÃ ng kim pháº£i Ä‘Æ°á»£c nháº­n diá»‡n lÃ  popup má»Ÿ.ÚRGB©é�  rE   )é   é   é
   ©ÚcolorrH   é†  )éd   éP   é2   ©rH   rH   rK   rK   N)r   ÚnewÚrangeÚputpixelr@   Úis_popup_openÚ
assertTrue)r   ÚimgÚxÚbboxÚis_opens        r&   Ú!test_is_popup_open_synthetic_darkz7TestSkillPopupScanner.test_is_popup_open_synthetic_darkL   s€   € õ Œi˜˜z°Ð>Ñ>Ô>ˆå�r˜3‘”ð 	1ð 	1ˆAØ�LŠL˜!˜R˜ -Ñ0Ô0Ð0Ð0à!ˆØ”,×,Ò,¨S°$Ñ7Ô7ˆØ�Š˜Ñ Ô Ð Ð Ð r(   c                ó˜   — t          j        ddd¬¦  «        }d}| j                             ||¦  «        }|                      |¦  «         dS )u]   áº¢nh sÃ¡ng (mÃ´i trÆ°á»�ng ngoÃ i map/town khÃ´ng má»Ÿ popup) khÃ´ng Ä‘Æ°á»£c coi lÃ  popup.rC   rD   )é´   r[   r[   rI   rO   N)r   rP   r@   rS   ÚassertFalse)r   rU   rW   rX   s       r&   Ú#test_is_popup_open_synthetic_brightz9TestSkillPopupScanner.test_is_popup_open_synthetic_brightX   sN   € åŒi˜˜z°ÐAÑAÔAˆØ!ˆØ”,×,Ò,¨S°$Ñ7Ô7ˆØ×Ò˜Ñ!Ô!Ð!Ð!Ð!r(   c                óþ  — ddl }d}d}|j                             |¦  «        r|j                             |¦  «        s|                      d¦  «         t	          j        |¦  «        }t	          j        |¦  «        }t          t          j        |j	        |j
        ¦  «        }|                      | j                             ||¦  «        d¦  «         |                      | j                             ||¦  «        d¦  «         dS )uW   Kiá»ƒm thá»­ trÃªn 100% dá»¯ liá»‡u áº£nh chá»¥p tháº­t tá»« game client (Rule 5 SSoT).r   Nz2captures/20260916_224410_720_LIVE_CLICK_SLOT_E.pngz5captures/20260916_224834_630_LIVE_CLOSE_POPUP_ESC.pngu:   Bá»� qua test náº¿u khÃ´ng tÃ¬m tháº¥y file capture tháº­tu2   áº¢nh click slot E pháº£i nháº­n diá»‡n popup Má»žu1   áº¢nh báº¥m ESC pháº£i nháº­n diá»‡n popup Ä�Ã“NG)ÚosÚpathÚexistsÚskipTestr   Úopenr   r   r   r4   r5   rT   r@   rS   r\   )r   r_   Ú	open_pathÚclosed_pathÚimg_openÚ
img_closedrW   s          r&   Ú!test_real_captures_authentic_dataz7TestSkillPopupScanner.test_real_captures_authentic_data_   sá   € àˆ	ˆ	ˆ	ØHˆ	ØMˆØŒw�~Š~˜iÑ(Ô(ð 	X°´·²¸{Ñ0KÔ0Kð 	XØ�MŠMÐVÑWÔWÐWå”:˜iÑ(Ô(ˆÝ”Z Ñ,Ô,ˆ
Ý%¥mÔ&:¸H¼NÈHÌOÑ\Ô\ˆà�Š˜œ×2Ò2°8¸TÑBÔBÐDxÑyÔyÐyØ×Ò˜œ×3Ò3°JÀÑEÔEÐGzÑ{Ô{Ð{Ð{Ð{r(   c                óÞ  — d}| j                              |¦  «        \  }}|                      |dd¬¦  «         |                      |dd¬¦  «         | j                              |¦  «        \  }}|                      |dd¬¦  «         |                      |dd¬¦  «         | j                              |dd¬	¦  «        \  }}|                      |d
d¬¦  «         |                      |dd¬¦  «         dS )u7   Kiá»ƒm tra tá»�a Ä‘á»™ cÃ¡c nÃºt con bÃªn trong pop-up.)iË  i!  i½  r   i´  r.   r   i.  iD  ib  r   )ÚrowÚcoliè  i  N)r@   Úget_close_button_posr   Úget_unbind_action_posÚget_gem_skill_pos)r   rW   ÚcxÚcyÚuxÚuyÚgxÚgys           r&   Útest_get_positionsz(TestSkillPopupScanner.test_get_positionsn   s  € à#ˆØ”×2Ò2°4Ñ8Ô8‰ˆˆBØ×Ò˜r 3¨aÐÑ0Ô0Ð0Ø×Ò˜r 3¨aÐÑ0Ô0Ð0à”×3Ò3°DÑ9Ô9‰ˆˆBØ×Ò˜r 3¨aÐÑ0Ô0Ð0Ø×Ò˜r 3¨aÐÑ0Ô0Ð0à”×/Ò/°¸!ÀÐ/ÑCÔC‰ˆˆBØ×Ò˜r 3¨aÐÑ0Ô0Ð0Ø×Ò˜r 3¨aÐÑ0Ô0Ð0Ð0Ð0r(   Nr7   )	r8   r9   r:   r;   rA   rY   r]   rh   ru   r<   r(   r&   r>   r>   F   s‚   € € € € € Ø7Ð7ð+ð +ð +ð +ð
!ð 
!ð 
!ð 
!ð"ð "ð "ð "ð|ð |ð |ð |ð1ð 1ð 1ð 1ð 1ð 1r(   r>   c                  ó  — e Zd ZdZ ed¦  «         ed¦  «         ej        edd¬¦  «        dd„¦   «         ¦   «         ¦   «         Z ed¦  «         ed¦  «         ej        edd¬¦  «        dd„¦   «         ¦   «         ¦   «         ZdS )ÚTestSkillBinderu2   Kiá»ƒm thá»­ FSM Ä‘iá»�u phá»‘i cá»§a SkillBinder.z7src.assistant_tool.skills.skill_binder.post_message_keyz9src.assistant_tool.skills.skill_binder.post_message_clickÚget_client_size)r   r   )Úreturn_valueÚmock_client_sizer   Ú
mock_clickÚmock_keyr   r   c                óô   — t          d¬¦  «        }|                     t          j        ddd¬¦  «        }|                      |¦  «         |                      |j        d¦  «         |                     ¦   «          d S )Né90  ©Úhwndr   é   ç        )rj   rk   Údelay_betweenr   )r   Úbind_gem_skillr   r   rT   ÚassertEqualÚ
call_countÚassert_called_once©r   rz   r{   r|   ÚbinderÚress         r&   Útest_bind_gem_skillz#TestSkillBinder.test_bind_gem_skill�   sy   € õ  %Ð(Ñ(Ô(ˆØ×#Ò#¥MÔ$8¸aÀQÐVYÐ#ÑZÔZˆØ�Š˜ÑÔÐð 	×Ò˜Ô.°Ñ2Ô2Ð2à×#Ò#Ñ%Ô%Ð%Ð%Ð%r(   c                óð   — t          d¬¦  «        }|                     t          j        d¬¦  «        }|                      |¦  «         |                      |j        d¦  «         |                     ¦   «          d S )Nr~   r   r‚   )rƒ   r   )r   Úunbind_slotr   r   rT   r…   r†   r‡   rˆ   s         r&   Útest_unbind_slotz TestSkillBinder.test_unbind_slot�   sr   € õ  %Ð(Ñ(Ô(ˆØ× Ò ¥Ô!5ÀSÐ ÑIÔIˆØ�Š˜ÑÔÐØ×Ò˜Ô.°Ñ2Ô2Ð2Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%r(   N)rz   r   r{   r   r|   r   r   r   )	r8   r9   r:   r;   r   Úobjectr   r‹   rŽ   r<   r(   r&   rw   rw   ~   sà   € € € € € Ø<Ð<à
€UÐDÑEÔEØ
€UÐFÑGÔGØ€U„\�+Ð0¸{ÐKÑKÔKð
&ð 
&ð 
&ñ LÔKñ HÔGñ FÔEð
&ð €UÐDÑEÔEØ
€UÐFÑGÔGØ€U„\�+Ð0¸{ÐKÑKÔKð&ð &ð &ñ LÔKñ HÔGñ FÔEð&ð &ð &r(   rw   Ú__main__)r;   Ú
__future__r   ÚunittestÚunittest.mockr   r   ÚPILr   Ú)src.assistant_tool.skills.skill_constantsr   r   r	   r
   r   r   Ú-src.assistant_tool.skills.skill_popup_scannerr   Ú&src.assistant_tool.skills.skill_binderr   ÚTestCaser   r>   rw   r8   Úmainr<   r(   r&   ú<module>rš      s|  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð LÐ KÐ KÐ KÐ KÐ KØ >Ð >Ð >Ð >Ð >Ð >ð)%ð )%ð )%ð )%ð )%˜Ô)ñ )%ô )%ð )%ðX51ð 51ð 51ð 51ð 51˜HÔ-ñ 51ô 51ð 51ðp&ð &ð &ð &ð &�hÔ'ñ &ô &ð &ð> ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr(   