
    Vh                        d Z ddlm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lmZ ddZddZddZ G d de      Z y)z#Generate XML code coverage reports.    )annotationsN)CommentElement
SubElementtostring)minidom   )	make_dirsread_json_file)
ResultTypewrite_text_test_results)get_ansible_version)data_context)prepare_profiles   )combine_coverage_filesCoverageCombineConfig)run_coverageCoverageXmlConfigc           
     4   t        |       }t        | |      }|D ]  }dt        j                  j	                  |      z  }|j                  d      rZt        |      }t        |d      }t        j                  |      }|j                  d      }t        t        j                  ||       t        j                  j                  t        j                  j                  |      }	t        t        j                  j                         t!        | ||ddd|	g        y	)
z Generate an XML coverage report.z%s.xmlz-powershellzutf-8z    )indentxmlz-iz-oN)r   r   ospathbasenameendswith_generate_powershell_xmlr   r   parseStringtoprettyxmlr   r   REPORTSjoinr
   r   )
args
host_stateoutput_filesoutput_filexml_namereportrough_stringreparsedprettyxml_paths
             \/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/commands/coverage/xml.pycommand_coverage_xmlr-   2   s    !$'J)$
;L# Wbgg..{;;.-k:F#FG4L**<8H)))8F#J$6$6&Iww||J$6$6$;$;XFHj((--.z;dH?UVW    c                   t        |       }t               j                  j                  }t               j                  j                  }i }|j                         D ]  \  }}t        j                  j                  t        j                  j                  |            d   }|j                  d      rd}nY|rd}nT|t        |      dz   d }	|	j                  d      rdnd	}
d
t               j                  j                  j                  d|
}||vri ||<   |||   |<    t        d      }|j                  t!        d             |j                  t!        d             t#        |d      }t#        |d      }t               j                  j                  |_        t#        |d      }d}d}|j                         D ]  \  }}t'        |||      \  }}||z  }||z  }! |j(                  j+                  dddd|rt-        t/        ||z  d            ndt-        |      t-        |      t-        t1        t3        j2                                     t5               d	       |S )zaGenerate a PowerShell coverage report XML element from the specified coverage file and return it.r   Ansible.ModuleUtilszansible.module_utilszansible.modulesr   Nzplugins/modulesmodulesmodule_utilszansible_collections.zplugins.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   )	branch-ratezbranches-coveredzbranches-valid
complexity	line-ratezlines-coveredzlines-valid	timestampversion)r   r   contentroot
is_ansibleitemsr   r   splitextr   
startswithlen
collectionprefixr   appendr   r   text_add_cobertura_packageattribupdatestrroundinttimer   )coverage_filecoverage_infocontent_rootr@   r6   r   resultsfilenamepackagerel_pathplugin_typeelem_coverageelem_sourceselem_sourceelem_packagestotal_lines_hittotal_line_countpackage_namepackage_data	lines_hit
line_counts                        r,   r   r   G   s>   "=1M>))..L''22J57H&,,. *g77##BGG$4$4T$:;A>45,G'GC-123H'/':':;L'M)SaK<HN<R<R<]<]<d<dfqrG(" "HW")$*" J'M`acnoq mY7L\84K#~--22K}j9MO&.nn&6 '"l 6}lT` a	:9$J&	' JZS1AA1EF`c-.?+TYY[)*&(
! 
 r.   c                   t        | d      }t        |d      }d}d}|j                         D ]  \  }}t        |j                         D 	cg c]  }	|	sd	 c}	      }
t        |      }||
z  }||z  }t        |d      }t        j
                  j                  t        j
                  j                  |            d   }|j                  d      r|dd }t               j                  j                  }|}|j                  |      r|t        |      d	z   d }|j                  j                  d
d
||rt        t        |
|z  d            nd
|d       t        |d       t        |d      }|j                         D ]@  \  }}	t        |d      }|j                  j                  t        |	      t        |             B  |j                  j                  d
d
|rt        t        ||z  d            nd
|d       ||fS c c}	w )z4Add a package element to the given packages element.rU   classesr   Tclassr0      Nr   r7   r8   )r9   r:   rT   r;   namemethodslinesline)hitsnumber)r9   r:   r;   rf   )r   rA   rD   valuesr   r   rB   r   rC   r   r>   r?   rJ   rK   rL   rM   )r6   r^   r_   elem_packageelem_classesr\   r]   r   rS   rj   r`   ra   
elem_class
class_namerR   rT   
elem_linesrk   	elem_lines                      r,   rI   rI      s   h	2LlI6LO%++- #g'..*:C$dCD	\
9$J&g6
WW%%bgg&6&6t&<=a@
  !67#BCJ#~--22|,L 1A 5 67H   BLU9z#91=>RU"
 	 	:y)
G4
#MMO 	LFD":v6I##Y6{ $ 	=#J JZS1AA1EF`c	   ,,,W Ds   G=
G=
c                      e Zd ZdZy)r   z+Configuration for the coverage xml command.N)__name__
__module____qualname____doc__ r.   r,   r   r      s    5r.   )r"   r   returnNone)rP   rL   ry   r   )r6   r   r^   rL   r_   zdict[str, dict[str, int]]ry   ztuple[int, int])!rw   
__future__r   r   rO   xml.etree.ElementTreer   r   r   r   xml.domr   ior
   r   util_commonr   r   utilr   datar   provisioningr   combiner   r    r   r-   r   rI   r   rx   r.   r,   <module>r      sb    ) " 	  



W*;|4-n6- 6r.   