
@+YA                 @   s  d  d l  Z d  d l j j Z d  d l Z d  d l m Z d  d l m	 Z	 d  d l m
 Z
 Gd d   d e  Z Gd d   d e  Z Gd	 d
   d
 e  Z Gd d   d e  Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d    Z d! d"   Z d# d$   Z d% d&   Z d' d(   Z d) d*   Z d+ d,   Z d- d.   Z  d/ d0   Z! d1 d2   Z" d3 d4   Z# d5 d6   Z$ d7 d8   Z% d9 d:   Z& d; d<   Z' d= d>   Z( d? d@   Z) dA dB   Z* dC dD   Z+ dE dF   Z, dG dH   Z- dI dJ   Z. dK dL   Z/ dM dN   Z0 dO dP   Z1 dQ dR   Z2 dS dT   Z3 dU dV   Z4 dW dX   Z5 dY dZ   Z6 d[ d\   Z7 d] d^   Z8 d S)_    N)printout)report)fstreec                   s"   e  Z d  Z   f d d   Z   S)MockDirEntryc                s)   t  t |   j   | |  _ d  |  _ d  S)N)superr   __init__namepath)selfr   )	__class__ Q/home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_report.pyr      s    	zMockDirEntry.__init__)__name__
__module____qualname__r   r   r   )r   r   r      s   r   c               @   s   e  Z d  Z d d   Z d S)MockFileDirEntryc             C   s   d S)NFr   )r
   r   r   r   is_dir#   s    zMockFileDirEntry.is_dirN)r   r   r   r   r   r   r   r   r   "   s   r   c               @   s   e  Z d  Z d d   Z d S)MockDirDirEntryc             C   s   d S)NTr   )r
   r   r   r   r   (   s    zMockDirDirEntry.is_dirN)r   r   r   r   r   r   r   r   r   '   s   r   c                   s%   e  Z d  Z i    f d d  Z   S)	MockFSDirc                s    t  t |   j   | |  _ d  S)N)r   r   r   children)r
   r   )r   r   r   r   -   s    zMockFSDir.__init__)r   r   r   r   r   r   )r   r   r   ,   s   r   c              C   s   t  j d g  }  d } |  | k } | s t j d | f d |  | f  i t j |  d 6d t j   k s| t j |   r t j |   n d d 6} d i | d	 6} t t j	 |    n  d
 } } d
 S)zFirst header has no indentationfirst==%(py0)s == %(py3)spy3outpy0 assert %(py5)spy5N)r   )r   r   )
