a
    èÝEbÿ  ã                   @   sÖ   d Z ddlmZ ddl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 ddlmZ dd	„ Zd
d„ ZG dd„ dƒZG dd„ deƒZddd„Zddd„ZG dd„ deƒZG dd„ deƒZ
G dd„ de
ƒZdS )zHelpers for writing unit tests.é    )ÚIterable)ÚBytesION)ÚTestCase©Útobytes)Ú	XMLWriterc                 C   sŽ   t ƒ }d}t| tƒr|| 7 }nPt| tƒr8|t| dƒ7 }n6t| tƒr\|d dd„ | D ƒ¡7 }ntdt| ƒj	 ƒ‚|d7 }|j
 |d¡ |jd	 S )
aA  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                 s   s   | ]}t |d ƒV  qdS )r   Nr   )Ú.0Ús© r   úX/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/fontTools/misc/testTools.pyÚ	<genexpr>    r	   zparseXML.<locals>.<genexpr>z0expected string or sequence of strings; found %rs   </root>r   é   )ÚTestXMLReader_Ú
isinstanceÚbytesÚstrr   r   ÚjoinÚ	TypeErrorÚtypeÚ__name__ÚparserÚParseÚroot)Ú
xmlSnippetÚreaderÚxmlr   r   r   ÚparseXML   s    



ÿr   c                 C   sB   dd„ t | ¡ ƒD ƒ}|D ]\}}}| |||| ¡ q| ¡  |S )Nc                 S   s   g | ]}t |tƒs|‘qS r   )r   r   )r
   Úer   r   r   Ú
<listcomp>*   r	   z parseXmlInto.<locals>.<listcomp>)r   ÚstripZfromXMLZpopulateDefaults)ÚfontZ	parseIntor   Z
parsed_xmlÚnameÚattrsÚcontentr   r   r   ÚparseXmlInto)   s
    r&   c                   @   sf   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚFakeFontc                 C   s*   || _ dd„ t|ƒD ƒ| _d| _i | _d S )Nc                 S   s   i | ]\}}||“qS r   r   )r
   ÚiÚgr   r   r   Ú
<dictcomp>4   r	   z%FakeFont.__init__.<locals>.<dictcomp>F)ÚglyphOrder_Ú	enumerateÚreverseGlyphOrderDict_ÚlazyÚtables)ÚselfZglyphsr   r   r   Ú__init__2   s    zFakeFont.__init__c                 C   s
   | j | S ©N©r/   )r0   Útagr   r   r   Ú__getitem__8   s    zFakeFont.__getitem__c                 C   s   || j |< d S r2   r3   )r0   r4   Útabler   r   r   Ú__setitem__;   s    zFakeFont.__setitem__Nc                 C   s   | j  ||¡S r2   )r/   Úget)r0   r4   Údefaultr   r   r   r8   >   s    zFakeFont.getc                 C   s
   | j | S r2   ©r-   ©r0   r#   r   r   r   Ú
getGlyphIDA   s    zFakeFont.getGlyphIDc                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]}ˆ   |¡‘qS r   )r<   ©r
   Úgid©r0   r   r   r    E   r	   z+FakeFont.getGlyphIDMany.<locals>.<listcomp>r   ©r0   Úlstr   r?   r   ÚgetGlyphIDManyD   s    zFakeFont.getGlyphIDManyc                 C   s$   |t | jƒk r| j| S d| S d S )Nz	glyph%.5d)Úlenr+   )r0   ZglyphIDr   r   r   ÚgetGlyphNameG   s    
zFakeFont.getGlyphNamec                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]}ˆ   |¡‘qS r   )rD   r=   r?   r   r   r    M   r	   z-FakeFont.getGlyphNameMany.<locals>.<listcomp>r   r@   r   r?   r   ÚgetGlyphNameManyL   s    zFakeFont.getGlyphNameManyc                 C   s   | j S r2   )r+   r?   r   r   r   ÚgetGlyphOrderO   s    zFakeFont.getGlyphOrderc                 C   s   | j S r2   r:   r?   r   r   r   ÚgetReverseGlyphMapR   s    zFakeFont.getReverseGlyphMapc                 C   s   t |  ¡ ƒS r2   )ÚsortedrF   r?   r   r   r   ÚgetGlyphNamesU   s    zFakeFont.getGlyphNames)N)r   Ú
__module__Ú__qualname__r1   r5   r7   r8   r<   rB   rD   rE   rF   rG   rI   r   r   r   r   r'   1   s   
r'   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c                 C   sB   ddl m} |ƒ | _| j| j_| j| j_| j| j_d | _	g | _
d S )Nr   )ÚParserCreate)Zxml.parsers.expatrL   r   ÚstartElement_ÚStartElementHandlerÚendElement_ÚEndElementHandlerÚaddCharacterData_ÚCharacterDataHandlerr   Ústack)r0   rL   r   r   r   r1   Z   s    


