§
    þÂ½jÞ  ã                   ó.  — d Z ddlZddlZddlmZ  ee¦  «                             ¦   «         j        j        j        Zedz  dz  Z	e	dz  dz  dz  Z
e	d	z  Ze	dz  dz  d
z  Ze	dz  dz  dz  Z G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )uå  
Comprehensive Unit Test Suite for FreeExile Milestone 4 Telegraph Decal Renderer:
- Module existence and strict line caps (< 250 lines, <= 350 soft cap)
- Data structures and 4 telegraph shapes (cone, circle, ring, line)
- PoE2 windup delay ranges (0.6sâ€“1.2s)
- Poise break / stagger immediate attack cancellation (staggerTimer > 0)
- Canvas 2D isometric ground rendering & translucent warning decals
- Integration verification for index.html, entity_renderer.js, monster_system.js
é    N)ÚPathÚclientÚwebappÚjsÚengineztelegraph_renderer.jsz
index.htmlzentity_renderer.jszmonster_system.jsc                   ó`   — e Zd Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ ZdS )ÚTestTelegraphRendererc                 óš   — t           | _        | j                             d¬¦  «        | _        | j                             ¦   «         | _        d S )Núutf-8©Úencoding)ÚTELEGRAPH_JSÚtarget_pathÚ	read_textÚcodeÚ
splitlinesÚlines)Úclss    ú;C:\Projects\FreeExile\tests\unit\test_telegraph_renderer.pyÚ
setUpClassz TestTelegraphRenderer.setUpClass   s<   € å&ˆŒØ”?×,Ò,°gÐ,Ñ>Ô>ˆŒØ”H×'Ò'Ñ)Ô)ˆŒ	ˆ	ˆ	ó    c                 ór   — |                       | j                             ¦   «         d| j        › d�¦  «         dS )z-Verifies telegraph_renderer.js target exists.zTarget z
 not foundN)Ú
assertTruer   Úexists©Úselfs    r   Útest_telegraph_module_existsz2TestTelegraphRenderer.test_telegraph_module_exists   s:   € à�Š˜Ô(×/Ò/Ñ1Ô1Ð3Y¸TÔ=MÐ3YÐ3YÐ3YÑZÔZÐZÐZÐZr   c                 ó–   — t          | j        ¦  «        }|                      |dd|› �¦  «         |                      |dd|› �¦  «         dS )zKVerifies telegraph_renderer.js is strictly < 250 lines and <= 350 soft cap.éú   z)telegraph_renderer.js exceeds 250 lines: i^  z(telegraph_renderer.js exceeds soft cap: N)Úlenr   Ú
assertLessÚassertLessEqual)r   Ú
line_counts     r   Útest_strict_line_capsz+TestTelegraphRenderer.test_strict_line_caps"   sW   € å˜œ‘_”_ˆ
Ø�Š˜
 CÐ)aÐU_Ð)aÐ)aÑbÔbÐbØ×Ò˜Z¨Ð.eÐYcÐ.eÐ.eÑfÔfÐfÐfÐfr   c                 óÄ   — g d¢}|D ]"}|                       || j        d|› d�¦  «         Œ#|                       d| j        ¦  «         |                       d| j        ¦  «         dS )z5Verifies core API methods exist on TelegraphRenderer.)	ÚaddTelegraphÚcancelTelegraphÚcancelTelegraphByIdÚclearAllTelegraphsÚgetActiveTelegraphsÚupdateTelegraphsÚrenderTelegraphsÚupdateAndRenderÚstartMonsterAttackzMissing method z in telegraph_renderer.jsz,window.TelegraphRenderer = TelegraphRendererzexport { TelegraphRendererN©ÚassertInr   )r   Úrequired_methodsÚms      r   Útest_api_surface_and_exportsz2TestTelegraphRenderer.test_api_surface_and_exports(   s‚   € ð
ð 
ð 
Ðð
 "ð 	Xð 	XˆAØ�MŠM˜!˜TœYÐ(V¸!Ð(VÐ(VÐ(VÑWÔWÐWÐWØ�ŠÐDÀdÄiÑPÔPÐPØ�ŠÐ2°D´IÑ>Ô>Ð>Ð>Ð>r   c                 óX   — dD ]&}|                       d|› d�| j        d|› d�¦  «         Œ'dS )zEVerifies cone, circle, ring, and line telegraph shapes are supported.)ÚconeÚcircleÚringÚlineú'zTelegraph shape 'z' not supportedNr/   )r   Úshapes     r   Útest_all_four_shapes_supportedz4TestTelegraphRenderer.test_all_four_shapes_supported4   sN   € à7ð 	_ð 	_ˆEØ�MŠM˜,˜e˜,˜,˜,¨¬	Ð3]ÀuÐ3]Ð3]Ð3]Ñ^Ô^Ð^Ð^ð	_ð 	_r   c                 óÞ   — |                       d| j        ¦  «         |                       d| j        ¦  «         |                       d| j        ¦  «         |                       d| j        ¦  «         dS )uM   Verifies 0.6sâ€“1.2s windup delay ranges matching PoE2 combat specifications.z	duration:z	progress:z1.0z0.8Nr/   r   s    r   Útest_poe2_windup_delaysz-TestTelegraphRenderer.test_poe2_windup_delays9   s`   € à�Š�k 4¤9Ñ-Ô-Ð-Ø�Š�k 4¤9Ñ-Ô-Ð-Ø�Š�e˜TœYÑ'Ô'Ð'Ø�Š�e˜TœYÑ'Ô'Ð'Ð'Ð'r   c                 ó¨   — |                       d| j        ¦  «         |                       d| j        ¦  «         |                       d| j        ¦  «         dS )zGVerifies staggerTimer > 0 immediately cancels active attack telegraphs.ÚstaggerTimerzstaggerTimer > 0zactiveTelegraphs.spliceNr/   r   s    r   Ú%test_poise_break_stagger_cancellationz;TestTelegraphRenderer.test_poise_break_stagger_cancellation@   sL   € à�Š�n d¤iÑ0Ô0Ð0Ø�ŠÐ(¨$¬)Ñ4Ô4Ð4Ø�ŠÐ/°´Ñ;Ô;Ð;Ð;Ð;r   c                 ó¨   — |                       d| j        ¦  «         |                       d| j        ¦  «         |                       d| j        ¦  «         dS )z^Verifies Canvas 2D isometric ground rendering with worldToIso and translucent crimson palette.Ú
