§
    Àp¬j  ã                  óØ   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZmZ ddlmZmZmZ  G d„ dej        ¦  «        Zed	k    r ej        ¦   «          dS dS )
u  AutoPOE2 - Unit Tests Kiá»ƒm Chá»©ng Zero-Day UI Verifier Pipeline.
====================================================================
Kiá»ƒm thá»­ toÃ n diá»‡n:
1. Tháº©m Ä‘á»‹nh cáº¥u trÃºc UI trÃªn artifact capture tháº­t tá»« captures/ (20260914_003608_364_CLICKED_PIN_1280_560.png).
2. Kiá»ƒm chá»©ng báº¥t biáº¿n an toÃ n nÃºt TRAVERSE (luÃ´n náº±m á»Ÿ x <= 0.55 * w, khÃ´ng láº¥n tÃºi Ä‘á»“).
3. Kiá»ƒm chá»©ng Ä‘á»‹nh vá»‹ Player Avatar vÃ  lÆ°á»›i Inventory 60 Ã´.
4. Kiá»ƒm chá»©ng tÆ°Æ¡ng thÃ­ch trÃªn nhiá»�u Ä‘á»™ phÃ¢n giáº£i (1440p, 1080p, Windowed 1189x891).
5. Xuáº¥t vÃ  kiá»ƒm tra tÃ­nh toÃ n váº¹n cá»§a tá»‡p JSON cháº©n Ä‘oÃ¡n.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 5: 100% artifact tháº­t tá»« captures/.
- Rule 14: Quality Gate, 100% tests PASS.
é    )ÚannotationsN)ÚImage)ÚComponentStatusÚZeroDayReportÚZeroDayUiVerifier)Ú	RES_1080PÚ	RES_1440PÚRES_WINDOWED_DEFAULTc                  ó:   — e Zd ZdZd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )ÚTestZeroDayUiVerifieru*   Test suite kiá»ƒm thá»­ ZeroDayUiVerifier.ÚreturnÚNonec                óÊ   — t           j                             t           j                             t          ¦  «        dd¦  «        | _        t          t          ¬¦  «        | _        d S )Nz..Úcaptures©Útarget_resolution)	ÚosÚpathÚjoinÚdirnameÚ__file__Úcaptures_dirr   r	   Úverifier)Úselfs    ú7C:\Projects\AutoPOE2\tests\test_zero_day_ui_verifier.pyÚsetUpzTestZeroDayUiVerifier.setUp&   s@   € ÝœGŸLšL­¬¯ª½Ñ)BÔ)BÀDÈ*ÑUÔUˆÔÝ)½IÐFÑFÔFˆŒˆˆó    c                ó˜  — t           j                             | j        d¦  «        }t           j                             |¦  «        s|                      d¦  «         | j                             |¦  «        }|                      |t          ¦  «         |  
                    |j        d¦  «         |                      |j        d|j        › �¦  «         |  
                    t          |j        ¦  «        d¦  «         |                      d|j        ¦  «         |                      |j        d         j        ¦  «         |                      |j        d         j        ¦  «         |                      d|j        ¦  «         |j        d         }|                      |j        ¦  «         |                      |j        d         t-          d¦  «        ¦  «         |                      d	|j        ¦  «         |                      |j        d	         j        ¦  «         |                      d
|j        ¦  «         |                      |j        d
         j        ¦  «         dS )ua   Kiá»ƒm chá»©ng tháº©m Ä‘á»‹nh frame capture tháº­t: 20260914_003608_364_CLICKED_PIN_1280_560.png.z,20260914_003608_364_CLICKED_PIN_1280_560.pnguG   KhÃ´ng tÃ¬m tháº¥y capture 20260914_003608_364_CLICKED_PIN_1280_560.png©i 
  i   u   Báº£n vÃ¡ chÆ°a sáºµn sÃ ng: r   Úplayer_avatarÚtraverse_buttong      –@Úinventory_gridÚwaystone_trayN)r   r   r   r   ÚexistsÚskipTestr   Úverify_ui_frameÚassertIsInstancer   ÚassertEqualÚ
