§
    ¼�žj  ã            
       óp  — d 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
e	j                             dej                             ej                             ej                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZ  G d„ de
j        ¦  «        Zedk    r e
j        ¦   «          dS dS )u  
Unit Tests cho Town & World Map Quest Engine (PhÃ­m U)
Kiá»ƒm thá»­:
1. Cáº¥u trÃºc QuestObjective má»Ÿ rá»™ng zone_index
2. PhÃ¢n loáº¡i khu vá»±c LÃ ng (Town Hub)
3. Tra cá»©u nhiá»‡m vá»¥ theo Act
4. Ä�Ã³ng gÃ³i & giáº£i mÃ£ gÃ³i tin IPC TRIGGER_WORLD_MAP_TRAVEL (OpCode 96)
é    Nz..)ÚCAMPAIGN_KNOWLEDGE_GRAPHÚAutoQuesterc                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestTownQuestEnginec                 ó,   — t          ¦   «         | _        d S )N)r   Úquester)Úselfs    ú4C:\Projects\AutoPOE2\tests\test_town_quest_engine.pyÚsetUpzTestTownQuestEngine.setUp   s   € Ý"‘}”}ˆŒˆˆó    c                 óÆ   — t           D ]X}|                      |j        t          ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         ŒYdS )uN   Kiá»ƒm tra thuá»™c tÃ­nh zone_index trong Ä‘á»“ thá»‹ tri thá»©c nhiá»‡m vá»¥.r   é
   N)r   ÚassertIsInstanceÚ
zone_indexÚintÚassertGreaterEqualÚassertLessEqual)r	   Ústeps     r
   Útest_quest_objective_zone_indexz3TestTownQuestEngine.test_quest_objective_zone_index   sf   € å,ð 	6ð 	6ˆDØ×!Ò! $¤/µ3Ñ7Ô7Ð7Ø×#Ò# D¤O°QÑ7Ô7Ð7Ø× Ò  ¤°"Ñ5Ô5Ð5Ð5ð	6ð 	6r   c                 ó,  — |                       | j                             dd¦  «        ¦  «         |                       | j                             dd¦  «        ¦  «         |                       | j                             dd¦  «        ¦  «         |                       | j                             dd¦  «        ¦  «         |                       | j                             d	d
¦  «        ¦  «         |                       | j                             dd¦  «        ¦  «         |                       | j                             dd¦  «        ¦  «         |                       | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         |                      | j                             dd¦  «        ¦  «         dD ]0}|                      | j                             d|¦  «        ¦  «         Œ1dS )uD   Kiá»ƒm tra nháº­n diá»‡n chÃ­nh xÃ¡c cÃ¡c khu vá»±c LÃ ng / Hideout.ÚG1_townúClearfell EncampmentÚG2_townzArdura CaravanÚHideout_DesertzDesert HideoutÚ z	The HavenÚG3_townz-The Sandswept Marsh / Phrey Jungle EncampmentÚg3_townÚg3zAct 3 EncampmentÚG1_1úThe RiverbankÚG1_2zThe Ogham FarmlandsÚG2_12ÚDreadnoughtÚG3_1úSandswept MarshúThe Sandswept MarshÚG3_2úPhrey JungleÚG3_5zThe Ziggurat / Aggorat©úAct 1zAct 2zAct 3zAct 4ÚAtlasz(null)z	(unknown)N)Ú
assertTruer   Úis_town_areaÚassertFalse)r	   Úscenes     r
   Útest_is_town_area_detectionz/TestTownQuestEngine.test_is_town_area_detection    sª  € ð 	�Š˜œ×1Ò1°)Ð=SÑTÔTÑUÔUÐUØ�Š˜œ×1Ò1°)Ð=MÑNÔNÑOÔOÐOØ�Š˜œ×1Ò1Ð2BÐDTÑUÔUÑVÔVÐVØ�Š˜œ×1Ò1°"°kÑBÔBÑCÔCÐCà�Š˜œ×1Ò1°)Ð=lÑmÔmÑnÔnÐnØ�Š˜œ×1Ò1°)¸RÑ@Ô@ÑAÔAÐAØ�Š˜œ×1Ò1°$¸Ñ;Ô;Ñ<Ô<Ð<Ø�Š˜œ×1Ò1°"Ð6HÑIÔIÑJÔJÐJð 	×Ò˜œ×2Ò2°6¸?ÑKÔKÑLÔLÐLØ×Ò˜œ×2Ò2°6Ð;PÑQÔQÑRÔRÐRØ×Ò˜œ×2Ò2°7¸MÑJÔJÑKÔKÐKØ×Ò˜œ×2Ò2°6Ð;LÑMÔMÑNÔNÐNØ×Ò˜œ×2Ò2°2Ð7HÑIÔIÑJÔJÐJØ×Ò˜œ×2Ò2°2Ð7LÑMÔMÑNÔNÐNØ×Ò˜œ×2Ò2°6¸>ÑJÔJÑKÔKÐKØ×Ò˜œ×2Ò2°6Ð;SÑTÔTÑUÔUÐUð Zð 	Cð 	CˆEØ×Ò˜Tœ\×6Ò6°r¸5ÑAÔAÑBÔBÐBÐBð	Cð 	Cr   c                 ó‚  — dD ]3}|                       | j                             |¦  «        |› d�¦  «         Œ4dD ]3}|                      | j                             |¦  «        |› d�¦  «         Œ4| j                             ddd¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         d	S )
