B
    `r                 @   s   d Z ddlmZmZmZ eZddlZddlZddl	m
Z
mZmZmZ ddlmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ dd Zdd Z dd Z!dS )z#Generate XML code coverage reports.    )absolute_importdivisionprint_functionN)CommentElement
SubElementtostring)minidom   )	make_dirsread_json_file)
ResultTypewrite_text_test_results)get_ansible_version)data_context   )command_coverage_combine)run_coverageCoverageConfigc       	      C   s   t | }x|D ]}dtj| }|drdt|}t|d}t|}|j	dd}t
tj|| qtjtjj|}ttjj t| |ddd|g qW d	S )
z$
    :type args: CoverageConfig
    z%s.xmlz-powershellzutf-8z    )indentxmlz-iz-oN)r   ospathbasenameendswith_generate_powershell_xmlr   r	   parseStringZtoprettyxmlr   r   ZREPORTSjoinr   r   )	argsZoutput_filesZoutput_fileZxml_namereportZrough_stringZreparsedprettyZxml_path r!   R/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/coverage/xml.pycommand_coverage_xml/   s    



r#   c             C   s  t | }t jj}t jj}i }x| D ]\}}tjtj	|d }|
drZd}nD|rdd}n:|t|d d }	|	
drdnd	}
d
t jjj|
f }||kri ||< ||| |< q*W td}|td |td t|d}t|d}t jj|_t|d}d}d}x6| D ]*\}}t|||\}}||7 }||7 }qW |jdddd|rrtt|| dndt|t|ttt t d	 |S )z6
    :type coverage_file: str
    :rtype: Element
    r   zAnsible.ModuleUtilszansible.module_utilszansible.modulesr   Nzplugins/modulesmodulesZmodule_utilsz ansible_collections.%splugins.%sZcoveragezN Generated by ansible-test from the Ansible project: https://www.ansible.com/ z\ Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd sourcessourcepackages0   )	zbranch-ratezbranches-coveredzbranches-valid
complexityz	line-ratezlines-coveredzlines-valid	timestampversion)r   r   contentroot
is_ansibleitemsr   r   splitextr   
startswithlenZ
collectionprefixr   appendr   r   text_add_cobertura_packageattribupdatestrroundinttimer   )Zcoverage_fileZcoverage_infocontent_rootr/   r'   r   resultsfilenamepackagerel_pathZplugin_typeZelem_coverageZelem_sourcesZelem_sourceZelem_packagestotal_lines_hittotal_line_countpackage_namepackage_data	lines_hit
line_countr!   r!   r"   r   E   sT    







r   c          
   C   sz  t | d}t |d}d}d}x$| D ]\}}tdd | D }	t|}
||	7 }||
7 }t |d}tjtj|d }|dr|dd	 }t	 j
j}|}||r|t|d
 d	 }|jdd||
rtt|	|
 dnd|d t |d t |d}x8| D ],\}}t |d}|jjt|t|d qW q(W |jdd|rftt|| dnd|d ||fS )z
    :type packages: SubElement
    :type package_name: str
    :type package_data: Dict[str, Dict[str, int]]
    :rtype: Tuple[int, int]
    rA   classesr   c             S   s   g | ]}|rd qS )Tr!   ).0hitsr!   r!   r"   
<listcomp>   s    z*_add_cobertura_package.<locals>.<listcomp>classzAnsible.ModuleUtils   Nr   r(   r)   )zbranch-rater*   r@   z	line-ratenamemethodslinesline)rK   number)zbranch-rater*   z	line-raterO   )r   r0   r3   valuesr   r   r1   r   r2   r   r-   r.   r8   r9   r:   r;   )r'   rE   rF   Zelem_packageZelem_classesrC   rD   r   r?   rG   rH   Z
elem_class
class_namer>   r@   Z
elem_linesrS   rK   Z	elem_liner!   r!   r"   r7      sH    










r7   )"__doc__
__future__r   r   r   type__metaclass__r   r=   xml.etree.ElementTreer   r   r   r   xml.domr	   ior   r   Zutil_commonr   r   envr   datar   combiner    r   r   r#   r   r7   r!   r!   r!   r"   <module>   s   A