r   render_headers
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanation)r   @py_assert2@py_assert1@py_format4@py_format6r   r   r   test_render_headers_first8   s       l   r,   c        	      C   s(  t  j d d g  }  |  j d  } | d } t  j } d } | | } | | k } | st j d | f d | | f  i d t j   k s t j t   r t j	 t   n d d 6t j	 |  d	 6t j	 |  d
 6t j	 |  d 6} d i | d 6} t
 t j |    n  d } } } } } d S)z(Second header has 1 level of indentationr   second
   r   @%(py1)s == (%(py5)s
{%(py5)s = %(py3)s.LEVEL_INDENT
} + %(py7)s)r   r   py7r   py1r   assert %(py10)spy10N)r   )r0   r3   )r   r   splitLEVEL_INDENTr    r!   r#   r$   r%   r"   r&   r'   )	r   lines@py_assert0@py_assert4@py_assert6@py_assert8r(   @py_format9@py_format11r   r   r   test_render_headers_second>   s    
 	  
      r?   c              C   sS  t  j d d d g  }  |  j d  } | d } t  j } d } | | } d } | | } | | k } | s1t j d | f d | | f  i d	 t j   k s t j t   r t j	 t   n d	 d
 6t j	 |  d 6t j	 |  d 6t j	 |  d 6t j	 |  d 6}	 d i |	 d 6}
 t
 t j |
    n  d } } } } } } } d S)z(Third header has 2 levels of indentationr   r-   thirdr.   r/      r   M%(py1)s == ((%(py5)s
{%(py5)s = %(py3)s.LEVEL_INDENT
} * %(py7)s) + %(py10)s)r   r   r1   r   r2   r4   r   assert %(py13)spy13Nr5   )r   )rB   rC   )r   r   r6   r7   r    r!   r#   r$   r%   r"   r&   r'   )r   r8   r9   r:   r;   r<   @py_assert9@py_assert11r(   @py_format12@py_format14r   r   r   test_render_headers_thirdE   s    
 	  
  
      rI   c              C   s  t  j }  d g } |  |  } t  j g } | | k } | st j d | f d | | f  i t j |  d 6d t j   k s t j t   r t j t   n d d 6t j |   d 6t j |  d 6t j |  d	 6} d i | d 6} t	 t j
 |    n  d }  } } } } d S)z.Does a single header get a single indentation?r   r   X%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.visual_indentation
}(%(py4)s)
} == %(py9)spy6r   r   py2py4py9r   assert %(py11)spy11N)r   )rJ   rO   )r   visual_indentationr7   r    r!   r"   r#   r$   r%   r&   r'   )r)   @py_assert3@py_assert5r<   @py_assert7@py_format10rG   r   r   r   test_visual_indentation1N   s    	 	        rV   c        	      C   sI  t  j }  d d d g } |  |  } t  j g } d } | | } | | k } | s't j d | f d | | f  i t j |  d 6t j |  d 6t j |  d	 6t j |  d
 6d t j   k s t j t   r t j t   n d d 6t j |   d 6} d i | d 6} t	 t j
 |    n  d }  } } } } } } d S)z2Do 3 levels of header get 3 levels of indentation?r   r-   r@      r   e%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.visual_indentation
}(%(py4)s)
} == (%(py9)s * %(py11)s)rK   rM   rN   rP   r   r   rL   r   assert %(py14)spy14N)r   )rX   rY   )r   rQ   r7   r    r!   r"   r#   r$   r%   r&   r'   )	r)   rR   rS   r<   @py_assert10@py_assert12rT   @py_format13@py_format15r   r   r   test_visual_indentation3S   s    	     
      r_   c              C   s  d g }  |  d d  } t  j t j   | d d  | |  k } | st j d | f d | |  f  i d t j   k s t j |  r t j	 |  n d d 6d	 t j   k s t j |   r t j	 |   n d	 d
 6} d i | d 6} t
 t j |    n  d } d S)z-Headers are not changed by print_error() callr   Nr-   zmy msgr   %(py0)s == %(py2)sheadersr   orig_headersrL   r   assert %(py4)srM   )r   )r`   rc   )r   print_errorr   Printerr    r!   r#   r$   r%   r"   r&   r'   )rb   ra   r)   @py_format3@py_format5r   r   r   test_print_error_headers[   s    	     rh   c       
      C   s]  t  j t j   d g d d  |  j   \ } } | j d  } t  j } d } | | } | | k } | sGt j d | f d | | f  i d t	 j
   k s t j |  r t j |  n d d 6d	 t	 j
   k s t j t   r t j t   n d	 d
 6t j |  d 6t j |  d 6} d i | d 6}	 t t j |	    n  d } } } } d S)z-The name shows up in the print_error() outputr   r-   zmy msgr.   in@(%(py2)s
{%(py2)s = %(py0)s.LEVEL_INDENT
} + %(py4)s) in %(py7)sr8   r1   r   r   rL   rM   r   assert %(py9)srN   N)ri   )rj   rk   )r   rd   r   re   
readouterrr6   r7   r    r!   r#   r$   r%   r"   r&   r'   )
capsysr   errr8   r)   rR   rS   r;   @py_format8rU   r   r   r   test_print_error_namec   s    	  
      rp   c             C   s   t  j t j   d g d d  |  j   \ } } | j d  } d } | | k } | s t j d | f d | | f  i d t j	   k s t j
 |  r t j |  n d d 6t j |  d	 6} d i | d 6} t t j |    n  d } } d S)z,The msg shows up in the print_error() outputr   r-   zmy msgr.   ri   %(py1)s in %(py3)sr8   r   r2   r   assert %(py5)sr   N)ri   )rq   rr   )r   rd   r   re   rl   r6   r    r!   r#   r$   r%   r"   r&   r'   )rm   r   rn   r8   r9   r(   r*   r+   r   r   r   test_print_error_msgl   s       l   rs   c              C   s   t  j d d d  }  t j d |   j d  } d } | | k } | s t j d | f d | | f  i d t j   k s t j	 |  r t j
 |  n d d	 6t j
 |  d
 6} d i | d 6} t t j |    n  d } } d S)z%msg shows up on match_errmsg() outputrA   pattern   zmy msgr.   ri   %(py1)s in %(py3)sr8   r   r2   r   assert %(py5)sr   N)ri   )rv   rw   )r   
PatternLocr   Zmatch_errmsgr6   r    r!   r#   r$   r%   r"   r&   r'   )patlocr8   r9   r(   r*   r+   r   r   r   test_match_errmsg_msgw   s       l   rz   c              C   s  t  j }  d g } |  |  } d } | | k } | s t j d | f d | | f  i t j |  d 6d t j   k s t j t   r t j t   n d d 6t j |   d 6t j |  d	 6t j |  d
 6} d i | d 6} t t j	 |    n  d }  } } } } d S)z)We get no suffix when given a single itemoner   r   L%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.plural
}(%(py4)s)
} == %(py9)srK   r   r   rL   rM   rN   assert %(py11)srP   N)r   )r|   r}   )
r   pluralr    r!   r"   r#   r$   r%   r&   r'   )r)   rR   rS   r<   rT   rU   rG   r   r   r   test_plural_singular   s    	 	        r   c              C   s  t  j }  d d g } |  |  } d } | | k } | s t j d | f d | | f  i t j |  d 6d t j   k s t j t   r t j t   n d d 6t j |   d	 6t j |  d
 6t j |  d 6} d i | d 6} t t j	 |    n  d }  } } } } d S)z)We get a suffix when given multiple itemsr{   twosr   L%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.plural
}(%(py4)s)
} == %(py9)srK   r   r   rL   rM   rN   r   assert %(py11)srP   N)r   )r   r   )
r   r~   r    r!   r"   r#   r$   r%   r&   r'   )r)   rR   rS   r<   rT   rU   rG   r   r   r   test_plural_plural   s    	         r   c              C   s\  t  t j d d d  g  }  t j |   } t |   } | | k } | sNt j d | f d | | f  i t j |  d 6d t	 j
   k s t j t  r t j t  n d d 6d	 t	 j
   k s t j |  r t j |  n d	 d
 6d t	 j
   k st j |   rt j |   n d d 6} d i | d 6} t t j |    n  d } } d S)zA single patloc sorts to itselfrA   pattern1   r   0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr   listr   sortedr   patlocsr2   r   assert %(py7)sr1   N)r   )r   r   )setr   rx   r   sort_patlocsr   r    r!   r"   r#   r$   r%   r&   r'   )r   r   r(   r:   r+   ro   r   r   r   test_sort_patlocs_single   s          r   c              C   s  t  t j d d d  t j d d d  t j d d d  g  }  t j |   } d d   | D } d d d g } | | k } | s t j d | f d | | f  i t j |  d 6t j |  d 6} d i | d 6} t t j	 |    n  d } } } d S)zDo patlocs sort by row?r/   r   rW   pattern3rA   pattern2c             S   s   g  |  ] } | j   q Sr   )rownum).0plr   r   r   
<listcomp>   s   	 z,test_sort_patlocs_by_row.<locals>.<listcomp>r   %(py1)s == %(py4)sr2   rM   r   assert %(py6)srK   N)r   )r   r   )
r   r   rx   r   r   r    r!   r"   r&   r'   )r   r   r9   rR   r(   rg   @py_format7r   r   r   test_sort_patlocs_by_row   s        E   r   c           	   C   s/  t  t j d d d  t j d d d  t j d d d  t j d d d  t j d d d  g  }  t j |   } d	 d
   | D } d d d d d g } | | k } | st j d | f d | | f  i t j |  d 6t j |  d 6} d i | d 6} t t j	 |    n  d } } } d S)zDo patlocs sort by row by pos?r/   r   rW   r      rA   r   r   c             S   s"   g  |  ] } | j  | j f  q Sr   )r   pos)r   r   r   r   r   r      s   	 z3test_sort_patlocs_by_row_by_pos.<locals>.<listcomp>r   %(py1)s == %(py4)sr2   rM   r   assert %(py6)srK   N)r/   r   )r/   rW   )rA   r/   )rW   rA   )rW   r   )r   )r   r   )
r   r   rx   r   r   r    r!   r"   r&   r'   )r   r   r9   rR   r(   rg   r   r   r   r   test_sort_patlocs_by_row_by_pos   s        E   r   c              C   s\  t  t j d d d  g  }  t j |   } t |   } | | k } | sNt j d | f d | | f  i t j |  d 6d t	 j
   k s t j t  r t j t  n d d 6d	 t	 j
   k s t j |  r t j |  n d	 d
 6d t	 j
   k st j |   rt j |   n d d 6} d i | d 6} t t j |    n  d } } d S)z6Sorting a single patloc uniquely by row returns itselfrA   r   r   r   0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr   r   r   r   r   r   r2   r   assert %(py7)sr1   N)r   )r   r   )r   r   rx   r   least_pos_per_rowr   r    r!   r"   r#   r$   r%   r&   r'   )r   r   r(   r:   r+   ro   r   r   r   test_least_pos_per_row_one   s          r   c           	   C   s)  t  t j d d d  t j d d d  t j d d d  t j d d d  t j d d d  g  }  t j |   } d	 d
   | D } d d d g } | | k } | st j d | f d | | f  i t j |  d 6t j |  d 6} d i | d 6} t t j	 |    n  d } } } d S)z3The result is unique by row, smallest pos is chosenr/   r   rW   r   r   rA   r   r   c             S   s"   g  |  ] } | j  | j f  q Sr   )r   r   )r   r   r   r   r   r      s   	 z/test_least_pos_per_row_many.<locals>.<listcomp>r   %(py1)s == %(py4)sr2   rM   r   assert %(py6)srK   N)r/   r   )rA   r/   )rW   rA   )r   )r   r   )
r   r   rx   r   r   r    r!   r"   r&   r'   )r   r   r9   rR   r(   rg   r   r   r   r   test_least_pos_per_row_many   s        E   r   c              C   sc  t  j }  d } t j } t j d d d  g } | |  } |  | |  } | sEd d i t j |  d 6t j |  d 6t j |  d	 6t j |  d
 6t j |  d 6d t j	   k s t j
 t   r t j t   n d d 6d t j	   k st j
 t  rt j t  n d d 6t j |   d 6} t t j |    n  d }  } } } } } d S)z/The patloc's row number shows up in the messageZ128   rt   rW   r   zassert %(py13)s
{%(py13)s = %(py2)s
{%(py2)s = %(py0)s.search
}(%(py4)s, %(py11)s
{%(py11)s = %(py7)s
{%(py7)s = %(py5)s.mismatched_rows_msg
}(%(py9)s)
})
}r1   rM   rN   rD   rP   rer   r   r   rL   N)r   searchr   Zmismatched_rows_msgr   rx   r    r"   r#   r$   r%   r&   r'   )r)   rR   r;   r<   r[   r\   rH   r   r   r   test_mismatched_rows_msg   s    	  	       r   c              C   s/  t  j }  d } d } |  | |  } d } | | k } | st j d | f d | | f  i t j |  d 6d t j   k s t j t   r t j t   n d d 6t j |  d	 6t j |  d
 6t j |  d 6t j |   d 6} d i | d 6} t t j	 |    n  d }  } } } } } d S)z Do we get the pointer we expect?r   rW   z   ^r   f%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.matched_visual_pointer
}(%(py4)s, %(py6)s)
} == %(py11)srK   r   r   rM   rP   py8rL   assert %(py13)srD   N)r   )r   r   )
r   Zmatched_visual_pointerr    r!   r"   r#   r$   r%   r&   r'   )r)   rR   rS   rT   r[   rE   rG   rH   r   r   r   test_matched_visual_pointer   s    	          r   c              C   s]  t  j d g t j d d d  t j d d d  t j d d d	  g  }  |  j } d
 } | |  } d } | | k } | sCt j d | f d | | f  i t j |  d 6d t j	   k s t j
 |   r t j |   n d d 6t j |  d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d } } } } } d S)z=Rendering 3 patlocs with different positions produces 6 linesheaderrW   r   rA      pattern4r   pattern5   r.   r   K%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} == %(py9)srK   outputr   rL   rM   rN   r   assert %(py11)srP   N)r   )r   r   )r   render_failuresr   rx   countr    r!   r"   r#   r$   r%   r&   r'   )r   r)   rR   rS   r<   rT   rU   rG   r   r   r   test_render_failures_nomerge   s    	         r   c              C   s]  t  j d g t j d d d  t j d d d  t j d d d  g  }  |  j } d	 } | |  } d } | | k } | sCt j d | f d | | f  i t j |  d 6d t j	   k s t j
 |   r t j |   n d d 6t j |  d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d } } } } } d S)z<Rendering 3 patlocks with the same position produces 4 linesr   rW   r   rA   r   r   r   r   r.   r   K%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} == %(py9)srK   r   r   rL   rM   rN   r   assert %(py11)srP   N)r   )r   r   )r   r   r   rx   r   r    r!   r"   r#   r$   r%   r&   r'   )r   r)   rR   rS   r<   rT   rU   rG   r   r   r   test_render_failures_merge   s    	         r   c              C   sq  g  }  x@ t  t j d  D]+ } |  j t j | d j |  |   q Wt j d g |   } | j d  } | d } t j	 } d } | | } | | k } | sWt
 j d | f d | | f  i d t j   k s t
 j t  r t
 j t  n d d	 6t
 j |  d
 6t
 j |  d 6t
 j |  d 6}	 d i |	 d 6}
 t t
 j |
    n  d } } } } } d S)z?Rendering more than 5 patlocs replace the overage with ellipsesr/   z
pattern{0}r   r.   z...r   @%(py1)s == (%(py5)s
{%(py5)s = %(py3)s.LEVEL_INDENT
} + %(py7)s)r   r   r1   r   r2   r   assert %(py10)sr4   Nr5   )r   )r   r   )ranger   ZMAX_FAILS_SHOWNappendr   rx   formatr   r6   r7   r    r!   r#   r$   r%   r"   r&   r'   )r   liner   r8   r9   r:   r;   r<   r(   r=   r>   r   r   r   test_render_failures_overlong   s     #
 	  
      r   c              C   s<  t  j d g d t j d d d  g  }  |  j } d } | |  } d } | | k } | s"t j d | f d | | f  i t j |  d	 6d
 t j	   k s t j
 |   r t j |   n d
 d 6t j |  d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d } } } } } d S)z%Produces a string of at least 3 linesr   r   rW   rt   rA   r.   >J%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} > %(py9)srK   r   r   rL   rM   rN   assert %(py11)srP   N)r   )r   r   )r   Zmismatch_errmsgr   rx   r   r    r!   r"   r#   r$   r%   r&   r'   )r   r)   rR   rS   r<   rT   rU   rG   r   r   r   test_mismatch_errmsg   s    $	         r   c             C   s   t  j   } t i   } t d  } t j d d d  } t j | | t   g  | | g   |  j	   \ } } | s d	 i d t
 j   k s t j |  r t j |  n d d 6} t t j |    n  d S)
zbGet an error, in the report on stdout, because the analyzer
    says the directory has no childrendirnamerW   r   r   assert %(py0)sr   r   Nr   )r   re   r   r   r   rx   r   report_dir_successr   rl   r#   r$   r    r%   r"   r&   r'   )rm   printeranalyzerdirentryry   r   rn   @py_format1r   r   r   test_report_dir_success_error   s     A r   c                s&  Gd d   d  } |     d   _    f d d   } |  j t d |  t j   } t i d d 6 } t j d d	 d
  } t j | | t	   g  d | g     j  } | sd d i d t
 j   k s t j    r t j    n d d 6t j |  d 6} t t j |    n  d } d S)z)(Try to) look at the directory's childrenc               @   s   e  Z d  Z d S)z0test_report_dir_success_recur.<locals>.NamespaceN)r   r   r   r   r   r   r   	Namespace  s   r   Fc                s   d   _  d  S)NT)called)r   r   ignoresra   r   )nsr   r   mock_dir_report  s    z6test_report_dir_success_recur.<locals>.mock_dir_report
dir_reportNrW   r   r   r   z*assert %(py2)s
{%(py2)s = %(py0)s.called
}r   r   rL   )r   setattrr   r   re   r   r   rx   r   r   r#   r$   r    r%   r"   r&   r'   )monkeypatchr   r   r   r   ry   r)   rf   r   )r   r   test_report_dir_success_recur
  s    		"	  U  r   c             C   s  t  j   } t i d d 6 } t d  } t j d d d  } t j | | g  | | g   |  j   \ } } | s d i d t	 j
   k s t j |  r t j |  n d d 6} t t j |    n  d } | | k }	 |	 szt j d |	 f d | | f  i t j |  d 6d t	 j
   k s7t j |  rFt j |  n d d 6}
 d i |
 d 6} t t j |    n  d }	 } d S)zZGet an error, in the report on stdout, because the analyzer
    says the file has childrenNrW   filenamer   r   assert %(py0)sr   r   r   %(py0)s == %(py3)sr   rn   assert %(py5)sr   r   )r   )r   r   )r   re   r   r   r   rx   r   report_file_successrl   r#   r$   r    r%   r"   r&   r'   r!   )rm   r   r   r   ry   r   rn   r   r(   r)   r*   r+   r   r   r   test_report_file_success_error   s      A    l   r   c             C   s  t  j   } t i   } t d  } t j d d d  } t j | | g  | | g   |  j   \ } } d } | | k } | st	 j
 d | f d | | f  i t	 j |  d 6d t j   k s t	 j |  r t	 j |  n d d	 6}	 d i |	 d 6}
 t t	 j |
    n  d } } d } | | k } | st	 j
 d | f d | | f  i t	 j |  d 6d t j   k st	 j |  rt	 j |  n d d	 6}	 d i |	 d 6}
 t t	 j |
    n  d } } d S)z^Get no error, in the report on stdout, because the analyzer
    finds the file has no childrenr   rW   r   r   r   %(py0)s == %(py3)sr   r   r   assert %(py5)sr   Nrn   )r   )r   r   )r   )r   r   )r   re   r   r   r   rx   r   r   rl   r    r!   r"   r#   r$   r%   r&   r'   )rm   r   r   r   ry   r   rn   r(   r)   r*   r+   r   r   r    test_report_file_success_noerror.  s(       l   
   l   r   c                s  Gd d   d  } |     d   _    f d d   } |  j t d |  Gd d   d  } |   } t j d	 d	 t   g  | t d	 g  g     j  } | sd
 d i d t j   k s t j    r t j	    n d d 6t j	 |  d 6} t
 t j |    n  d	 } d	 S)zSuccessfully report on a dirc               @   s   e  Z d  Z d S)z*test_report_success_dir.<locals>.NamespaceN)r   r   r   r   r   r   r   r   B  s   r   Fc                s   d   _  d  S)NT)r   )r   r   r   ra   r   ry   report_items)r   r   r   mock_report_dir_successH  s    z8test_report_success_dir.<locals>.mock_report_dir_successr   c               @   s   e  Z d  Z d d   Z d S)z-test_report_success_dir.<locals>.MockDirEntryc             S   s   d S)NTr   )r
   r   r   r   r   N  s    z4test_report_success_dir.<locals>.MockDirEntry.is_dirN)r   r   r   r   r   r   r   r   r   M  s   r   Nr   z*assert %(py2)s
{%(py2)s = %(py0)s.called
}r   r   rL   )r   r   r   report_successr   r#   r$   r    r%   r"   r&   r'   )r   r   r   r   r   r)   rf   r   )r   r   test_report_success_dir?  s    			+	  U  r   c                s  Gd d   d  } |     d   _    f d d   } |  j t d |  Gd d   d  } |   } t j d	 d	 t   g  | t d	 g  g     j  } | sd
 d i d t j   k s t j    r t j	    n d d 6t j	 |  d 6} t
 t j |    n  d	 } d	 S)zSuccessfully report on a filec               @   s   e  Z d  Z d S)z+test_report_success_file.<locals>.NamespaceN)r   r   r   r   r   r   r   r   Y  s   r   Fc                s   d   _  d  S)NT)r   )r   r   ra   r   ry   r   )r   r   r   mock_report_file_success_  s    z:test_report_success_file.<locals>.mock_report_file_successr   c               @   s   e  Z d  Z d d   Z d S)z.test_report_success_file.<locals>.MockDirEntryc             S   s   d S)NFr   )r
   r   r   r   r   f  s    z5test_report_success_file.<locals>.MockDirEntry.is_dirN)r   r   r   r   r   r   r   r   r   e  s   r   Nr   z*assert %(py2)s
{%(py2)s = %(py0)s.called
}r   r   rL   )r   r   r   r   r   r#   r$   r    r%   r"   r&   r'   )r   r   r   r   r   r)   rf   r   )r   r   test_report_success_fileV  s    			+	  U  r   c        	      C   s  d }  d } d } t  j } g  } | | | |   } | | k } | rt j d f | f d f | | f  i d t j   k p t j |   r t j |   n d d 6t j |  d 6t j |  d	 6d
 t j   k p t j |  r t j |  n d
 d 6d t j   k pt j t   r+t j t   n d d 6d t j   k pPt j |  rbt j |  n d d 6t j |  d 6} d d i | d 6} t t j	 |    n  d } } } } d S)z:Do we get the pointer we expect when the text is unmached?z wordsz
some wordsz    ^r   zq%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.unmatched_visual_pointer
}(%(py4)s, %(py5)s, %(py6)s)
} == %(py10)s	unmatchedrK   r   rM   vptrr4   r   r   r   r   rL   r   zassert %(py12)spy12N)
r   unmatched_visual_pointerr    r!   r#   r$   r%   r"   r&   r'   )	r   r   r   r)   rR   rT   rE   r>   r]   r   r   r   $test_unmatched_visual_pointer_stringp  s    	      8   r   c        	      C   s  d }  d } d } t  j } g  } | | | |   } | | k } | rt j d f | f d f | | f  i d t j   k p t j |   r t j |   n d d 6t j |  d 6t j |  d	 6d
 t j   k p t j |  r t j |  n d
 d 6d t j   k pt j t   r+t j t   n d d 6d t j   k pPt j |  rbt j |  n d d 6t j |  d 6} d d i | d 6} t t j	 |    n  d } } } } d S)z:Do we get the pointer we expect when the text is unmached?Tz
some wordsz          ^r   zq%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.unmatched_visual_pointer
}(%(py4)s, %(py5)s, %(py6)s)
} == %(py10)sr   rK   r   rM   r   r4   r   r   r   r   rL   r   zassert %(py12)sr   N)
r   r   r    r!   r#   r$   r%   r"   r&   r'   )	r   r   r   r)   rR   rT   rE   r>   r]   r   r   r   "test_unmatched_visual_pointer_truex  s    	      8   r   c             C   s3  t  j   } d } t |  } t j d d d  } t j | g  | | d t | g   |  j   \ } } | j	 } d } | |  }	 d }
 |	 |
 k } | sbt
 j d | f d |	 |
 f  i t
 j |	  d
 6d t j   k s t
 j |  r t
 j |  n d d 6t
 j |  d 6t
 j |  d 6t
 j |
  d 6} d i | d 6} t t
 j |    n  d } } }	 } }
 d } | | k } | s%t
 j d | f d | | f  i t
 j |  d 6d t j   k st
 j |  rt
 j |  n d d 6} d i | d 6} t t
 j |    n  d } } d S) zDeliver multi-line outputr   rW   z	file namer   Tr.   r   r   J%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} > %(py9)srK   r   r   rL   rM   rN   r   assert %(py11)srP   Nr   %(py0)s == %(py3)sr   rn   assert %(py5)sr   )r   )r   r   )r   )r   r   )r   re   r   r   rx   r   Zreport_failurer   rl   r   r    r!   r"   r#   r$   r%   r&   r'   )rm   r   Zstripped_namer   ry   r   rn   r)   rR   rS   r<   rT   rU   rG   r(   r*   r+   r   r   r   test_report_failure  s0    	            l   r   c              C   s^  d }  t  |   } t j } | |  } | |  k } | sLt j d | f d | |  f  i d t j   k s{ t j |  r t j |  n d d 6d t j   k s t j |   r t j |   n d d 6d t j   k s t j t  r t j t  n d d	 6t j |  d
 6t j |  d 6} d i | d 6} t	 t j
 |    n  d } } } d S)zDoes a dir keep its extension?zdir.namer   U%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.strip_extension
}(%(py3)s)
} == %(py7)sr   r   r   r1   r   r   r   rL   r   assert %(py9)srN   N)r   )r   r   )r   r   strip_extensionr    r!   r#   r$   r%   r"   r&   r'   )r   r   r)   r:   r;   ro   rU   r   r   r   test_strip_extension_dir  s    	       r   c              C   s;  t  d  }  t j } | |   } d } | | k } | s%t j d | f d | | f  i d t j   k s{ t j |   r t j |   n d d 6d t j   k s t j t  r t j t  n d d 6t j |  d	 6t j |  d
 6t j |  d 6} d i | d 6} t	 t j
 |    n  d } } } } d S)zDoes a file lose its extension?zfile.extfiler   U%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.strip_extension
}(%(py3)s)
} == %(py8)sr   r   r   r   r   rL   r   r   assert %(py10)sr4   N)r   )r   r   )r   r   r   r    r!   r#   r$   r%   r"   r&   r'   )r   r)   r:   rT   r;   r=   r>   r   r   r   test_strip_extension_file  s    	        r   c             C   s+  Gd d   d  } t  j   } |   } t d  } t j | | t   g  |  |  j   \ } } | j } d } | |  }	 d }
 |	 |
 k } | sZt j	 d | f d |	 |
 f  i t j
 |	  d 6d	 t j   k s t j |  r t j
 |  n d	 d
 6t j
 |  d 6t j
 |  d 6t j
 |
  d 6} d i | d 6} t t j |    n  d } } }	 } }
 d } | | k } | st j	 d | f d | | f  i t j
 |  d 6d t j   k st j |  rt j
 |  n d d
 6} d i | d 6} t t j |    n  d } } d S)z)Does a failure deliver multi-line output?c               @   s   e  Z d  Z d d   Z d S)z-test_entry_report_failure.<locals>.MockFSTreec             S   s+   t  j d d d  } d t | g  g  f S)NrW   zdir nameT)r   rx   r   )r
   r   ry   r   r   r   invalid  s    z5test_entry_report_failure.<locals>.MockFSTree.invalidN)r   r   r   r   r   r   r   r   
MockFSTree  s   r   r   r.   r   r   J%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} > %(py9)srK   r   r   rL   rM   rN   r   assert %(py11)srP   Nr   %(py0)s == %(py3)sr   rn   assert %(py5)sr   )r   )r   r   )r   )r   r   )r   re   r   r   entry_reportr   rl   r   r    r!   r"   r#   r$   r%   r&   r'   )rm   r   r   r   r   r   rn   r)   rR   rS   r<   rT   rU   rG   r(   r*   r+   r   r   r   test_entry_report_failure  s.    		            l   r   c                s  Gd d   d  } |     d   _  Gd d   d  }   f d d   } |  j t d |  |   } t d	  } t j d
 | t   g  |    j  } | s
d d i d t j   k s t j	    r t j
    n d d 6t j
 |  d 6} t t j |    n  d
 } d
 S)z5Is report_success() called when the analyzer matches?c               @   s   e  Z d  Z d S)z,test_entry_report_success.<locals>.NamespaceN)r   r   r   r   r   r   r   r     s   r   Fc               @   s(   e  Z d  Z d d   Z d d   Z d S)z-test_entry_report_success.<locals>.MockFSTreec             S   s   d t  g   g  f S)Nr   )r   )r
   r   r   r   r   r     s    z5test_entry_report_success.<locals>.MockFSTree.invalidc             S   s   d S)NTr   )r
   r   r   r   r     s    z4test_entry_report_success.<locals>.MockFSTree.is_dirN)r   r   r   r   r   r   r   r   r   r     s   r   c                s   d   _  d  S)NT)r   )r   r   r   ra   r   r   r   )r   r   r   mock_report_success  s    z6test_entry_report_success.<locals>.mock_report_successr   zfile name.extNr   z*assert %(py2)s
{%(py2)s = %(py0)s.called
}r   r   rL   )r   r   r   r   r   r   r#   r$   r    r%   r"   r&   r'   )r   r   r   r  r   r   r)   rf   r   )r   r   test_entry_report_success  s    				  U  r  c       	      C   sT  d d   } |  j  t d |  d d   } |  j  t d |  g  } | d d  } t d  } t j d d t   | |  | | k } | sJt j d | f d | | f  i d t j   k s t j	 |  r t j
 |  n d d 6d t j   k st j	 |  rt j
 |  n d d 6} d i | d 6} t t j |    n  d } d S)zHeaders don't changec             S   s
   t  g   S)N)r   )r	   r   r   r   mock_scandir  s    z-test_dir_report_headers.<locals>.mock_scandirscandirc             S   s   d  S)Nr   )r   r   r   ra   r   r   r   r   mock_entry_report  s    z2test_dir_report_headers.<locals>.mock_entry_reportr   Nr   r   %(py0)s == %(py2)sra   r   rb   rL   r   assert %(py4)srM   )r   )r  r  )r   r   r   r   r   r    r!   r#   r$   r%   r"   r&   r'   )	r   r  r  rb   ra   r   r)   rf   rg   r   r   r   test_dir_report_headers  s         r  c       
         sr  Gd d   d  } |     g    _  d d   } |  j t d |    f d d   } |  j t d |  t d	  } t j d
 d
 t   g  |    j  } d d d g } | | k } | s`t j d | f d | | f  i d t j	   k s t j
    rt j    n d d 6t j |  d 6t j |  d 6} d i | d 6}	 t t j |	    n  d
 } } } d
 S)z[report_entry() is called with the entries of the dir,

    sorted case-insensitivly by namec               @   s   e  Z d  Z d S)z*test_dir_report_entries.<locals>.NamespaceN)r   r   r   r   r   r   r   r     s   r   c             S   s%   t  t d  t d  t d  g  S)NxyzABxAbc)r   r   )r	   r   r   r   r    s    		z-test_dir_report_entries.<locals>.mock_scandirr  c                s     j  j | j  d  S)N)namesr   r   )r   r   r   ra   r   )r   r   r   r    s    z2test_dir_report_entries.<locals>.mock_entry_reportr   r   Nr  r
  r	  r   -%(py2)s
{%(py2)s = %(py0)s.names
} == %(py5)sr   r   r   rL   r   assert %(py7)sr1   )r   )r  r  )r  r   r   r   r   r   r    r!   r#   r$   r%   r"   r&   r'   )
r   r   r  r  r   r)   r:   rR   r+   ro   r   )r   r   test_dir_report_entries  s"    			    |   r  c       
         su  Gd d   d  } |     g    _  d d   } |  j t d |    f d d   } |  j t d |  t d	  } t j d
 d
 t d d g  g  |    j  } d g } | | k } | sct j d | f d | | f  i d t j	   k s t j
    rt j    n d d 6t j |  d 6t j |  d 6} d i | d 6}	 t t j |	    n  d
 } } } d
 S)zcreport_entry() is not called with ignored entries of the dir,

    sorted case-insensitivly by namec               @   s   e  Z d  Z d S)z*test_dir_report_ignores.<locals>.NamespaceN)r   r   r   r   r   r   r   r     s   r   c             S   s%   t  t d  t d  t d  g  S)Nr	  r
  r  )r   r   )r	   r   r   r   r    s    		z-test_dir_report_ignores.<locals>.mock_scandirr  c                s     j  j | j  d  S)N)r  r   r   )r   r   r   ra   r   )r   r   r   r    s    z2test_dir_report_ignores.<locals>.mock_entry_reportr   r   Nr
  r  r	  r   -%(py2)s
{%(py2)s = %(py0)s.names
} == %(py5)sr   r   r   rL   r   assert %(py7)sr1   )r   )r  r  )r  r   r   r   r   r   r    r!   r#   r$   r%   r"   r&   r'   )
r   r   r  r  r   r)   r:   rR   r+   ro   r   )r   r   test_dir_report_ignores  s"    		%	 	   |   r  c       
      C   sg  d d   } | j  t d |  t j t j   d t    |  j   \ } } d } | | k } | s t j d | f d | | f  i t j	 |  d 6d	 t
 j   k s t j |  r t j	 |  n d	 d
 6} d i | d 6} t t j |    n  d } } | scd i d t
 j   k s1t j |  r@t j	 |  n d d
 6}	 t t j |	    n  d S)z=Print a message when there's nothing in the current directoryc             S   s
   t  g   S)N)r   )r	   r   r   r   r    s    z.test_analyze_dirs_nodirs.<locals>.mock_scandirr  Nr   r   %(py0)s == %(py3)sr   rn   r   assert %(py5)sr   assert %(py0)sr   )r   )r  r  r  )r   r   analyze_dirsr   re   r   rl   r    r!   r"   r#   r$   r%   r&   r'   )