zTestXMLReader_.__init__c                 C   s<   ||g f}| j r&| j d d  |¡ n|| _| j  |¡ d S ©Néÿÿÿÿr   )rS   Úappendr   )r0   r#   r$   Úelementr   r   r   rM   c   s
    
zTestXMLReader_.startElement_c                 C   s   | j  ¡  d S r2   )rS   Úpopr;   r   r   r   rO   k   s    zTestXMLReader_.endElement_c                 C   s   | j d d  |¡ d S rT   )rS   rV   )r0   Údatar   r   r   rQ   n   s    z TestXMLReader_.addCharacterData_N)r   rJ   rK   r1   rM   rO   rQ   r   r   r   r   r   Y   s   	r   Ú
c                 C   s(   t tƒ | d�}|j d¡ |j ¡  |S )N)Ú
newlinestrr   )r   r   ÚfileÚseekÚtruncate)r[   Úwriterr   r   r   ÚmakeXMLWriterr   s    
r`   c                 C   s6   t ƒ }| ||ƒ |j ¡  d¡}| d¡s.J ‚| ¡ S )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   rZ   )r`   r\   ÚgetvalueÚdecodeÚendswithÚ
splitlines)ÚfuncZttFontr_   r   r   r   r   ÚgetXML{   s
    
rf   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚMockFontzYA font-like object that automatically adds any looked up glyphname
    to its glyphOrder.c                    s4   dgˆ _ G ‡ fdd„dtƒ}|ddiƒˆ _dˆ _d S )Nz.notdefc                       s   e Zd Z‡ fdd„ZdS )z)MockFont.__init__.<locals>.AllocatingDictc                    s    ˆ j  |¡ t| ƒ}|| |< |S r2   )Ú_glyphOrderrV   rC   )ZreverseDictÚkeyr>   r?   r   r   Ú__missing__�   s    z5MockFont.__init__.<locals>.AllocatingDict.__missing__N)r   rJ   rK   rj   r   r?   r   r   ÚAllocatingDict�   s   rk   r   F)rh   ÚdictÚ_reverseGlyphOrderr.   )r0   rk   r   r?   r   r1   Œ   s    zMockFont.__init__c                 C   s   | j | }|S r2   ©rm   )r0   Zglyphr>   r   r   r   r<   ˜   s    
zMockFont.getGlyphIDc                 C   s   | j S r2   rn   r?   r   r   r   rG   œ   s    zMockFont.getReverseGlyphMapc                 C   s
   | j | S r2   ©rh   )r0   r>   r   r   r   rD   Ÿ   s    zMockFont.getGlyphNamec                 C   s   | j S r2   ro   r?   r   r   r   rF   ¢   s    zMockFont.getGlyphOrderN)	r   rJ   rK   Ú__doc__r1   r<   rG   rD   rF   r   r   r   r   rg   ˆ   s   rg   c                   @   s   e Zd Zdd„ ZdS )r   c                 C   s"   t  | |¡ t| dƒs| j| _d S )NÚassertRaisesRegex)Ú	_TestCaser1   ÚhasattrZassertRaisesRegexprq   )r0   Ú
methodNamer   r   r   r1   ¨   s    
zTestCase.__init__N)r   rJ   rK   r1   r   r   r   r   r   ¦   s   r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚDataFilesHandlerc                 C   s   d | _ d| _d S )Nr   )ÚtempdirZnum_tempfilesr?   r   r   r   ÚsetUp²   s    zDataFilesHandler.setUpc                 C   s   | j rt | j ¡ d S r2   )rv   ÚshutilÚrmtreer?   r   r   r   ÚtearDown¶   s    zDataFilesHandler.tearDownc                 C   s&   t j tj| j j¡}t j |d|¡S )NrY   )ÚosÚpathÚdirnameÚsysÚmodulesrJ   Ú__file__r   )r0   ZtestfileÚfolderr   r   r   Úgetpathº   s    zDataFilesHandler.getpathc                 C   s   | j st ¡ | _ d S r2   )rv   ÚtempfileÚmkdtempr?   r   r   r   Útemp_dir¾   s    zDataFilesHandler.temp_dirc                 C   s(   |   ¡  tj | j|¡}t ||¡ |S r2   )r…   r{   r|   r   rv   rx   Úcopy2)r0   Z	font_pathÚ	file_nameZtemppathr   r   r   Ú	temp_fontÂ   s    zDataFilesHandler.temp_fontN)r   rJ   rK   rw   rz   r‚   r…   rˆ   r   r   r   r   ru   °   s
   ru   )rZ   )N)rp   Úcollections.abcr   Úior   r{   rx   r~   rƒ   Zunittestr   rr   ZfontTools.misc.textToolsr   ZfontTools.misc.xmlWriterr   r   r&   r'   Úobjectr   r`   rf   rg   ru   r   r   r   r   Ú<module>   s$   (
	