resolutionÚ
assertTrueÚis_patch_readyÚerrorsÚlenÚassertInÚ
componentsÚis_validÚassertIsNotNoneÚcoordinatesÚassertLessEqualÚint)r   Úcapture_pathÚreportÚtravs       r   Ú$test_verify_real_capture_atlas_readyz:TestZeroDayUiVerifier.test_verify_real_capture_atlas_ready*   sö  € å”w—|’| DÔ$5Ð7eÑfÔfˆÝŒw�~Š~˜lÑ+Ô+ð 	eØ�MŠMÐcÑdÔdÐdà $¤× =Ò =¸lÑ KÔ Kˆà×Ò˜f¥mÑ4Ô4Ð4Ø×Ò˜Ô*¨LÑ9Ô9Ð9Ø�Š˜Ô-Ð/^ÈvÌ}Ð/^Ð/^Ñ_Ô_Ð_Ø×Ò�˜Vœ]Ñ+Ô+¨QÑ/Ô/Ð/ð 	�Š�o vÔ'8Ñ9Ô9Ð9Ø�Š˜Ô)¨/Ô:ÔCÑDÔDÐDØ×Ò˜VÔ.¨Ô?ÔKÑLÔLÐLð 	�ŠÐ'¨Ô):Ñ;Ô;Ð;ØÔ Ð!2Ô3ˆØ�Š˜œÑ&Ô&Ð&Ø×Ò˜TÔ-¨aÔ0µ#°kÑ2BÔ2BÑCÔCÐCð 	�ŠÐ&¨Ô(9Ñ:Ô:Ð:Ø�Š˜Ô)Ð*:Ô;ÔDÑEÔEÐEð 	�Š�o vÔ'8Ñ9Ô9Ð9Ø�Š˜Ô)¨/Ô:ÔCÑDÔDÐDÐDÐDr   c                ó2  — t          j        ddd¬¦  «        }t          t          ¬¦  «        }|                     |¦  «        }|j        d         }|                      |j        ¦  «         |                      |j	        d         t          d¦  «        ¦  «         d	S )
uY   Kiá»ƒm chá»©ng nÃºt TRAVERSE khÃ´ng bao giá»� láº¥n sang vÃ¹ng tÃºi Ä‘á»“ (x > 0.55 * w).ÚRGB©i€  i8  )é
   r<   r<   ©Úcolorr   r!   r   g     €�@N)r   Únewr   r   r&   r/   r*   r0   r3   r2   r4   )r   Ú	dummy_imgÚverifier_1080pr6   r7   s        r   Ú2test_traverse_button_anti_enter_boundary_guaranteezHTestZeroDayUiVerifier.test_traverse_button_anti_enter_boundary_guaranteeJ   s‰   € å”I˜e \¸ÐFÑFÔFˆ	Ý*½YÐGÑGÔGˆØ×/Ò/°	Ñ:Ô:ˆàÔ Ð!2Ô3ˆØ�Š˜œÑ&Ô&Ð&Ø×Ò˜TÔ-¨aÔ0µ#°kÑ2BÔ2BÑCÔCÐCÐCÐCr   c                ó  — g d¢}|D ]|\  }}t          j        d||fd¬¦  «        }t          ||f¬¦  «        }|                     |¦  «        }|                      |j        ||f¦  «         |                      |j        ¦  «         Œ}dS )u`   Kiá»ƒm chá»©ng verifier cháº¡y mÆ°á»£t mÃ  trÃªn cÃ¡c Ä‘á»™ phÃ¢n giáº£i 1440p, 1080p, Windowed.)r   r;   )i¥  i{  r:   )é   rD   rD   r=   r   N)r   r?   r   r&   r(   r)   r*   r+   )r   ÚresolutionsÚwÚhÚframeÚvÚreps          r   Ú!test_multi_resolution_scalabilityz7TestZeroDayUiVerifier.test_multi_resolution_scalabilityT   s§   € ð