rm   r   r  r   rn   r(   r)   r*   r+   r   r   r   r   test_analyze_dirs_nodirs  s       l   
 A r  c       	         sm  Gd d   d  } |     g    _  d d   } |  j t d |    f d d   } |  j t d |  t j t j   d	 i t   d
 6   j  } d d d g } | | k } | s[t j d | f d | | f  i d t	 j
   k s t j    rt j    n d d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d	 } } } d	 S)zLreport_dir() is called with dir content sorted
    case-insentivitly by namec               @   s   e  Z d  Z d S)z+test_analyze_dirs_sorted.<locals>.NamespaceN)r   r   r   r   r   r   r   r   '  s   r   c             S   s%   t  t d  t d  t d  g  S)Nr	  r
  r  )r   r   )r	   r   r   r   r  -  s    		z.test_analyze_dirs_sorted.<locals>.mock_scandirr  c                s     j  j | j  d  S)N)r  r   r   )r   r   r   ra   r   )r   r   r   r   4  s    z1test_analyze_dirs_sorted.<locals>.mock_dir_reportr   Nignored_namesr  r
  r	  r   -%(py2)s
{%(py2)s = %(py0)s.names
} == %(py5)sr   r   r   rL   r   assert %(py7)sr1   )r   )r  r  )r  r   r   r  r   re   r   r    r!   r#   r$   r%   r"   r&   r'   )	r   r   r  r   r)   r:   rR   r+   ro   r   )r   r   test_analyze_dirs_sorted$  s     		#	    |   r  c       
      C   sg  d d   } | j  t d |  t j t j   d t    |  j   \ } } d } | | k } | s t j d | f d | | f  i t j	 |  d 6d	 t
 j   k s t j |  r t j	 |  n d	 d
 6} d i | d 6} t t j |    n  d } } | scd i d t
 j   k s1t j |  r@t j	 |  n d d
 6}	 t t j |	    n  d S)z5Print a message when a file is checked as a directoryc             S   s   t  t d  g  S)Nr   )r   r   )r	   r   r   r   r  >  s    z,test_analyze_dirs_file.<locals>.mock_scandirr  Nr   r   %(py0)s == %(py3)sr   rn   r   assert %(py5)sr   assert %(py0)sr   )r   )r  r  r  )r   r   r  r   re   r   rl   r    r!   r"   r#   r$   r%   r&   r'   )
rm   r   r  r   rn   r(   r)   r*   r+   r   r   r   r   test_analyze_dirs_file<  s       l   
 A r  )9builtinsr#   _pytest.assertion.rewrite	assertionrewriter    r   enforcerr   r   r   objectr   r   r   r   r,   r?   rI   rV   r_   rh   rp   rs   rz   r   r   r   r   r   r   r   r   r   r   r   r   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>   sd     					
	
