B
    `                 @   s   d Z ddlmZmZmZ eZddlZddl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G dd deZdS )z'Generate console code coverage reports.    )absolute_importdivisionprint_functionN   )read_json_file)display)data_context   )command_coverage_combine)run_coverageCoverageConfigc          	   C   s   t | }x|D ]}| js| jrHtddtj|	ddd   |
drdtt| | qg }| jrx|d | jr|d| jg | jr|d	| jg t| |d
| qW dS )z*
    :type args: CoverageReportConfig
    z>>> Coverage Group: %s =r	   Nz-powershellz--show-missingz	--includez--omitreport)r
   Zgroup_byZstubr   infojoinospathbasenamesplitendswith"_generate_powershell_output_reportshow_missingappendincludeextendomitr   )argsZoutput_filesZoutput_fileoptions r   U/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/coverage/report.pycommand_coverage_report   s    
*

r!   c          	      s  t |}t jjd }ddg }d}d}xt| D ]}|| }||rb|t|d } jrt| jkrtq: j	r| j	krq:t|}	tdd |
 D }
tt|d ||	7 }||
7 }d	t|	|
 |	 d
 }g }d}tdd | D }xt|D ]\}}|t| }|dkr6|dkr6|}nP|dkr|dk	r||d  }||krp|t| n|d||f  d}qW |dk	r|d }||kr|t| n|d||f  |||	|
||d q:W |dkrdS d	t|| | d
 }tdtt|tdtt|   }dd d d } jr|dd7 }|d7 }d| } fdd|D }dt| t| | }d||d||}|S )zW
    :type args: CoverageReportConfig
    :type coverage_file: str
    :rtype: str
    /      r   Nc             S   s   g | ]}|d kr|qS )r   r   ).0cr   r   r    
<listcomp>U   s    z6_generate_powershell_output_report.<locals>.<listcomp>   z{0}%d   c             S   s   g | ]}t |qS r   )int)r%   xr   r   r    r'   `   s    r	   z%s-%s)namestmtsmisscovermissing NameZStmtsZMissZCoverzLines Missing   -c                sf   g | ]^}d |d  t|d t|d |d  jrZdd|d  ndf qS )	z
%s%s%s%s%sr-   r.   r/   r0   z   z, r1   r2   )ljuststrrjustr   r   )r%   f)r   cover_paddingmiss_paddingname_paddingstmts_paddingr   r    r'      s   ZTOTALz{0}
{1}
{2}
{1}
{3}
)r   r   contentrootsortedkeys
startswithlenr   r   valuesmaxformatr*   	enumerater7   r   r6   r8   r   r   )r   Zcoverage_fileZcoverage_info	root_pathZfile_reportZtotal_stmtsZ
total_missfilenameZhit_infor.   r/   r0   r1   Zcurrent_missingZsorted_linesidxlinehitZend_lineZtotal_percentZline_lengthheaderZ
line_breaklinesZtotalsr   r   )r   r:   r;   r<   r=   r    r   8   sr    





0r   c                   s    e Zd ZdZ fddZ  ZS )CoverageReportConfigz.Configuration for the coverage report command.c                s,   t t| | |j| _|j| _|j| _dS )z!
        :type args: any
        N)superrP   __init__r   r   r   )selfr   )	__class__r   r    rR      s    zCoverageReportConfig.__init__)__name__
__module____qualname____doc__rR   __classcell__r   r   )rT   r    rP      s   rP   )rX   
__future__r   r   r   type__metaclass__r   ior   utilr   datar   combiner
   r2   r   r   r!   r   rP   r   r   r   r    <module>   s   Z