ð 
ð 
ˆð  ð 	0ð 	0‰DˆAˆqÝ”I˜e a¨ V°<Ð@Ñ@Ô@ˆEÝ!°Q¸°FÐ;Ñ;Ô;ˆAØ×#Ò# EÑ*Ô*ˆCØ×Ò˜Sœ^¨a°¨VÑ4Ô4Ð4Ø�OŠO˜CÔ.Ñ/Ô/Ð/Ð/ð	0ð 	0r   c                ó€  — t          j        ddd¬¦  «        }| j                             |¦  «        }t	          j        dd¬¦  «        5 }|j        }ddd¦  «         n# 1 swxY w Y   	 | j                             ||¦  «         |                      t          j
                             |¦  «        ¦  «         t          |d	d
¬¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      |d         ¦  «         t          j
                             |¦  «        rt          j        |¦  «         dS dS # t          j
                             |¦  «        rt          j        |¦  «         w w xY w)uK   Kiá»ƒm chá»©ng xuáº¥t bÃ¡o cÃ¡o JSON cháº©n Ä‘oÃ¡n Ä‘áº§y Ä‘á»§ thÃ´ng tin.r:   r;   )é   rM   rM   r=   z.jsonF)ÚsuffixÚdeleteNÚrzutf-8)ÚencodingÚ	timestampr/   r+   )r   r?   r   r&   ÚtempfileÚNamedTemporaryFileÚnameÚsave_diagnostic_reportr*   r   r   r$   ÚopenÚjsonÚloadr.   Úremove)r   rH   rJ   ÚtfÚ	temp_pathÚfÚdatas          r   Ú$test_save_and_load_diagnostic_reportz:TestZeroDayUiVerifier.test_save_and_load_diagnostic_reportc   s  € å”	˜% °YÐ?Ñ?Ô?ˆØŒm×+Ò+¨EÑ2Ô2ˆåÔ(°ÀÐFÑFÔFð 	 È"ØœˆIð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð	%ØŒM×0Ò0°°iÑ@Ô@Ð@Ø�OŠO�BœGŸNšN¨9Ñ5Ô5Ñ6Ô6Ð6å�i ¨wÐ7Ñ7Ô7ð $¸1Ý”y ‘|”|�ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð �MŠM˜+ tÑ,Ô,Ð,Ø�MŠM˜,¨Ñ-Ô-Ð-Ø�MŠMÐ*¨DÑ1Ô1Ð1Ø�OŠO˜DÐ!1Ô2Ñ3Ô3Ð3åŒw�~Š~˜iÑ(Ô(ð %Ý”	˜)Ñ$Ô$Ð$Ð$Ð$ð%ð %ø�rŒw�~Š~˜iÑ(Ô(ð %Ý”	˜)Ñ$Ô$Ð$Ð$ð%øøøsD   ÁAÁA Á#A Á(AF ÃC(ÃF Ã(C,Ã,F Ã/C,Ã0A F Æ6F=N)r   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r8   rB   rK   r_   © r   r   r   r   #   s‹   € € € € € Ø4Ð4ðGð Gð Gð GðEð Eð Eð Eð@Dð Dð Dð Dð0ð 0ð 0ð 0ð%ð %ð %ð %ð %ð %r   r   Ú__main__)rc   Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arrX   r   rS   ÚunittestÚPILr   Ú+src.assistant_tool.vision_zero_day_verifierr   r   r   Úsrc.common.coordinate_transformr   r	   r
   ÚTestCaser   r`   Úmainrd   r   r   ú<module>rs      s3  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ðU%ð U%ð U%ð U%ð U%˜HÔ-ñ U%ô U%ð U%ðp ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   