uS   Kiá»ƒm tra: Act 1..4, Atlas, null, unknown khÃ´ng bá»‹ coi lÃ  tÃªn map há»£p lá»‡.r*   u'    khÃ´ng Ä‘Æ°á»£c coi lÃ  map há»£p lá»‡)r    r   r%   r(   u    pháº£i lÃ  map há»£p lá»‡r   r+   é   z	Zone Lv 1N)r/   r   Úis_valid_map_namer-   Úresolve_active_objectiveÚassertNotEqualÚ	area_nameÚassertEqual)r	   ÚinvalidÚvalidÚobjs       r
   Útest_invalid_map_namesz*TestTownQuestEngine.test_invalid_map_names;   sÚ   € à[ð 	{ð 	{ˆGØ×Ò˜Tœ\×;Ò;¸GÑDÔDÈÐFyÐFyÐFyÑzÔzÐzÐzð bð 	ið 	iˆEØ�OŠO˜DœL×:Ò:¸5ÑAÔAÀeÐCgÐCgÐCgÑhÔhÐhÐhð Œl×3Ò3°B¸ÀÑCÔCˆØ×Ò˜CœM¨7Ñ3Ô3Ð3Ø×Ò˜œ¨Ñ4Ô4Ð4Ð4Ð4r   c                 óN  — | j                              d¦  «        }|                      t          |¦  «        d¦  «         |D ]}|                      |j        d¦  «         Œ| j                              d¦  «        }|                      t          |¦  «        d¦  «         |D ]}|                      |j        d¦  «         Œt          d„ |D ¦   «         ¦  «        }|                      |d¦  «         | j                              d¦  «        }|                      t          |¦  «        d¦  «         |D ]}|                      |j        d¦  «         Œt          d„ |D ¦   «         ¦  «        }|                      |d¦  «         t          d	„ |D ¦   «         ¦  «        }|                      |d
¦  «         dS )u:   Kiá»ƒm tra lá»�c danh sÃ¡ch nhiá»‡m vá»¥ theo Act 1, 2, 3.r3   r   é   c              3   ó(   K  — | ]}d |j         v V — ŒdS )r#   N©r7   ©Ú.0Úss     r
   ú	<genexpr>zBTestTownQuestEngine.test_get_objectives_for_act.<locals>.<genexpr>V   s)   è è € ÐQÐQÀ °´Ð <ÐQÐQÐQÐQÐQÐQr   u/   Pháº£i cÃ³ nhiá»‡m vá»¥ Dreadnought trong Act 2é   c              3   ó(   K  — | ]}d |j         v V — ŒdS )r%   Nr@   rA   s     r
   rD   zBTestTownQuestEngine.test_get_objectives_for_act.<locals>.<genexpr>_   s*   è è € ÐSÐSÀ1Ð/°1´;Ð>ÐSÐSÐSÐSÐSÐSr   u3   Pháº£i cÃ³ nhiá»‡m vá»¥ Sandswept Marsh trong Act 3c              3   ó(   K  — | ]}d |j         v V — ŒdS )r(   Nr@   rA   s     r
   rD   zBTestTownQuestEngine.test_get_objectives_for_act.<locals>.<genexpr>a   s)   è è € ÐLÐL¸A˜.¨A¬KÐ7ÐLÐLÐLÐLÐLÐLr   u0   Pháº£i cÃ³ nhiá»‡m vá»¥ Phrey Jungle trong Act 3N)r   Úget_objectives_for_actÚassertGreaterÚlenr8   ÚactÚanyr-   )r	   Ú