worldToIsozrgba(239, 68, 68ÚpulseNr/   r   s    r   Ú"test_canvas_2d_isometric_renderingz8TestTelegraphRenderer.test_canvas_2d_isometric_renderingF   sK   € à�Š�l D¤IÑ.Ô.Ð.Ø�ŠÐ(¨$¬)Ñ4Ô4Ð4Ø�Š�g˜tœyÑ)Ô)Ð)Ð)Ð)r   c                 ó0  — t                                d¬¦  «                             ¦   «         }|                      t	          |¦  «        ddt	          |¦  «        › �¦  «         |                      t	          |¦  «        ddt	          |¦  «        › �¦  «         dS )z@Verifies index.html line cap (<= 200 soft cap, <= 400 hard cap).r   r   éÈ   zindex.html exceeds soft cap: i�  zindex.html exceeds hard cap: N)Ú
INDEX_HTMLr   r   r"   r    )r   Ú
html_liness     r   Ú%test_html_script_integration_and_capsz;TestTelegraphRenderer.test_html_script_integration_and_capsL   sŒ   € å×)Ò)°7Ð)Ñ;Ô;×FÒFÑHÔHˆ
Ø×Ò�S ™_œ_¨cÐ3dÕSVÐWaÑSbÔSbÐ3dÐ3dÑeÔeÐeØ×Ò�S ™_œ_¨cÐ3dÕSVÐWaÑSbÔSbÐ3dÐ3dÑeÔeÐeÐeÐer   c                 óÈ   — t                                d¬¦  «                             ¦   «         }|                      t	          |¦  «        ddt	          |¦  «        › �¦  «         dS )z7Verifies entity_renderer.js line cap (<= 500 hard cap).r   r   éô  z%entity_renderer.js exceeds hard cap: N)ÚENTITY_RENDERER_JSr   r   r"   r    ©r   r   s     r   Útest_entity_renderer_line_capz3TestTelegraphRenderer.test_entity_renderer_line_capR   s[   € å"×,Ò,°gÐ,Ñ>Ô>×IÒIÑKÔKˆØ×Ò�S ™ZœZ¨Ð.bÕVYÐZ_ÑV`ÔV`Ð.bÐ.bÑcÔcÐcÐcÐcr   c                 óÈ   — t                                d¬¦  «                             ¦   «         }|                      t	          |¦  «        ddt	          |¦  «        › �¦  «         dS )z6Verifies monster_system.js line cap (<= 500 hard cap).r   r   rK   z$monster_system.js exceeds hard cap: N)ÚMONSTER_SYSTEM_JSr   r   r"   r    rM   s     r   Útest_monster_system_line_capz2TestTelegraphRenderer.test_monster_system_line_capW   s[   € å!×+Ò+°WÐ+Ñ=Ô=×HÒHÑJÔJˆØ×Ò�S ™ZœZ¨Ð.aÕUXÐY^ÑU_ÔU_Ð.aÐ.aÑbÔbÐbÐbÐbr   N)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r$   r3   r;   r=   r@   rD   rI   rN   rQ   © r   r   r	   r	      s×   € € € € € Øð*ð *ñ „[ð*ð
[ð [ð [ðgð gð gð
?ð 
?ð 
?ð_ð _ð _ð
(ð (ð (ð<ð <ð <ð*ð *ð *ðfð fð fðdð dð dð
cð cð cð cð cr   r	   Ú__main__)Ú__doc__ÚunittestÚreÚpathlibr   Ú__file__ÚresolveÚparentÚPROJECT_ROOTÚ
WEBAPP_DIRr   rG   rL   rP   ÚTestCaser	   rR   ÚmainrV   r   r   ú<module>rc      s  ððð ð €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5Ô<€Ø˜HÑ$ xÑ/€
Ø˜DÑ  8Ñ+Ð.EÑE€Ø˜,Ñ&€
Ø $Ñ&¨Ñ1Ð4HÑHÐ Ø Ñ%¨Ñ0Ð3FÑFÐ ðCcð Ccð Ccð Ccð Cc˜HÔ-ñ Ccô Ccð CcðL ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   