§
    _ ’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
mZ ddlZddlmZ ddlmZ ddlmZ ddlmZ  e e¦   «         ¦  «        Zd	d
iZd„ Zd„ Zd„ Zd„ Z	 ddd„Zdd„Zdd„ZdS )z³Unit & Integration Tests for Vietnamese CAD Font Transcoder & AutoCAD DWG/DXF Processing.
Specialists: Quynh (QS & BoQ Takeoff), Hung (Site Engineering), Minh (System Standards).
é    )ÚannotationsN)ÚPath)Ú
TestClient)Ú
create_app)Úget_drawing_takeoff_service)Úget_cad_font_transcoderÚAuthorizationzBearer dev-test-tokenc                 óä  — t          ¦   «         } d}d}| j        } ||¦  «        }||k    }|�s&t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}d}d}	| j        } ||¦  «        }||	k    }|�s&t          j        d|fd||	f¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}d}
d}| j        } ||
¦  «        }||k    }|�s&t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}dS )zYTest converting legacy TCVN3 (ABC/.VnTime) encoded CAD strings to standard UTF-8 Unicode.u1   BÂª tÂ«ng mÃ£ng M300 Â®Â¸ 1x2, cÃ¨t thÃ�p CB300-Vu2   BÃª tÃ´ng mÃ³ng M300 Ä‘Ã¡ 1x2, cá»‘t thÃ©p CB300-V©ú==)z`%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.transcode_tcvn3_to_unicode
}(%(py3)s)
} == %(py7)sÚ
transcoderÚ	raw_tcvn1Ú	expected1©Úpy0Úpy2Úpy3Úpy5Úpy7úassert %(py9)sÚpy9Nu   CÃ¨ng BÃ•n Kem - KÃŒ Â§a Â§Ã©õ    Cá»‘ng Báº¿n Kem - KÃ¨ Ä�a Ä�á»™Ú	raw_tcvn2Ú	expected2õ#   BÂª tÂ«ng lÃ£t mÃ£ng M100 dÂµy 10cmõ#   BÃª tÃ´ng lÃ³t mÃ³ng M100 dÃ y 10cmÚ	raw_tcvn3Ú	expected3)
r   Útranscode_tcvn3_to_unicodeÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)r   r   r   Ú@py_assert1Ú@py_assert4Ú@py_assert6Ú@py_format8Ú@py_format10r   r   r   r   s               ú?C:\Projects\DSCons\tests\test_vietnamese_cad_font_transcoder.pyÚtest_transcode_tcvn3_to_unicoder.      s_  € å(Ñ*Ô*€Jð R€IØD€IØÔ0ÐHÐ0Ð0°Ñ;Ô;ÐHÐ;¸yÒHÐHÐHÑHÕHÔHÐHÐHÐHÐHÐ;¸yÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆ:ÑHÔHÐHÕHÔHˆ:ÑHÔHÐHÐHÕHÔHÐ0ÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH°ÑHÔHÐHÕHÔH°ÑHÔHÐHÐHÕHÔHÐ;ÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH¸yÑHÔHÐHÕHÔH¸yÑHÔHÐHÐHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHð <€IØ2€IØÔ0ÐHÐ0Ð0°Ñ;Ô;ÐHÐ;¸yÒHÐHÐHÑHÕHÔHÐHÐHÐHÐHÐ;¸yÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆ:ÑHÔHÐHÕHÔHˆ:ÑHÔHÐHÐHÕHÔHÐ0ÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH°ÑHÔHÐHÕHÔH°ÑHÔHÐHÐHÕHÔHÐ;ÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH¸yÑHÔHÐHÕHÔH¸yÑHÔHÐHÐHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHð @€IØ5€IØÔ0ÐHÐ0Ð0°Ñ;Ô;ÐHÐ;¸yÒHÐHÐHÑHÕHÔHÐHÐHÐHÐHÐ;¸yÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆ:ÑHÔHÐHÕHÔHˆ:ÑHÔHÐHÐHÕHÔHÐ0ÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH°ÑHÔHÐHÕHÔH°ÑHÔHÐHÐHÕHÔHÐ;ÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH¸yÑHÔHÐHÕHÔH¸yÑHÔHÐHÐHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHó    c                 óN  — t          ¦   «         } d}d}| j        } ||¦  «        }||k    }|�s&t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}d}d}	| j        } ||¦  «        }||	k    }|�s&t          j        d|fd||	f¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}dS )zQTest converting legacy VNI-Windows encoded CAD strings to standard UTF-8 Unicode.u/   BeÃ¢ toÃ¢ng moÃ¹ng M300 Ã±aÃ¹ 1x2, coÃ¡t theÃ¹pu*   BÃª tÃ´ng mÃ³ng M300 Ä‘Ã¡ 1x2, cá»‘t thÃ©pr   )z^%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.transcode_vni_to_unicode
}(%(py3)s)
} == %(py7)sr   Úraw_vni1r   r   r   r   Nu!   CoÃ¡ng BeÃ¡n Kem - KeÃ¸ Ã‘a Ã‘oÃ¤r   Úraw_vni2r   )
r   Útranscode_vni_to_unicoder    r!   r"   r#   r$   r%   r&   r'   )
r   r1   r   r(   r)   r*   r+   r,   r2   r   s
             r-   Útest_transcode_vni_to_unicoder4   +   sð  € å(Ñ*Ô*€Jð A€HØ<€IØÔ.ÐEÐ.Ð.¨xÑ8Ô8ÐEÐ8¸IÒEÐEÐEÑEÕEÔEÐEÐEÐEÐEÐ8¸IÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆ:ÑEÔEÐEÕEÔEˆ:ÑEÔEÐEÐEÕEÔEÐ.ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE¨xÑEÔEÐEÕEÔE¨xÑEÔEÐEÐEÕEÔEÐ8ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE¸IÑEÔEÐEÕEÔE¸IÑEÔEÐEÐEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEð 3€HØ2€IØÔ.ÐEÐ.Ð.¨xÑ8Ô8ÐEÐ8¸IÒEÐEÐEÑEÕEÔEÐEÐEÐEÐEÐ8¸IÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEˆ:ÑEÔEÐEÕEÔEˆ:ÑEÔEÐEÐEÕEÔEÐ.ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE¨xÑEÔEÐEÕEÔE¨xÑEÔEÐEÐEÕEÔEÐ8ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE¸IÑEÔEÐEÕEÔE¸IÑEÔEÐEÐEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEr/   c                 ó®  — t          ¦   «         } d}|                      |¦  «        }d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d
}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d}||v}|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d}||v}|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d	S )zLTest cleaning AutoCAD MText escape sequences, formatting codes, and symbols.zl\A1;{\f.VnTime|b0|i0;K\U+00E8 \U+0110a \U+0110\U+1ED9 - C\U+1ed1ng B\U+1ebfn Kem\P%%c18a200 d\U+00E0i 25.0m}u    KÃ¨ Ä�a Ä�á»™ - Cá»‘ng Báº¿n Kem©Úin©z%(py1)s in %(py3)sÚcleaned©Úpy1r   úassert %(py5)sr   Nõ   Ã˜18a200z25.0mz\A1;)únot in)z%(py1)s not in %(py3)sz	\f.VnTime)
r   Úclean_autocad_mtextr    r!   r%   r"   r#   r$   r&   r'   )r   Ú	raw_mtextr9   Ú@py_assert0Ú@py_assert2Ú@py_format4Ú@py_format6s          r-   Útest_clean_autocad_mtextrE   :   sû  € å(Ñ*Ô*€Jð @€IØ×,Ò,¨YÑ7Ô7€Gà-Ð8Ð-°Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð-°Ð8Ñ8Ô8Õ8Ô8Ð-Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8°Ñ8Ô8Ð8Õ8Ô8°Ñ8Ô8Ð8Ð8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8ØÐ ˆ:˜Ð Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ:˜Ð Ñ Ô Õ Ô ˆ:Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˜Ñ Ô Ð Õ Ô ˜Ñ Ô Ð Ð Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÐˆ7�gÐÐÐÐÕÔÐÐÐÐˆ7�gÐÑÔÕÔˆ7ÑÔÐÕÔÑÔÐÐÕÔ�gÑÔÐÕÔ�gÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐ!ˆ7˜'Ð!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ7˜'Ð!Ñ!Ô!Õ!Ô!ˆ7Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!˜'Ñ!Ô!Ð!Õ!Ô!˜'Ñ!Ô!Ð!Ð!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØÐ&ˆ<˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ<˜wÐ&Ñ&Ô&Õ&Ô&ˆ<Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r/   c                 óH  — t          ¦   «         } |                      d¦  «        }d}||k    }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}|                      d
¦  «        }d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}|                      d¦  «        }d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}}d	S )z.Test automatic font detection and transcoding.r   r   r   )z%(py0)s == %(py3)sÚres1)r   r   r<   r   Nu%   VaÃ¹n khuoÃ¢n theÃ¹p Ã±Ã²nh hã‚·ãƒ§nhu   VÃ¡n khuÃ´n thÃ©pr6   r8   Úres2r:   zG%%c20a150; Cao \U+0111\U+1ED9 \P%%p0.00m; G\U+00F3c nghi\U+00EAng 45%%du   Ã˜20a150Úres3u	   Cao Ä‘á»™u   Â±0.00mu   45Â°)
r   Úauto_transcode_cad_textr    r!   r"   r#   r$   r%   r&   r'   )	r   rG   rB   r(   rC   rD   rH   rA   rI   s	            r-   Útest_auto_transcode_cad_textrK   I   sò  € å(Ñ*Ô*€Jð ×-Ò-Ø7ñô €Dð 9Ð8ˆ4Ð8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ˆ4Ð8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆ4Ñ8Ô8Ð8Õ8Ô8ˆ4Ñ8Ô8Ð8Ð8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8ð ×-Ò-Ð.UÑVÔV€DØÐ&Ð $Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð $Ð&Ñ&Ô&Õ&Ô&ÐÑ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô& $Ñ&Ô&Ð&Õ&Ô& $Ñ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ð ×-Ò-ØRñô €Dð Ðˆ:˜ÐÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÕÔˆ:ÑÔÐÕÔÑÔÐÐÕÔ˜ÑÔÐÕÔ˜ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ;˜$ÐÐÐÐÕÔÐÐÐÐˆ;˜$ÐÑÔÕÔˆ;ÑÔÐÕÔÑÔÐÐÕÔ˜$ÑÔÐÕÔ˜$ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ9˜ÐÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÕÔˆ9ÑÔÐÕÔÑÔÐÐÕÔ˜ÑÔÐÕÔ˜ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ6�Tˆ>ÐÐÐÕÔÐÐÐÐˆ6�TÐÑÔÕÔˆ6ÑÔÐÕÔÑÔÐÐÕÔ�TÑÔÐÕÔ�TÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr/   úSAMPLE_CAD_AUTOCAD.dxfÚtmp_pathr   ÚfilenameÚstrÚreturnc                ó  — | |z  }t          j        d¦  «        }|                     ¦   «         }|                     g d¢d¬¦  «         |                     dddi¬¦  «                             d	¦  «         |                     d
ddi¬¦  «                             d¦  «         |                     dddi¬¦  «                             d¦  «         |                     dddi¬¦  «         |                     t          |¦  «        ¦  «         |S )zSHelper to generate a real AutoCAD DXF drawing with legacy Vietnamese font entities.ÚR2018))r   r   )é¨a  r   )rS   éd  )r   rT   T)Úcloseu-   CÂ«ng ty TNHH XÂ©y dÃ¹ng Â§Ãžnh SÂ¬n - DSConsÚheighti,  )Ú
dxfattribs)éô  iX  u1   BÂ¶n vÃ� chi tiÃ•t: CÃ¨ng BÃ•n Kem - KÃŒ Â§a Â§Ã©i�  )rX   ip  u#   BÂª tÂ«ng thÂ©n cÃ¨ng M300 Â®Â¸ 1x2éú   )rX   iˆ  zo{\fArial;C\U+1ed1t th\U+00e9p CB300-V: %%c18a200\PV\U+00e1n khu\U+00f4n th\U+00e9p \U+0111\U+1ecbnh h\U+00ecnh}Úchar_height)	ÚezdxfÚnewÚ
modelspaceÚadd_lwpolylineÚadd_textÚset_placementÚ	add_mtextÚsaveasrO   )rM   rN   Údxf_pathÚdocÚmsps        r-   Úcreate_sample_dxf_drawingrf   a   s+  € ð ˜(Ñ"€HÝ
Œ)�GÑ
Ô
€CØ
�.Š.Ñ
Ô
€Cð ×ÒÐEÐEÐEÈTÐÑRÔRÐRð ‡L‚LØCØ˜c�?ð ñ ô ÷ ‚m�KÑ Ô Ð Ø‡L‚LØMØ˜c�?ð ñ ô ÷ ‚m�KÑ Ô Ð Ø‡L‚LØ9ÀxÐQTÀoð ñ ô ç‚m�KÑ Ô Ð ð ‡M‚MØzØ! 3Ð'ð ñ ô ð ð
 ‡J‚J�s�8‰}Œ}ÑÔÐØ€Or/   c                óÀ  — t          | ¦  «        }t          ¦   «         }|                     |d¬¦  «        }t          |¦  «        }d}||k    }|sòt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }d	d
|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|d         d         }	t          |	¦  «        }
d}|
|k    }|sÇt	          j        d|fd|
|f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |	¦  «        t	          j	        |
¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}	x}
x}}|d         d         }d}||v }|s—t	          j        d|fd||f¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}g }	d}||v }|}|sd}||v }|}|�sXt	          j        d|fd||f¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }|	                     |¦  «         |s‹t	          j        d|fd ||f¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndd!œz  }d"d#|iz  }|	                     |¦  «         t	          j        |	d¦  «        i z  }d$d%|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}	x}x}x}}d&}||v }|s—t	          j        d|fd||f¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}d'}||v }|s—t	          j        d|fd||f¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}t          j        |                     |d(d)¬*¦  «        ¦  «        }|d+         }d,}
||
k    }|slt	          j        d-|fd.||
f¦  «        t	          j	        |¦  «        t	          j	        |
¦  «        d/œz  }d0d1|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
|d2         d3         }d}
||
u}|slt	          j        d4|fd5||
f¦  «        t	          j	        |¦  «        t	          j	        |
¦  «        d/œz  }d0d1|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
|d6         }	t          |	¦  «        }
d7}|
|k    }|sÇt	          j        d|fd8|
|f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |	¦  «        t	          j	        |
¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}	x}
x}}|d9         d:         }d}
||
k    }|slt	          j        d|fd;||
f¦  «        t	          j	        |¦  «        t	          j	        |
¦  «        d/œz  }d0d1|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
dS )<zRTest end-to-end processing of AutoCAD DXF file with Vietnamese font normalization.éd   )Údpié   ©ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚrendered)r   r;   r   Úpy6zassert %(py8)sÚpy8Nr   Úimage_base64)ú>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)s©r   r   Úpy4r   r   r   Ú
text_layeru   Ä�á»‹nh SÆ¡nr6   r8   r:   r<   r   u   Cá»‘ng Báº¿n Kemu   KÃ¨ Ä�a Ä�á»™)z%(py3)s in %(py5)s)r   r   z%(py7)sr   )z%(py10)s in %(py12)s)Úpy10Úpy12z%(py14)sÚpy14zassert %(py17)sÚpy17u   BÃª tÃ´ng thÃ¢n cá»‘ng M300r=   rL   u7   Báº£n váº½ AutoCAD cá»‘ng há»™p thá»§y lá»£i font TCVN3)Ú	file_pathrN   Údrawing_hintÚstatusÚsuccessr   ©z%(py1)s == %(py4)s©r;   rt   úassert %(py6)sro   ÚtakeoffÚid©úis not©z%(py1)s is not %(py4)sÚitemsé   ©z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)sÚmetricsÚtotal_estimated_cost_vnd)z%(py1)s > %(py4)s)rf   r   Úrender_dxf_to_imagesrm   r    r!   r"   r#   r$   r%   r&   r'   ÚappendÚ_format_boolopÚasyncioÚrunÚprocess_drawing_file)rM   Údxf_fileÚservicern   rB   Ú@py_assert5r)   Ú@py_format7Ú@py_format9r(   Ú@py_assert3r*   r+   r,   ru   rA   rC   rD   Ú@py_assert9Ú@py_assert11Ú@py_format13Ú@py_format15Ú@py_format16Ú@py_format18ÚresultÚ@py_format5s                             r-   Ú test_dxf_file_takeoff_processingrŸ   ƒ   sÛ	  € å(¨Ñ2Ô2€HÝ)Ñ+Ô+€Gð ×+Ò+¨H¸#Ð+Ñ>Ô>€HÝˆx‰=Œ=Ð˜AÐˆ=˜AÒÐÐÐÕÔÐÐÐÐˆ=˜AÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆxÑÔÐÕÔˆxÑÔÐÐÕÔˆ=ÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ˜Œ{˜>Ô*Ð1�3Ð*Ñ+Ô+Ð1¨cÐ1Ð+¨cÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð+¨cÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�3Ñ1Ô1Ð1Õ1Ô1�3Ñ1Ô1Ð1Ð1Õ1Ô1Ð*Ñ1Ô1Õ1Ô1Ð+Ñ1Ô1Õ1Ô1¨cÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø˜!”˜\Ô*€JØÐ'ˆ>˜ZÐ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ>˜ZÐ'Ñ'Ô'Õ'Ô'ˆ>Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'˜ZÑ'Ô'Ð'Õ'Ô'˜ZÑ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'ØLÐLÐÐLÐ Ð+ÐLÐLÐLÐLÐL¨ÐL¨À*Ð/LÐLÐLÐLÐLÑLÕLÔLÐLÐLÐLÐLÐ ÐLÑLÔLÕLÔLÐÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔL ÑLÔLÐLÕLÔL ÑLÔLÐLÐLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÐL×LÒLÐLÑLÔLÐLÐLÐLÕLÔLÐLÐLÐLÐL¨À*ÐLÑLÔLÕLÔL¨ÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔLÀ*ÑLÔLÐLÕLÔLÀ*ÑLÔLÐLÐLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÐL×LÒLÐLÑLÔLÐLÕLÔLÐLÐLÑLÔLÐLÑLÐLÐLÐLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLØ(Ð6Ð(¨JÐ6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð(¨JÐ6Ñ6Ô6Õ6Ô6Ð(Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨JÑ6Ô6Ð6Õ6Ô6¨JÑ6Ô6Ð6Ð6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6ØÐ#ˆ:˜Ð#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ:˜Ð#Ñ#Ô#Õ#Ô#ˆ:Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#˜Ñ#Ô#Ð#Õ#Ô#˜Ñ#Ô#Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#õ Œ[Ø×$Ò$ØØ-ØRð 	%ñ 	
ô 	
ñô €Fð �(ÔÐ(˜yÐ(Ð˜yÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð˜yÐ(Ñ(Ô(Õ(Ô(ÐÑ(Ô(Õ(Ô(˜yÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø�)Ô˜TÔ"Ð.¨$Ð.Ð"¨$Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð"¨$Ð.Ñ.Ô.Õ.Ô.Ð"Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø�gŒÐ$�3ˆÑÔÐ$ 1Ð$Ð 1Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð 1Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�3Ñ$Ô$Ð$Õ$Ô$�3Ñ$Ô$Ð$Ð$Õ$Ô$ˆÑ$Ô$Õ$Ô$ÐÑ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø�)ÔÐ7Ô8Ð<¸1Ð<Ð8¸1Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð8¸1Ð<Ñ<Ô<Õ<Ô<Ð8Ñ<Ô<Õ<Ô<¸1Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r/   c                ó   — t          | d¦  «        }t          |d¦  «        5 }t                               ddd|dfiddit          ¬¦  «        }d	d	d	¦  «         n# 1 swxY w Y   |j        }d
}||k    }|sÄt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        |j        ¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|                     ¦   «         }	|	d         }
d}|
|k    }|slt          j        d|fd|
|f¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}
x}}|	d         d         }
d	}|
|u}|slt          j        d|fd|
|f¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}
x}}|	d         }t#          |¦  «        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        t"          ¦  «        rt          j        t"          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }d!d"|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}}d	S )#z-Test REST API upload endpoint with .dxf file.zAPI_CAD_UPLOAD.dxfÚrbz/v1/takeoff/upload-and-analyzeÚfilezapplication/dxfr{   u*   Báº£n váº½ AutoCAD kiá»ƒm thá»­ API upload)ÚfilesÚdataÚheadersNéÉ   r   )z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚresp)r   r   r   z
>assert %(py7)sr   r|   r}   r~   r   r€   ro   r�   Údrawing_coderƒ   r…   r†   rj   rk   rˆ   rm   rs   r   r   )rf   ÚopenÚclientÚpostÚAUTH_HEADERSÚstatus_coder    r!   r"   r#   r$   r%   Ú_format_assertmsgÚtextr&   r'   Újsonrm   )rM   r‘   Úfr§   r(   r)   r–   rD   r+   r¤   rA   rB   rž   r”   r*   r“   r,   s                    r-   Útest_dxf_api_upload_flowr²   ¡   s
  € å(¨Ð3GÑHÔH€Hå	ˆh˜Ñ	Ô	ð 
 Ý�{Š{Ø,ØÐ0°!Ð5FÐGÐHØ Ð"NÐOÝ ð	 ñ 
ô 
ˆð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð ÔÐ-˜sÐ-Ð˜sÒ"Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð˜sÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆ4Ñ-Ô-Ð-Õ-Ô-ˆ4Ñ-Ô-Ð-Ð-Õ-Ô-ÐÑ-Ô-Õ-Ô-˜sÑ-Ô-Ð-Ð-Ñ-Ð-Õ-Ô- D¤IÑ-Ô-Ð-Ñ-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø�9Š9‰;Œ;€DØ�Œ>Ð&˜YÐ&ˆ>˜YÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ>˜YÐ&Ñ&Ô&Õ&Ô&ˆ>Ñ&Ô&Õ&Ô&˜YÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø�	Œ?˜>Ô*Ð6°$Ð6Ð*°$Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð*°$Ð6Ñ6Ô6Õ6Ô6Ð*Ñ6Ô6Õ6Ô6°$Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø�GŒ}Ð"�3ˆ}ÑÔÐ" Ð"Ð Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�3Ñ"Ô"Ð"Õ"Ô"�3Ñ"Ô"Ð"Ð"Õ"Ô"ˆ}Ñ"Ô"Õ"Ô"ÐÑ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"s   ¡+AÁAÁA)rL   )rM   r   rN   rO   rP   r   )rM   r   )Ú__doc__Ú
__future__r   Úbuiltinsr"   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter    rŽ   Úpathlibr   r[   Úfastapi.testclientr   Úapp.mainr   Ú7app.modules.takeoff.application.drawing_takeoff_servicer   Ú>app.modules.takeoff.application.vietnamese_cad_font_transcoderr   rª   r¬   r.   r4   rE   rK   rf   rŸ   r²   © r/   r-   ú<module>r¿      sj  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø Ð Ð Ð Ð Ð à €€€Ø )Ð )Ð )Ð )Ð )Ð )à Ð Ð Ð Ð Ð Ø _Ð _Ð _Ð _Ð _Ð _ðð ð ð ð ð ð 
ˆ�J�J‘L”LÑ	!Ô	!€ØÐ!8Ð9€ðIð Ið Ið(Fð Fð Fð'ð 'ð 'ðð ð ð2 %=ðð ð ð ð ðD=ð =ð =ð =ð<#ð #ð #ð #ð #ð #r/   