act1_stepsrC   Ú
act2_stepsÚdreadnought_foundÚ
act3_stepsÚsandswept_foundÚphrey_founds           r
   Útest_get_objectives_for_actz/TestTownQuestEngine.test_get_objectives_for_actI   s²  € à”\×8Ò8¸Ñ;Ô;ˆ
Ø×Ò�3˜z™?œ?¨AÑ.Ô.Ð.Øð 	'ð 	'ˆAØ×Ò˜QœU AÑ&Ô&Ð&Ð&à”\×8Ò8¸Ñ;Ô;ˆ
Ø×Ò�3˜z™?œ?¨AÑ.Ô.Ð.Øð 	'ð 	'ˆAØ×Ò˜QœU AÑ&Ô&Ð&Ð&õ  ÐQÐQÀjÐQÑQÔQÑQÔQÐØ�ŠÐ)Ð+\Ñ]Ô]Ð]ð ”\×8Ò8¸Ñ;Ô;ˆ
Ø×Ò�3˜z™?œ?¨AÑ.Ô.Ð.Øð 	'ð 	'ˆAØ×Ò˜QœU AÑ&Ô&Ð&Ð&åÐSÐSÈ
ÐSÑSÔSÑSÔSˆØ�Š˜Ð)^Ñ_Ô_Ð_ÝÐLÐLÀÐLÑLÔLÑLÔLˆØ�Š˜Ð%WÑXÔXÐXÐXÐXr   c                 óÚ  — | j                              ddd¦  «        }|                      |j        d¦  «         |                      |j        dd¦  «         |                      |j        d¦  «         |                      d|j        ¦  «         | j                              dd	d¦  «        }|                      |j        d¦  «         |                      d	|j        ¦  «         |                      |j        d¦  «         | j                              d
dd¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         | j                              ddd¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         | j                              ddd¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         | j                              ddd¦  «        }|                      d|¦  «         |  	                    d|¦  «         dS )uf   Kiá»ƒm tra: NhÃ¢n váº­t Level 30 Ä‘ang á»Ÿ Act 3 KHÃ”NG BAO GIá»œ bá»‹ phÃ¡n Ä‘oÃ¡n nháº§m vá»� Act 1.r$   r%   é   rE   r3   u-   Level 30 táº¡i G3_1 khÃ´ng Ä‘Æ°á»£c lÃ  Act 1ÚWAYPOINTr'   r(   r   zPhrey Jungle EncampmentÚNPCr   r&   zPhrey Jungle (Act 3)z[Act 3]z[Act 1]N)
r   r5   r8   rK   r6   Úaction_typeÚassertInr7   Úget_status_bannerÚassertNotIn)r	   Úobj1Úobj2Úobj3Úobj4Úobj5Úbanners          r
   Ú3test_resolve_active_objective_act3_level30_not_act1zGTestTownQuestEngine.test_resolve_active_objective_act3_level30_not_act1d   sH  € ð Œ|×4Ò4°VÐ=NÐPRÑSÔSˆØ×Ò˜œ 1Ñ%Ô%Ð%Ø×Ò˜DœH aÐ)XÑYÔYÐYØ×Ò˜Ô)¨:Ñ6Ô6Ð6Ø�ŠÐ'¨¬Ñ8Ô8Ð8ð Œ|×4Ò4°V¸^ÈRÑPÔPˆØ×Ò˜œ 1Ñ%Ô%Ð%Ø�Š�n d¤nÑ5Ô5Ð5Ø×Ò˜DœH aÑ(Ô(Ð(ð Œ|×4Ò4°YÐ@YÐ[]Ñ^Ô^ˆØ×Ò˜œ 1Ñ%Ô%Ð%Ø×Ò˜Ô)¨5Ñ1Ô1Ð1Ø×Ò˜DœH aÑ(Ô(Ð(ð Œ|×4Ò4°RÐ9NÐPRÑSÔSˆØ×Ò˜œ 1Ñ%Ô%Ð%Ø×Ò˜DœH aÑ(Ô(Ð(Ø×Ò˜Ô)¨:Ñ6Ô6Ð6ð Œ|×4Ò4°RÐ9OÐQSÑTÔTˆØ×Ò˜œ 1Ñ%Ô%Ð%Ø×Ò˜DœH aÑ(Ô(Ð(ð ”×/Ò/°Ð8IÈ2ÑNÔNˆØ�Š�i Ñ(Ô(Ð(Ø×Ò˜ FÑ+Ô+Ð+Ð+Ð+r   c                 ó<  — d}d}d}d}t          |¦  «        }t          |¦  «        }d}d}d}	d}
