o
    ·›îY`   ã                   @   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S )zXML reporting for coverage.pyé    N)Úenv)Ú__url__Ú__version__Úfiles)Úiitems)Úisolate_module)ÚReporterzQhttps://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtdc                 C   s   |dkrdS dt | ƒ|  S )z0Return the fraction of `hit`/`num`, as a string.r   Ú1z%.4g)Úfloat)ÚhitÚnum© r   úD/var/www/html/env/lib/python3.10/site-packages/coverage/xmlreport.pyÚrate   s   r   c                       s2   e Zd ZdZ‡ fdd„Zd	dd„Zdd„ Z‡  ZS )
ÚXmlReporterz<A reporter for writing Cobertura-style XML coverage results.c                    sf   t t| ƒ ||¡ tƒ | _|jr%|jD ]}tj |¡r$| j 	t
 |¡¡ qi | _d | _|j ¡ | _d S ©N)Úsuperr   Ú__init__ÚsetÚsource_pathsÚsourceÚosÚpathÚexistsÚaddr   Úcanonical_filenameÚpackagesÚxml_outÚdataÚhas_arcs)ÚselfÚcoverageÚconfigÚsrc©Ú	__class__r   r   r   #   s   
€zXmlReporter.__init__Nc                 C   sâ  |pt j}tjj ¡ }| ddd¡| _| jj}| 	dt
¡ | 	dttt ¡ d ƒƒ¡ | | j dt ¡¡ | | j dt ¡¡ |  | j|¡ | j d¡}| |¡ t| jƒD ]}| j d	¡}| |¡ | j |¡}| |¡ qXd
\}	}
d
\}}| j d¡}| |¡ tt| jƒƒD ]l\}}|\}}}}}| j d¡}| |¡ | j d¡}| |¡ tt|ƒƒD ]	\}}| |¡ q²| 	d| tjd¡¡ | 	dt||ƒ¡ | jrÙt||ƒ}nd}| 	d|¡ | 	dd¡ |	|7 }	|
|7 }
||7 }||7 }q‹| 	dt|	ƒ¡ | 	dt|
ƒ¡ | 	dt|
|	ƒ¡ | j�r/| 	dt|ƒ¡ | 	dt|ƒ¡ | 	dt||ƒ¡ n| 	dd¡ | 	dd¡ | 	dd¡ | 	dd¡ | j ¡ }t j!�rU| "d¡}| #|¡ |	| }|dk�rgd}|S 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Ú.ú	line-rateÚ0úbranch-rateÚ
complexityzlines-validzlines-coveredzbranches-validzbranches-coveredÚutf8r   ç        g      Y@)$ÚsysÚstdoutÚxmlÚdomÚminidomÚgetDOMImplementationÚcreateDocumentr   ÚdocumentElementÚsetAttributer   ÚstrÚintÚtimeÚappendChildÚcreateCommentr   ÚDTD_URLÚreport_filesÚxml_fileÚcreateElementÚsortedr   ÚcreateTextNoder   r   Úreplacer   Úsepr   r   Útoprettyxmlr   ÚPY2ÚencodeÚwrite)r    ÚmorfsÚoutfileÚimplÚ	xcoverageÚxsourcesr   ÚxsourceÚtxtÚlnum_totÚ	lhits_totÚbnum_totÚ	bhits_totÚ	xpackagesÚpkg_nameÚpkg_dataÚ
class_eltsÚlhitsÚlnumÚbhitsÚbnumÚxpackageÚxclassesÚ_Ú	class_eltÚbranch_rateÚoutÚdenomÚpctr   r   r   Úreport/   s|   
	
ÿ









ÿzXmlReporter.reportc                 C   sê  |j  dd¡}| jD ]}| | dd¡d ¡r#|t|ƒd d… } nq
| ¡ }tj |¡p/d}d 	| 
d¡d| jj… ¡}| dd¡}||j krZ| j |j dt|ƒ …  d¡¡ | j |i ddddg¡}| j d¡}	|	 | j d	¡¡ | j d
¡}
|	 |
¡ |	 dtj ||¡¡ |	 d| dd¡¡ |	 dd¡ | ¡ }| ¡ }t|jƒD ]Z}| j d¡}| dt|ƒ¡ | dtt||jvƒƒ¡ | jrý||v rç|| \}}| dd¡ | ddd| | ||f ¡ ||v rýdd„ || D ƒ}| dd 	|¡¡ |
 |¡ q¨t|jƒ}|t|jƒ }| j�r.tdd„ | ¡ D ƒƒ}tdd„ | ¡ D ƒƒ}|| }nd}d}|	 dt ||ƒ¡ | j�rEt ||ƒ}nd}|	 d |¡ |	|d |< |d  |7  < |d!  |7  < |d"  |7  < |d#  |7  < dS )$z(Add to the XML report for a single file.ú\ú/é   Nr,   z\/r   ÚclassÚmethodsÚlinesr+   Úfilenamer0   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)r<   )Ú.0Úbr   r   r   Ú
<listcomp>Á   s     z(XmlReporter.xml_file.<locals>.<listcomp>zmissing-branchesú,c                 s   s   � | ]\}}|V  qd S r   r   ©rw   ÚtÚkr   r   r   Ú	<genexpr>É   s   € z'XmlReporter.xml_file.<locals>.<genexpr>c                 s   s   � | ]	\}}|| V  qd S r   r   r{   r   r   r   r~   Ê   s   € r2   r-   r/   é   é   é   )!ro   rG   r   Ú
startswithÚlenÚrelative_filenamer   r   ÚdirnameÚjoinÚsplitr"   Úxml_package_depthr   Úrstripr   Ú
setdefaultr   rD   r?   r;   ÚrelpathÚbranch_statsÚmissing_branch_arcsrE   Ú
statementsr<   r=   Úmissingr   ÚsumÚvaluesr   )r    ÚfrÚanalysisro   Úsource_pathÚrel_namer…   Úpackage_namer)   ÚxclassÚxlinesrŒ   r�   rp   ÚxlineÚtotalÚtakenÚannlinesÚclass_linesÚ
class_hitsÚclass_branchesÚmissing_branchesÚclass_br_hitsrd   r   r   r   rC   Œ   sp   
þ
"
þ

zXmlReporter.xml_filer   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rh   rC   Ú__classcell__r   r   r$   r   r       s
    
]r   )r¥   r   Úos.pathr3   r>   Úxml.dom.minidomr5   r!   r   r   r   r   Úcoverage.backwardr   Úcoverage.miscr   Úcoverage.reportr   rA   r   r   r   r   r   r   Ú<module>   s   