
    3g7                         d dl Z d dlZd dlmZ dZ G d de j
                        Z G d de j
                        Z G d d	e      Z G d
 de      Z	 ej                  ee	g      Z G d d      Zy)    N)utils__covered_nodes__c                   (     e Zd Z fdZ fdZ xZS )MarkerNodeTransformerc                 0    t         |           d| _        y Nr   )super__init__last_marker)self	__class__s    /home/xtuchyna/.var/app/com.visualstudio.code/data/virtualenvs/gen-test-bench-v8TMe8KL/lib/python3.12/site-packages/mutpy/coverage.pyr
   zMarkerNodeTransformer.__init__   s        c                 n    | j                   |_        | xj                   dz  c_         t        |   |      S )N   )r   markerr	   visit)r   noder   s     r   r   zMarkerNodeTransformer.visit   s0    &&Aw}T""r   )__name__
__module____qualname__r
   r   __classcell__r   s   @r   r   r   	   s    # #r   r   c                   T     e Zd Zed        Z fdZd Zd Zd Zd Z	d	dZ
d Z xZS )
AbstractCoverageNodeTransformerc                     t               N)NotImplementedErrorclss    r   get_coverable_nodesz3AbstractCoverageNodeTransformer.get_coverable_nodes   s    !##r   c                    t         |           | j                         D ]`  }d|j                  z   }t	        | |      r|t
        j                  k(  rt        | || j                         Jt        | || j                         b y )Nvisit_)
r	   r
   r!   r   hasattrastExceptHandlersetattrinject_inside_visitinject_before_visit)r   
node_classvisit_method_namer   s      r   r
   z(AbstractCoverageNodeTransformer.__init__   sq    224J (:+>+> >4!23!2!22D"3T5M5MND"3T5M5MN 5r   c                 t    | j                  |      }| j                  |      r|S | j                  |      }||gS r   )generic_visitis_future_statementgenerate_coverage_noder   r   coverage_nodes      r   r)   z3AbstractCoverageNodeTransformer.inject_before_visit%   s@    !!$'##D)K33D9t$$r   c                     | j                  |      }| j                  |      }|j                  j                  d|       |S r   )r-   r/   bodyinsertr0   s      r   r(   z3AbstractCoverageNodeTransformer.inject_inside_visit,   s;    !!$'33D9		M*r   c                 &   t        |d      r| j                  |      }n| j                  |      }t        j                  dj                  t        t        |                  j                  d   }|j                  |_	        |j                  |_
        |S )Nr3   z{}.update({})r   )r$   get_markers_from_body_nodeget_included_markersr   
create_astformatCOVERAGE_SET_NAMEreprr3   lineno
col_offset)r   r   markersr1   s       r   r/   z6AbstractCoverageNodeTransformer.generate_coverage_node2   s{    4 55d;G//5G(()?)?@QSWX_S`)abgghij#{{#'?? r   c                 X    t        |t        j                        xr |j                  dk(  S )N
__future__)
isinstancer%   
ImportFrommoduler   r   s     r   r.   z3AbstractCoverageNodeTransformer.is_future_statement<   s!    $/ODKK<4OOr   c                     t        j                  |      D ch c]  }t        |d      s|j                   }}|r'|D ]"  }|j	                  | j                  |             $ |S c c}w )Nr   )r%   walkr$   r   difference_updater7   )r   r   withoutnr>   s        r   r7   z4AbstractCoverageNodeTransformer.get_included_markers?   s\    %(XXd^L^wq(7K188^L))$*C*CA*FG 	 Ms
   A%A%c                    t        |t        j                  t        j                  f      r)|j                  h| j                  |j                        z  S t        |t        j                        rE|j                  h| j                  |j                        z  | j                  |j                        z  S t        |t        j                  t        j                  f      r| j                  ||j                        S |j                  hS )N)rH   )rA   r%   IfWhiler   r7   testFortargetiterFunctionDefClassDefr3   rD   s     r   r6   z:AbstractCoverageNodeTransformer.get_markers_from_body_nodeF   s    dSVVSYY/0KK=4#<#<TYY#GGGcgg&KK=4#<#<T[[#IIDLeLefjfofoLppps=>,,T499,EEKK= r   r   )r   r   r   classmethodr!   r
   r)   r(   r/   r.   r7   r6   r   r   s   @r   r   r      s:    $ $O%P!r   r   c                        e Zd ZdZed        Zy)CoverageNodeTransformerPython32)      c                    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  t         j,                  hS r   )r%   AssertAssign	AugAssignBreakContinueDeleteExprGlobalImportrB   NonlocalPassRaiseReturnrQ   rR   	TryExcept
TryFinallyr&   rK   rN   rL   r   s    r   r!   z3CoverageNodeTransformerPython32.get_coverable_nodesT   s     JJJJMMIILLJJHHJJJJNNLLHHIIJJOOLLMMNNFFGGII-
 	
r   Nr   r   r   __python_version__rS   r!    r   r   rU   rU   Q   s    
 
r   rU   c                        e Zd ZdZed        Zy)CoverageNodeTransformerPython33)rV   rV   c                 |   t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  hS r   )r%   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rB   rb   rc   rd   re   rR   rQ   Tryr&   rK   rN   rL   r   s    r   r!   z3CoverageNodeTransformerPython33.get_coverable_nodess   s     JJJJMMIILLJJHHJJJJNNLLHHIIJJLLOOGGFFGGII+
 	
r   Nrh   rj   r   r   rl   rl   p   s    
 
r   rl   c                   &    e Zd Zd ZddZd Zd Zy)CoverageInjectorc                 "    t               | _        y r   )setcovered_nodesr   s    r   r
   zCoverageInjector.__init__   s     Ur   c                    | j                   j                          t               | _        | j                  j	                  |      }t               j	                  t        j                  |            }| j                   j                  |j                         t        j                         5  t        j                  ||t        | j                   i      cd d d        S # 1 sw Y   y xY w)N)ast_nodemodule_namemodule_dict)rs   clearr   marker_transformerr   CoverageNodeTransformercopydeepcopyaddr   r   StdoutManagercreate_moduler:   )r   r   rw   marker_noder1   s        r   injectzCoverageInjector.inject   s      ""7"9--33D9/177k8RS}334  "&&&'.0B0BC #""s   *(CC%c                 2    |j                   | j                  v S r   )r   rs   )r   
child_nodes     r   
is_coveredzCoverageInjector.is_covered   s      D$6$666r   c                 X    t        | j                        | j                  j                  fS r   )lenrs   rz   r   rt   s    r   
get_resultzCoverageInjector.get_result   s$    4%%&(?(?(K(KKKr   N)coverage)r   r   r   r
   r   r   r   rj   r   r   rp   rp      s    #7Lr   rp   )r%   r|   mutpyr   r:   NodeTransformerr   r   rU   rl   get_by_python_versionr{   rp   rj   r   r   <module>r      s    
  ' 	#C// 	#9!c&9&9 9!x
&E 
>
&E 
< 6%55##7  L Lr   