t          j        d	|||||||	|
¦	  «	        }|                     d
d¦  «        }|                      t          |¦  «        d
¦  «         t          j        d	|dd…         ¦  «        \  }}}}}}}}|                      |d¦  «         |                      |d¦  «         |                      t          |¦  «        d¦  «         |                      t          |¦  «        d¦  «         dS )ua   Kiá»ƒm tra Ä‘á»‹nh dáº¡ng nhá»‹ phÃ¢n 64 bytes cá»§a lá»‡nh TRIGGER_WORLD_MAP_TRAVEL (OpCode 96).r>   rE   iä  é`   g        r   r3   iˆ  z	<QIfffIIIé@   ó    Né$   )ÚfloatÚstructÚpackÚljustr8   rJ   Úunpackr   )r	   rK   r   Úcmd_idÚopcodeÚtarget_xÚtarget_yÚtarget_zÚtarget_entity_idÚpriorityÚ
timeout_msÚrawÚ
raw_paddedÚunpacked_idÚunpacked_opÚu_actÚu_zoneÚu_zÚu_entÚu_prioÚ	u_timeouts                        r
   Ú,test_town_world_map_ipc_packet_serializationz@TestTownQuestEngine.test_town_world_map_ipc_packet_serialization‰   s5  € àˆØˆ
ØˆØˆÝ˜‘:”:ˆÝ˜Ñ$Ô$ˆØˆØÐØˆØˆ
õ Œk˜+ v¨v°xÀÈ8ÐUeÐgoÐq{Ñ|Ô|ˆØ—Y’Y˜r 7Ñ+Ô+ˆ
Ø×Ò�˜Z™œ¨"Ñ-Ô-Ð-õ RXÔQ^Ð_jÐlvÐwzÐxzÐwzÔl{ÑQ|ÔQ|ÑNˆ�[ %¨°°e¸VÀYØ×Ò˜ cÑ*Ô*Ð*Ø×Ò˜ bÑ)Ô)Ð)Ø×Ò�˜U™œ QÑ'Ô'Ð'Ø×Ò�˜V™œ aÑ(Ô(Ð(Ð(Ð(r   N)
Ú__name__Ú
__module__Ú__qualname__r   r   r1   r<   rS   rb   r   © r   r
   r   r      s„   € € € € € ð%ð %ð %ð6ð 6ð 6ðCð Cð Cð65ð 5ð 5ðYð Yð Yð6#,ð #,ð #,ðJ)ð )ð )ð )ð )r   r   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚosri   ÚsysÚunittestÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úsrc.assistant_tool.auto_questerr   r   ÚTestCaser   r€   Úmainrƒ   r   r
   ú<module>r˜      s  ððð ð € € € € € € € € € € € € €	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€ð „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ4Ñ#PÔ#PÑQÔQÑ RÔ RÐ Rà QÐ QÐ QÐ QÐ QÐ QÐ QÐ QðK)ð K)ð K)ð K)ð K)˜(Ô+ñ K)ô K)ð K)ð\ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   