ó
    oñ:iŒ  ã                   ó8  • S r SSKJr  SSKJr  SSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSKJr  SSKJr  SSKJr  S	 rS
 r " S S5      r " S S\5      rSS jrS S jr     S!S\S\S\S\S\S\S\4S jjr " S S\5      r " S S\5      r " S S\5      rg)"zHelpers for writing unit tests.é    )ÚIterable)ÚBytesION)ÚTestCase)ÚConfig©Útobytes)Ú	XMLWriterc                 óœ  • [        5       nSn[        U [        5      (       a  X -  nOw[        U [        5      (       a  U[	        U S5      -  nOR[        U [
        5      (       a  USR                  S U  5       5      -  nO![        S[        U 5      R                  -  5      eUS-  nUR                  R                  US5        UR                  S   $ )	a)  Parses a snippet of XML.

Input can be either a single string (unicode or UTF-8 bytes), or a
a sequence of strings.

The result is in the same format that would be returned by
XMLReader, but the parser imposes no constraints on the root
element so it can be called on small snippets of TTX files.
s   <root>úutf-8ó    c              3   ó:   #   • U  H  n[        US 5      v •  M     g7f)r   Nr   )Ú.0Úss     Ú[/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/misc/testTools.pyÚ	<genexpr>ÚparseXML.<locals>.<genexpr>"   s   é € Ð@²Z°œ  7×+Ð+²Zùs   ‚z0expected string or sequence of strings; found %rs   </root>é   é   )ÚTestXMLReader_Ú
isinstanceÚbytesÚstrr   r   ÚjoinÚ	TypeErrorÚtypeÚ__name__ÚparserÚParseÚroot)Ú
xmlSnippetÚreaderÚxmls      r   ÚparseXMLr#      s»   € ô Ó€FØ
€CÜ�*œe×$Ñ$ØÑ‰Ü	�J¤×	$Ñ	$ØŒw�z 7Ó+Ñ+‰Ü	�J¤×	)Ñ	)Øˆs�x‰xÑ@±ZÓ@Ó@Ñ@‰äØ>Ü�:Ó×'Ñ'ñ(ó
ð 	
ð ˆ:Ñ€CØ
‡M�M×Ñ˜˜QÔØ�;‰;�q‰>Ðr   c                 ó  • [        UR                  5       5       Vs/ s H  n[        U[        5      (       a  M  UPM     nnU H  u  pVnUR	                  XVXp5        M     [        US5      (       a  UR                  5         U$ s  snf )NÚpopulateDefaults)r#   Ústripr   r   ÚfromXMLÚhasattrr%   )ÚfontÚ	parseIntor    ÚeÚ
parsed_xmlÚnameÚattrsÚcontents           r   ÚparseXmlIntor0   -   st   € Ü% j×&6Ñ&6Ó&8Ô9ÓTÒ9˜ÄÈAÌs×AS—!Ñ9€JÐTÛ *Ñˆ�WØ×Ñ˜$ wÖ5ñ !+äˆyÐ,×-Ñ-Ø×"Ñ"Ô$ØÐùò Us
   œB¹Bc                   ó`   • \ rS rSrS rS rS rS rSS jrS r	S	 r
S
 rS rS rS rS rSrg)ÚFakeFonté6   c                 ó    • Xl         [        U5       VVs0 s H  u  p#X2_M	     snnU l        SU l        0 U l        [        5       U l        g s  snnf )NF)ÚglyphOrder_Ú	enumerateÚreverseGlyphOrderDict_ÚlazyÚtablesr   Úcfg)ÚselfÚglyphsÚiÚgs       r   Ú__init__ÚFakeFont.__init__7   sG   € Ø!ÔÜ8AÀ&Ô8IÔ&JÒ8I±° q¢tÑ8IÒ&JˆÔ#ØˆŒ	ØˆŒÜ“8ˆ�ùó 'Ks   •A
c                 ó   • XR                   ;   $ ©N©r9   ©r;   Útags     r   Ú__contains__ÚFakeFont.__contains__>   s   € Ø—k‘kÑ!Ð!r   c                 ó    • U R                   U   $ rB   rC   rD   s     r   Ú__getitem__ÚFakeFont.__getitem__A   s   € Ø�{‰{˜3ÑÐr   c                 ó    • X R                   U'   g rB   rC   )r;   rE   Útables      r   Ú__setitem__ÚFakeFont.__setitem__D   s   € Ø �‰�CÒr   Nc                 ó8   • U R                   R                  X5      $ rB   )r9   Úget)r;   rE   Údefaults      r   rP   ÚFakeFont.getG   s   € Ø�{‰{�‰˜sÓ,Ð,r   c                 ó    • U R                   U   $ rB   ©r7   ©r;   r-   s     r   Ú
getGlyphIDÚFakeFont.getGlyphIDJ   s   € Ø×*Ñ*¨4Ñ0Ð0r   c                 óN   • U Vs/ s H  o R                  U5      PM     sn$ s  snf rB   )rV   ©r;   ÚlstÚgids      r   ÚgetGlyphIDManyÚFakeFont.getGlyphIDManyM   s!   € Ù03Ó4²¨—‘ Ö$±Ñ4Ð4ùÒ4ó   …"c                 ó\   • U[        U R                  5      :  a  U R                  U   $ SU-  $ )Nz	glyph%.5d)Úlenr5   )r;   ÚglyphIDs     r   ÚgetGlyphNameÚFakeFont.getGlyphNameP   s1   € Ø”S˜×)Ñ)Ó*Ó*Ø×#Ñ# GÑ,Ð,à Ñ(Ð(r   c                 óN   • U Vs/ s H  o R                  U5      PM     sn$ s  snf rB   )rb   rY   s      r   ÚgetGlyphNameManyÚFakeFont.getGlyphNameManyV   s#   € Ù25Ó6²#¨3×!Ñ! #Ö&±#Ñ6Ð6ùÒ6r^   c                 ó   • U R                   $ rB   )r5   ©r;   s    r   ÚgetGlyphOrderÚFakeFont.getGlyphOrderY   ó   € Ø×ÑÐr   c                 ó   • U R                   $ rB   rT   rh   s    r   ÚgetReverseGlyphMapÚFakeFont.getReverseGlyphMap\   s   € Ø×*Ñ*Ð*r   c                 ó4   • [        U R                  5       5      $ rB   )Úsortedri   rh   s    r   ÚgetGlyphNamesÚFakeFont.getGlyphNames_   s   € Ü�d×(Ñ(Ó*Ó+Ð+r   )r:   r5   r8   r7   r9   rB   )r   Ú
__module__Ú__qualname__Ú__firstlineno__r?   rF   rI   rM   rP   rV   r\   rb   re   ri   rm   rq   Ú__static_attributes__© r   r   r2   r2   6   s>   † òò"ò ò!ô-ò1ò5ò)ò7ò ò+õ,r   r2   c                   ó,   • \ rS rSrS rS rS rS rSrg)r   éc   c                 óæ   • SSK Jn  U" 5       U l        U R                  U R                  l        U R
                  U R                  l        U R                  U R                  l        S U l	        / U l
        g )Nr   )ÚParserCreate)Úxml.parsers.expatr{   r   ÚstartElement_ÚStartElementHandlerÚendElement_ÚEndElementHandlerÚaddCharacterData_ÚCharacterDataHandlerr   Ústack)r;   r{   s     r   r?   ÚTestXMLReader_.__init__d   sR   € Ý2á"“nˆŒØ*.×*<Ñ*<ˆ�‰Ô'Ø(,×(8Ñ(8ˆ�‰Ô%Ø+/×+AÑ+Aˆ�‰Ô(ØˆŒ	Øˆ�
r   c                 ó´   • X/ 4nU R                   (       a"  U R                   S   S   R                  U5        OX0l        U R                   R                  U5        g ©Néÿÿÿÿr   )rƒ   Úappendr   )r;   r-   r.   Úelements       r   r}   ÚTestXMLReader_.startElement_n   sE   € Ø Ð#ˆØ�:�:Ø�J‰J�r‰N˜1Ñ×$Ñ$ WÕ-àŒIØ�
‰
×Ñ˜'Õ"r   c                 ó8   • U R                   R                  5         g rB   )rƒ   ÚpoprU   s     r   r   ÚTestXMLReader_.endElement_v   s   € Ø�
‰
�‰Õr   c                 óF   • U R                   S   S   R                  U5        g r†   )rƒ   rˆ   )r;   Údatas     r   r�   Ú TestXMLReader_.addCharacterData_y   s   € Ø�
‰
�2‰�qÑ× Ñ  Õ&r   )r   r   rƒ   N)	r   rs   rt   ru   r?   r}   r   r�   rv   rw   r   r   r   r   c   s   † òò#òõ'r   r   c                 ó”   • [        [        5       U S9nUR                  R                  S5        UR                  R	                  5         U$ )N)Ú
newlinestrr   )r	   r   ÚfileÚseekÚtruncate)r’   Úwriters     r   ÚmakeXMLWriterr—   }   s7   € ä”w“y¨ZÑ8€Fà
‡K�K×Ñ�QÔØ
‡K�K×ÑÔØ€Mr   c                 óÈ   • [        5       nU " X!5        UR                  R                  5       R                  S5      nUR	                  S5      (       d   eUR                  5       $ )z®Call the passed toXML function and return the written content as a
list of lines (unicode strings).
Result is stripped of XML declaration and OS-specific newline characters.
r   Ú
)r—   r“   ÚgetvalueÚdecodeÚendswithÚ
splitlines)ÚfuncÚttFontr–   r"   s       r   ÚgetXMLr    †   sR   € ô
 ‹_€FÙˆÔØ
�+‰+×
Ñ
Ó
 ×
'Ñ
'¨Ó
0€Cà�<‰<˜×ÑÐÐØ�>‰>ÓÐr   ÚstringÚttLibVersionÚcheckSumAdjustmentÚmodifiedÚcreatedÚsfntVersionÚreturnc                 ó<  • U(       a  [         R                  " SSU 5      n U(       a  [         R                  " SSU 5      n U(       a  [         R                  " SSU 5      n U(       a  [         R                  " SSU 5      n U(       a  [         R                  " SSU 5      n U $ )zJStrip stuff like ttLibVersion, checksums, timestamps, etc. from TTX dumps.z ttLibVersion="[^"]+"Ú z sfntVersion="[^"]+"z#<checkSumAdjustment value="[^"]+"/>z<modified value="[^"]+"/>z<created value="[^"]+"/>)ÚreÚsub)r¡   r¢   r£   r¤   r¥   r¦   s         r   ÚstripVariableItemsFromTTXr¬   “   sw   € ö Ü—’Ð/°°VÓ<ˆæÜ—’Ð.°°FÓ;ˆæÜ—’Ð=¸rÀ6ÓJˆÞÜ—’Ð3°R¸Ó@ˆÞÜ—’Ð2°B¸Ó?ˆØ€Mr   c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚMockFonté¬   zUA font-like object that automatically adds any looked up glyphname
to its glyphOrder.c                 óf   ^ • S/T l          " U 4S jS[        5      nU" SS05      T l        ST l        g )Nz.notdefc                   ó"   >• \ rS rSrU 4S jrSrg)Ú)MockFont.__init__.<locals>.AllocatingDicté³   c                 ó\   >• TR                   R                  U5        [        U 5      nX U'   U$ rB   )Ú_glyphOrderrˆ   r`   )ÚreverseDictÚkeyr[   r;   s      €r   Ú__missing__Ú5MockFont.__init__.<locals>.AllocatingDict.__missing__´   s.   ø€ Ø× Ñ ×'Ñ'¨Ô,Ü˜+Ó&�Ø#&˜CÑ Ø�
r   rw   N)r   rs   rt   ru   r¸   rv   rh   s   €r   ÚAllocatingDictr²   ³   s   ø† ÷ð r   rº   r   F)rµ   ÚdictÚ_reverseGlyphOrderr8   )r;   rº   s   ` r   r?   ÚMockFont.__init__°   s3   ø€ Ø%˜;ˆÔ÷	œTô 	ñ #1°)¸Q°Ó"@ˆÔØˆ�	r   c                 ó$   • U R                   U   nU$ rB   ©r¼   )r;   Úglyphr[   s      r   rV   ÚMockFont.getGlyphID½   s   € Ø×%Ñ% eÑ,ˆØˆ
r   c                 ó   • U R                   $ rB   r¿   rh   s    r   rm   ÚMockFont.getReverseGlyphMapÁ   s   € Ø×&Ñ&Ð&r   c                 ó    • U R                   U   $ rB   ©rµ   )r;   r[   s     r   rb   ÚMockFont.getGlyphNameÄ   s   € Ø×Ñ Ñ$Ð$r   c                 ó   • U R                   $ rB   rÅ   rh   s    r   ri   ÚMockFont.getGlyphOrderÇ   rk   r   )rµ   r¼   r8   N)r   rs   rt   ru   Ú__doc__r?   rV   rm   rb   ri   rv   rw   r   r   r®   r®   ¬   s    † ñòòò'ò%õ r   r®   c                   ó   • \ rS rSrS rSrg)r   éË   c                 óv   • [         R                  " X5        [        U S5      (       d  U R                  U l        g g )NÚassertRaisesRegex)Ú	_TestCaser?   r(   ÚassertRaisesRegexprÍ   )r;   Ú
methodNames     r   r?   ÚTestCase.__init__Ì   s3   € Ü×Ò˜4Ô,ô �tÐ0×1Ñ1Ø%)×%<Ñ%<ˆDÕ"ð 2r   )rÍ   N)r   rs   rt   ru   r?   rv   rw   r   r   r   r   Ë   s   † õ=r   r   c                   ó2   • \ rS rSrS rS rS rS rS rSr	g)	ÚDataFilesHandleréÔ   c                 ó    • S U l         SU l        g )Nr   )ÚtempdirÚnum_tempfilesrh   s    r   ÚsetUpÚDataFilesHandler.setUpÕ   s   € ØˆŒØˆÕr   c                 óh   • U R                   (       a!  [        R                  " U R                   5        g g rB   )rÖ   ÚshutilÚrmtreerh   s    r   ÚtearDownÚDataFilesHandler.tearDownÙ   s   € Ø�<�<Ü�MŠM˜$Ÿ,™,Õ'ð r   c                 óÌ   • [         R                  R                  [        R                  U R
                     R                  5      n[         R                  R                  USU5      $ )Nr�   )ÚosÚpathÚdirnameÚsysÚmodulesrs   Ú__file__r   )r;   ÚtestfileÚfolders      r   ÚgetpathÚDataFilesHandler.getpathÝ   s>   € Ü—‘—‘¤§¡¨T¯_©_Ñ!=×!FÑ!FÓGˆÜ�w‰w�|‰|˜F F¨HÓ5Ð5r   c                 ó\   • U R                   (       d  [        R                  " 5       U l         g g rB   )rÖ   ÚtempfileÚmkdtemprh   s    r   Útemp_dirÚDataFilesHandler.temp_dirá   s   € Ø�|�|Ü#×+Ò+Ó-ˆD�Lð r   c                 ó¦   • U R                  5         [        R                  R                  U R                  U5      n[
        R                  " X5        U$ rB   )rí   rà   rá   r   rÖ   rÛ   Úcopy2)r;   Ú	font_pathÚ	file_nameÚtemppaths       r   Ú	temp_fontÚDataFilesHandler.temp_fontå   s4   € Ø�‰ŒÜ—7‘7—<‘< §¡¨iÓ8ˆÜ�Š�YÔ)Øˆr   )r×   rÖ   N)
r   rs   rt   ru   rØ   rÝ   rè   rí   rô   rv   rw   r   r   rÓ   rÓ   Ô   s   † òò(ò6ò.õr   rÓ   )r™   rB   )TTTTF)rÉ   Úcollections.abcr   Úior   rà   rª   rÛ   rã   rë   Úunittestr   rÎ   ÚfontTools.configr   ÚfontTools.misc.textToolsr   ÚfontTools.misc.xmlWriterr	   r#   r0   r2   Úobjectr   r—   r    r   Úboolr¬   r®   rÓ   rw   r   r   Ú<module>rþ      sÐ   ðÙ %å $Ý Û 	Û 	Û Û 
Û Ý *Ý #Ý ,Ý .òò:÷*,ñ *,ôZ'�Vô 'ô4ô
ð Ø#ØØØñØðàðð ðð ð	ð
 ðð ðð 	õô2 ˆvô  ô>=ˆyô =ô�xõ r   