B
    ê¹`ü!  ã               @   s    d Z ddl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	m
Z
mZ ddlmZ ddlmZ ddlmZ eeƒZdZd	d
„ ZG dd„ deƒZdd„ ZdS )zXML reporting for coverage.pyé    N)Úenv)Ú__url__Ú__version__Úfiles)Úiitems)Úisolate_module)Úget_analysis_to_reportzQhttps://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtdc             C   s    |dkrdS dt | ƒ|  S dS )z0Return the fraction of `hit`/`num`, as a string.r   Ú1z%.4gN)Úfloat)ÚhitÚnum© r   úZ/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/coverage/xmlreport.pyÚrate   s    r   c               @   s*   e Zd ZdZdd„ Zd	dd„Zdd„ ZdS )
ÚXmlReporterz<A reporter for writing Cobertura-style XML coverage results.c             C   sl   || _ | j j| _tƒ | _| jjr\x:| jjD ].}tj |¡r*| jjsLt	 
|¡}| j |¡ q*W i | _d | _d S )N)ÚcoverageÚconfigÚsetÚsource_pathsÚsourceÚosÚpathÚexistsZrelative_filesr   Úcanonical_filenameÚaddÚpackagesÚxml_out)Úselfr   Úsrcr   r   r   Ú__init__$   s    

zXmlReporter.__init__Nc             C   s   |pt j}| j ¡  ¡ }tjj ¡ }| 	ddd¡| _
| j
j}| dt¡ | dttt ¡ d ƒƒ¡ | | j
 dt ¡¡ | | j
 dt ¡¡ x&t| j|ƒD ]\}}|  |||¡ qžW | j
 d¡}| |¡ x>t| jƒD ]0}	| j
 d	¡}
| |
¡ | j
 |	¡}|
 |¡ qÚW d
\}}d
\}}| j
 d¡}| |¡ xòtt| jƒƒD ]à\}}|\}}}}}| j
 d¡}| |¡ | j
 d¡}| |¡ x$tt|ƒƒD ]\}}| |¡ q”W | d| tjd¡¡ | dt ||ƒ¡ |ræt ||ƒ}nd}| d|¡ | dd¡ ||7 }||7 }||7 }||7 }qDW | dt|ƒ¡ | dt|ƒ¡ | dt ||ƒ¡ |r”| dt|ƒ¡ | dt|ƒ¡ | dt ||ƒ¡ n$| dd¡ | dd¡ | dd¡ | dd¡ | !t"| j
ƒ¡ || }|dkrìd}nd||  | }|S )z¯Generate a Cobertura-compatible XML report for `morfs`.

        `morfs` is a list of modules or file names.

        `outfile` is a file object to write the XML to.

        Nr   ÚversionÚ	timestampiè  z Generated by coverage.py: %s z Based on %s Úsourcesr   )r   r   r   ÚpackageÚclassesÚnameÚ.z	line-rateÚ0zbranch-rateÚ
complexityzlines-validzlines-coveredzbranches-validzbranches-coveredr   g        g      Y@)#ÚsysÚstdoutr   Úget_dataÚhas_arcsÚxmlÚdomÚminidomZgetDOMImplementationZcreateDocumentr   ZdocumentElementÚsetAttributer   ÚstrÚintÚtimeÚappendChildZcreateCommentr   ÚDTD_URLr   Úxml_fileÚcreateElementÚsortedr   ZcreateTextNoder   r   Úreplacer   Úsepr   ÚwriteÚserialize_xml)r   ZmorfsÚoutfiler,   ÚimplZ	xcoverageÚfrÚanalysisZxsourcesr   ZxsourceÚtxtZlnum_totZ	lhits_totZbnum_totZ	bhits_totZ	xpackagesÚpkg_nameZpkg_dataZ
class_eltsZlhitsÚlnumZbhitsZbnumZxpackageZxclassesÚ_Z	class_eltÚbranch_rateZdenomZpctr   r   r   Úreport2   sv    	







zXmlReporter.reportc             C   s
  | j jr|jjdkrdS |j dd¡}xn| jD ]:}t |¡}| 	| dd¡d ¡r.|t
|ƒd d… }P q.W | ¡ }| j |jdt
|ƒ …  d¡¡ tj |¡p¤d}d | d¡d| j j… ¡}| dd¡}| j |i ddddg¡}	| j d¡}
|
 | j d	¡¡ | j d
¡}|
 |¡ |
 dtj ||¡¡ |
 d| dd¡¡ |
 dd¡ | ¡ }| ¡ }xÈt|jƒD ]º}| j d¡}| dt|ƒ¡ | dtt ||j!kƒƒ¡ |r||krì|| \}}| dd¡ | ddd| | ||f ¡ ||krdd„ || D ƒ}| dd |¡¡ | |¡ qlW t
|jƒ}|t
|j!ƒ }|r~t"dd„ | #¡ D ƒƒ}t"dd„ | #¡ D ƒƒ}|| }nd}d}|
 dt$||ƒ¡ |rªt$||ƒ}nd}|
 d |¡ |
|	d |< |	d  |7  < |	d!  |7  < |	d"  |7  < |	d#  |7  < dS )$z(Add to the XML report for a single file.r   Nú\ú/é   z\/r&   ÚclassÚmethodsÚlinesr%   Úfilenamer(   r'   ÚlineÚnumberÚhitsÚbranchÚtruezcondition-coveragez%d%% (%d/%d)éd   c             S   s    g | ]}|d k rdnt |ƒ‘qS )r   Úexit)r1   )Ú.0Úbr   r   r   ú
<listcomp>Ç   s    z(XmlReporter.xml_file.<locals>.<listcomp>zmissing-branchesú,c             s   s   | ]\}}|V  qd S )Nr   )rU   ÚtÚkr   r   r   ú	<genexpr>Ï   s    z'XmlReporter.xml_file.<locals>.<genexpr>c             s   s   | ]\}}|| V  qd S )Nr   )rU   rY   rZ   r   r   r   r[   Ð   s    g        z	line-ratezbranch-rateé   é   é   )%r   Z
skip_emptyZnumbersZn_statementsrM   r9   r   r   r   Ú
startswithÚlenZrelative_filenamer   Úrstripr   r   ÚdirnameÚjoinÚsplitZxml_package_depthr   Ú
setdefaultr   r7   r4   r0   ÚrelpathÚbranch_statsÚmissing_branch_arcsr8   Z
statementsr1   r2   ÚmissingÚsumÚvaluesr   )r   r?   r@   r,   rM   Úsource_pathZrel_namerb   Úpackage_namer#   ZxclassZxlinesrg   rh   rN   ZxlineÚtotalZtakenZannlinesZclass_linesZ
class_hitsZclass_branchesZmissing_branchesZclass_br_hitsrE   r   r   r   r6   Ž   sr    
"




zXmlReporter.xml_file)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rF   r6   r   r   r   r   r   !   s   
\r   c             C   s   |   ¡ }tjr| d¡}|S )z Serialize a minidom node to XML.Úutf8)Ztoprettyxmlr   ÚPY2Úencode)r.   Úoutr   r   r   r<   å   s    
r<   )rr   r   Úos.pathr)   r3   Zxml.dom.minidomr-   r   r   r   r   r   Zcoverage.backwardr   Zcoverage.miscr   Zcoverage.reportr   r5   r   Úobjectr   r<   r   r   r   r   Ú<module>   s     E