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mZmZmZmZmZmZ ddlmZmZmZmZ e
jrddlmZmZm Z  G dd deZ!dd Z"dd Z#dd Z$dddZ%dd Z&dd Z'dS )zmAnalyze code coverage data to determine which integration test targets provide coverage for each arc or line.    )absolute_importdivisionprint_functionN   )types)to_text)data_context)
ResultType   )enumerate_powershell_linesenumerate_python_arcsget_collection_path_regexesget_powershell_coverage_filesget_python_coverage_filesget_python_modulesinitialize_coveragePathChecker   )CoverageAnalyzeTargetsConfigget_target_indexmake_reportwrite_report)ArcsLinesTargetIndexesc                   s    e Zd ZdZ fddZ  ZS )$CoverageAnalyzeTargetsGenerateConfigzBConfiguration for the `coverage analyze targets generate` command.c                s,   t t| | |jptjj| _|j| _d S )N)superr   __init__	input_dirr	   ZCOVERAGEpathoutput_file)selfargs)	__class__ g/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/coverage/analyze/targets/generate.pyr   1   s    z-CoverageAnalyzeTargetsGenerateConfig.__init__)__name__
__module____qualname____doc__r   __classcell__r$   r$   )r#   r%   r   /   s   r   c                st   t  jj i }t fddt| | j| D }t fddt| | j| D }t|||}t	| || j
 dS )zmAnalyze code coverage data to determine which integration test targets provide coverage for each arc or line.c             3   s$   | ]\}}t j| |fV  qd S )N)osr   relpath).0r   data)rootr$   r%   	<genexpr><   s    z<command_coverage_analyze_targets_generate.<locals>.<genexpr>c             3   s$   | ]\}}t j| |fV  qd S )N)r+   r   r,   )r-   r   r.   )r/   r$   r%   r0   =   s    N)r   contentr/   dictanalyze_python_coverager   itemsanalyze_powershell_coverager   r   r    )r"   target_indexesarcslinesreportr$   )r/   r%   )command_coverage_analyze_targets_generate8   s    
$$r:   c             C   s   i }t  \}}t }t|}t| }xx|D ]p}	t|	s8q*t|	}
t|
|}xNt|	||||D ]:\}}||i }x$|D ]}||t	 }|
| qvW q\W q*W t| ||d |S )zAnalyze Python code coverage.)collection_search_re)r   r   r   r   is_integration_coverage_fileget_target_namer   r   
setdefaultsetaddprune_invalid_filenames)r"   r   r6   resultsr;   collection_sub_remodulesZpython_filesZcoverageZpython_filetarget_nametarget_indexfilenameZcovered_arcsr7   Zcovered_arcZarcr$   r$   r%   r3   B   s"    



r3   c             C   s   i }t  \}}t|}xt|D ]l}t|s*qt|}t||}	xJt|||D ]:\}
}||
i }x$|D ]}||t }||	 qdW qJW qW t	| | |S )z Analyze PowerShell code coverage)
r   r   r<   r=   r   r   r>   r?   r@   rA   )r"   r   r6   rB   r;   rC   Zpowershell_filesZpowershell_filerE   rF   rG   hitsr8   Zcovered_lineliner$   r$   r%   r5   a   s    




r5   c             C   s4   t | |}x$t| D ]}||s||= qW dS )z3Remove invalid filenames from the given result set.N)r   listkeys
check_path)r"   rB   r;   Zpath_checkerr   r$   r$   r%   rA   ~   s    

rA   c             C   s   t tj| dd S )z:Extract the test target name from the given coverage path.=r   )r   r+   r   basenamesplit)r   r$   r$   r%   r=      s    r=   c             C   s   t j| dd dkS )zOReturns True if the coverage file came from integration tests, otherwise False.rM   r   )Zintegrationzwindows-integrationznetwork-integration)r+   r   rN   rO   )r   r$   r$   r%   r<      s    r<   )N)(r)   
__future__r   r   r   type__metaclass__r+    r   tencodingr   r.   r   Zutil_commonr	   r   r   r   r   r   r   r   r   r   r   r   r   TYPE_CHECKINGr   r   r   r   r:   r3   r5   rA   r=   r<   r$   r$   r$   r%   <module>   s$   (	
 

