B
    `                  @   s   d Z ddlmZmZmZ eZddlZddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZmZ d	d
lmZmZmZmZmZmZmZmZmZmZmZ dd Zdd Z dd Z!dd Z"dd Z#dd Z$dS )zCombine code coverage files.    )absolute_importdivisionprint_functionN   )walk_compile_targetswalk_powershell_targets)read_text_file)display)
ResultTypewrite_json_filewrite_json_test_results   )enumerate_python_arcsenumerate_powershell_linesget_collection_path_regexesget_python_coverage_filesget_python_modulesget_powershell_coverage_filesinitialize_coverageCOVERAGE_OUTPUT_FILE_NAMECOVERAGE_GROUPSCoverageConfigPathCheckerc             C   s4   t | t|  }x|D ]}tjd| dd qW |S )zuPatch paths in coverage files and merge into a single file.
    :type args: CoverageConfig
    :rtype: list[str]
    zGenerated combined output: %sr   )	verbosity)$_command_coverage_combine_powershell _command_coverage_combine_pythonr	   info)argspathspath r    V/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/coverage/combine.pycommand_coverage_combine)   s    
r"   c             C   s  t | }t }t }d}t| t}t| |dd }t \}}x|D ]}	|d7 }tjd|t	||	f dd t
| |	}
|
dkrtd	|	  qBxTt|	||||D ]@\}}|
|kri ||
< ||
 }||krt ||< || | qW qBW g }| jrtj| jd
}	d}ntjtjjt}	d
}t| |}xt|D ]}
||
 }| }x4|D ],}||s`qL||t|| i qLW | jr|tdd |D  | js2|	|
 | }|| |r2| | q2W |!  t|S )z:
    :type args: CoverageConfig
    :rtype: list[str]
    r   c             S   s   t  S )N)set)
line_countr    r    r!   <lambda>C       z2_command_coverage_combine_python.<locals>.<lambda>r   z[%4d/%4d] %sr   )r   Nz%Unexpected name for coverage file: %s z=coverage.combinedc             s   s   | ]}|d  g fV  qdS )r   Nr    ).0sourcer    r    r!   	<genexpr>s   s    z3_command_coverage_combine_python.<locals>.<genexpr>)"r   r   r   _get_coverage_targetsr   _build_stub_groupsr   r	   r   lenget_coverage_groupwarningr   r#   updateexportosr   joinr
   COVERAGEr   r   sortedZCoverageData
check_pathZadd_arcslistalldictexplain
write_fileappendreport)r   Zcoveragemodulescoverage_filescountersourcesgroupscollection_search_recollection_sub_recoverage_filegroupfilenameZarcsZarc_dataoutput_filessuffixpath_checkerupdatedoutput_filer    r    r!   r   6   sX    







r   c                s  t  }dd }d}t| t}t| ||}t \}}x|D ]}|d7 }tjd|t||f dd t| |}	|	dkrt	d	|  q8xrt
|||D ]b\}
}|	|kri ||	< ||	 }|
|kri ||
< ||
 }x(| D ]\}}||d| ||< qW qW q8W g }t|  xt|D ]}	t fd
d||	  D }| jrhx,|D ]$\}}||krVq@||||< q@W | js| jrtj| j|	d }t||dd || qt|	 d }ttj||dd |tjtjj| qW    t|S )z:
    :type args: CoverageConfig
    :rtype: list[str]
    c             S   s"   i }xt | D ]}d||< qW |S )Nr   )range)linesvalliner    r    r!   _default_stub_value   s    zA_command_coverage_combine_powershell.<locals>._default_stub_valuer   r   z[%4d/%4d] %sr   )r   Nz%Unexpected name for coverage file: %sc             3   s$   | ]\}}  |r||fV  qd S )N)r6   )r(   rG   data)rJ   r    r!   r*      s    z7_command_coverage_combine_powershell.<locals>.<genexpr>z=coverage.combinedF)	formattedz-powershell)r   r+   r   r,   r   r	   r   r-   r.   r/   r   itemsgetr   r5   r9   r8   r:   r1   r2   r   r3   r   r<   r   r   r
   r4   r=   )r   r?   rQ   r@   rA   rB   rC   rD   rE   rF   rG   hitsZcoverage_dataZfile_coverageline_noZ	hit_countrH   r)   source_line_countrL   r    )rJ   r!   r      sT    



 

r   c             C   s\   g }| j s| jrXx>|ddD ]0}tj|j}tt| }|||f qW |	  |S )z`
    :type args: CoverageConfig
    :type walk_func: Func
    :rtype: list[tuple[str, int]]
    F)Zinclude_symlinks)
r8   stubr2   r   abspathr-   r   
splitlinesr<   sort)r   Z	walk_funcrA   targettarget_pathZtarget_linesr    r    r!   r+      s    r+   c                s   i }| j rg }|g}d}d}x@|D ]8\}}	|||	f ||	7 }||kr"d}g }|| q"W x<t|D ]0\}
}|svqht fdd|D |d|
d  < qhW |S )z
    :type args: CoverageConfig
    :type sources: List[tuple[str, int]]
    :type default_stub_value: Func[int]
    :rtype: dict
    i  r   c             3   s   | ]\}}| |fV  qd S )Nr    )r(   r)   r$   )default_stub_valuer    r!   r*     s   z%_build_stub_groups.<locals>.<genexpr>z
=stub-%02dr   )rY   r<   	enumerater9   )r   rA   r_   rB   Z
stub_groupZstub_groupsZstub_line_limitZstub_line_countr)   rX   Z
stub_indexr    )r_   r!   r,      s&    r,   c             C   s   t j|dd}t|dks.|d ds2dS t|d |d |d |d	 d
}t|d	 d}d}xBtD ]:}|| jkr|d||  7 }qj| j	rj|d|
|d 7 }qjW | j	r|d}|S )zQ
    :type args: CoverageConfig
    :type coverage_file: str
    :rtype: str
    =      z	coverage.Nr   r   r      )commandr]   environmentversion)rg   r'   z=%sZvarious)r2   r   basenamesplitr-   
startswithr9   r   Zgroup_byr1   rU   lstrip)r   rE   partsnamesZexport_namesrF   partr    r    r!   r.     s&    


r.   )%__doc__
__future__r   r   r   type__metaclass__r2   r]   r   r   ior   utilr	   Zutil_commonr
   r   r   r'   r   r   r   r   r   r   r   r   r   r   r   r"   r   r   r+   r,   r.   r    r    r    r!   <module>   s   4LL"