
>X5                 @   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
 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' 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   Z/ dO dP   Z0 dQ dR   Z1 dS dT   Z2 dU dV   Z3 dW dX   Z4 dY dZ   Z5 d[ d\   Z6 e j7 j8 Z8 d] d^   Z9 d_ d`   Z: da db   Z; dc dd   Z< de df   Z= dg dh   Z> di dj   Z? dk dl   Z@ d S)m    N)
rules_yacc)parse_rules)	scan_itemc             C   s  |  |  } t  |  g  f } | | k } | st j d | f d | | f  i t j |  d 6t j |  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)N!=0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} != %(py6)spy3py6	matchfuncpy0datapy1 assert %(py8)spy8)r   )r   r   )	len
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanation)r	   r   @py_assert2@py_assert5@py_assert4@py_format7@py_format9 r   T/home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_scan_item.py	not_match   s           r    c             C   s  |  |  } t  |  g  f } | | k } | st j d | f d | | f  i t j |  d 6t j |  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)N==0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   r   r	   r
   r   r   r   assert %(py8)sr   )r!   )r"   r#   )	r   r   r   r   r   r   r   r   r   )r	   r   r   r   r   r   r   r   r   r   
does_match   s           r$   c              C   se  i d t  j d d  6}  t  j } d } d } | | |  } | |  k } | sK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	 6d
 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%Can a ScanItem be used as a hashable?barfoor   inX%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.ScanItem
}(%(py4)s, %(py6)s)
} in %(py10)sr   r   r
   py4dctpy10r   py2r   assert %(py12)spy12N)r'   )r(   r-   )
r   ScanItemr   r   r   r   r   r   r   r   )r*   @py_assert1@py_assert3r   @py_assert7@py_assert9@py_format11@py_format13r   r   r   test_scanitem_hashable'   s    	         r6   c            
   C   s3   t  j t   t j d d  j d  Wd  QXd  S)Nr&   r   r%   )pytestraisesNotImplementedErrorr   r/   matchesr   r   r   r   test_scanitem_match-   s    r;   c        	      C   s  i d t  j d d d  6}  t  j } d } d } d } | | | |  } | |  k } | sg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
 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%Can a ScanItem be used as a hashable?Zbazr&   r   r%   r'   i%(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.ValuedScanItem
}(%(py4)s, %(py6)s, %(py8)s)
} in %(py12)sr   r   r
   r)   r*   r.   r+   r   r,   r   assert %(py14)spy14N)r'   )r<   r=   )
r   ValuedScanItemr   r   r   r   r   r   r   r   )	r*   r0   r1   r   r2   r3   @py_assert11r5   @py_format15r   r   r   test_valuedscanitem_hashable3   s    	          rB   c              C   s)   t  j d  }  d } t |  j |  d S)z$Does the match match a valid string?r   zSome-99 StringN)r   UserStrScanItemr$   r:   )itemr   r   r   r   test_userstrscanitem_matches:   s    rE   c        
      C   sx  t  j d  }  d } |  j } d } | | } | |  } t |  g  f } | | k } | sZ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	 6d
 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)Does the match stop after a valid string?r   zSome-99 Stringz - more Textr!   Z%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.matches
}((%(py3)s + %(py5)s))
} == %(py11)sr   r   r   py11rD   r
   py5r,   r   assert %(py13)spy13N)r!   )rF   rI   )r   rC   r:   r   r   r   r   r   r   r   r   r   )
rD   r   r0   r   @py_assert6r2   @py_assert10r3   @py_format12@py_format14r   r   r   test_userstrscanitem_stopsA   s    	  
        rO   c              C   s  t  j }  d } d } d } |  | | |  } t  j } d } d } | | |  } | | k }	 |	 rt j d f |	 f d f | | f  i t j |  d 6t j |  d 6d t j   k p t j t   r t j t   n d d	 6t j |  d
 6d t j   k pt j t   r"t j t   n d d 6t j |  d 6t j |  d 6t j |  d 6t j |  d 6t j |   d 6t j |  d 6}
 d d i |
 d 6} t	 t j
 |    n  d }  } } } } }	 } } } } d S)zWA SpecialUserStrScanItem compares different from a UserStrScanItem
    of the same type   z	<element>z value r   z%(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.SpecialUserStrScanItem
}(%(py4)s, %(py6)s, %(py8)s)
} != %(py20)s
{%(py20)s = %(py14)s
{%(py14)s = %(py12)s.UserStrScanItem
}(%(py16)s, %(py18)s)
}py16r   r   r
   r)   r.   py20r+   py18r   r,   r>   r   zassert %(py22)spy22N)r   SpecialUserStrScanItemrC   r   r   r   r   r   r   r   r   )r0   r1   r   r2   r3   @py_assert13@py_assert15@py_assert17@py_assert19r@   @py_format21@py_format23r   r   r   &test_specialuserstrscanitem_notspecialI   s     	     	       *   r\   c              C   s  t  j }  d } d } d } |  | | |  } t  j } d } d } d } | | | |  }	 | |	 k }
 |
 rt j d f |
 f d f | |	 f  i t j |  d 6t j |  d 6d	 t j   k p t j t   r t j t   n d	 d
 6t j |  d 6t j |  d 6t j |	  d 6t j |  d 6t j |  d 6t j |  d 6d	 t j   k pit j t   r{t j t   n d	 d 6t j |   d 6t j |  d 6} d d i | d 6} t t j	 |    n  d }  } } } } }
 } } } } }	 d S)zR2 objects compare different when the strings following the <user_item>
    differsrP   z	<element>z value0 z value1 r   z%(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.SpecialUserStrScanItem
}(%(py4)s, %(py6)s, %(py8)s)
} != %(py22)s
{%(py22)s = %(py14)s
{%(py14)s = %(py12)s.SpecialUserStrScanItem
}(%(py16)s, %(py18)s, %(py20)s)
}rQ   rS   r   r.   r   r   rT   r)   r+   rR   r
   r,   r>   r   zassert %(py24)spy24N)
r   rU   r   r   r   r   r   r   r   r   )r0   r1   r   r2   r3   rV   rW   rX   rY   @py_assert21r@   r[   @py_format25r   r   r   %test_specialuserstrscanitem_differentP   s"    	     	        :   r`   c              C   s  t  j }  d } d } d } |  | | |  } t  j } d } d } d } | | | |  }	 | |	 k }
 |
 rt j d f |
 f d f | |	 f  i t j |  d 6t j |  d 6d t j   k p t j t   r t j t   n d d	 6t j |  d
 6t j |  d 6t j |	  d 6t j |  d 6t j |  d 6t j |  d 6d t j   k pit j t   r{t j t   n d d 6t j |   d 6t j |  d 6} d d i | d 6} t t j	 |    n  d }  } } } } }
 } } } } }	 d S)zS2 objects compare equal when the strings followig the <user_item>
    do not differrP   z	<element>z value r!   z%(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.SpecialUserStrScanItem
}(%(py4)s, %(py6)s, %(py8)s)
} == %(py22)s
{%(py22)s = %(py14)s
{%(py14)s = %(py12)s.SpecialUserStrScanItem
}(%(py16)s, %(py18)s, %(py20)s)
}rQ   rS   r   r.   r   r   rT   r)   r+   rR   r
   r,   r>   r   zassert %(py24)sr]   N)
r   rU   r   r   r   r   r   r   r   r   )r0   r1   r   r2   r3   rV   rW   rX   rY   r^   r@   r[   r_   r   r   r    test_specialuserstrscanitem_sameW   s"    	     	        :   ra   c        
      C   s~  t  j d d d  }  d } |  j } d } | | } | |  } t |  g  f } | | 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 6d 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>Comparison works when there's a trailing string where expectedrP   z	<element>z value zSome Element or Anotherz value and morer!   Z%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.matches
}((%(py3)s + %(py5)s))
} == %(py11)sr   r   r   rG   rD   r
   rH   r,   r   assert %(py13)srJ   N)r!   )rb   rc   )r   rU   r:   r   r   r   r   r   r   r   r   r   )
rD   r   r0   r   rK   r2   rL   r3   rM   rN   r   r   r   )test_specialuserstrscanitem_trail_succeed^   s    	  
        rd   c              C   s/   t  j d d d  }  d } t |  j |  d S)z0Comparison works when there's no trailing stringrP   z	<element>z value zSome Element or AnotherN)r   rU   r$   r:   )rD   r   r   r   r   +test_specialuserstrscanitem_notrail_succeede   s    re   c              C   s  t  j d d d  }  d } |  j | d  } t |  g  f } | | 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 } d } t |  }	 | |	 k } | st j d | f d | |	 f  i d t j   k sat j	 t  rp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)zBComparison fails when there's a trailing string where not expectedrP   z	<element>z value zSome random value or Anotherz value and morer   %(py0)s != %(py3)sr   resultr
   r   assert %(py5)srH   Nr   zSome randomr!   0%(py1)s == %(py7)s
{%(py7)s = %(py3)s(%(py5)s)
}r   py7r   assert %(py9)spy9)r   )rf   rh   )r!   )ri   rk   )r   rU   r:   r   r   r   r   r   r   r   r   r   )rD   r   rg   r   r0   @py_format4@py_format6@py_assert0r   rK   @py_format8@py_format10r   r   r   &test_specialuserstrscanitem_trail_faill   s&       l   

        rr   c              C   sH  t  j d d d  }  t  j d d d  } t |   } t |   } | | k } | rt j d f | f d f | | f  i t j |  d 6d t j   k p t j |   r t j |   n d d	 6t j |  d
 6d t j   k p t j t  rt j t  n d d 6d t j   k p(t j t  r:t j t  n d d 6d t j   k p_t j |   rqt j |   n d d 6} d d i | d 6} t	 t j
 |    n  d } } } t |   } t |  } | | k } | r6t j d f | f d f | | f  i t j |  d 6d t j   k p7t j |  rIt j |  n d d	 6t j |  d
 6d t j   k p~t j t  rt j t  n d d 6d t j   k pt j t  rt j t  n d d 6d t j   k pt j |   rt j |   n d d 6} d d i | d 6} t	 t j
 |    n  d } } } d S)z1The hash function works with special user stringsrP   z	<element>z value0 z value1 r!   zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}r   item0r   r   hashr
   rH   r   r   zassert %(py10)sr+   Nr   zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} != %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}item1)r   rU   rt   r   r   r   r   r   r   r   r   )rs   ru   r   r2   r   r   r4   r   r   r    test_specialuserstrscanitem_hashu   s(         (        (   rv   c              C   s)   t  j d  }  d } t |  j |  d S)zA hash scan item matches digitsr   2340N)r   HashScanItemr$   r:   )rD   r   r   r   r   test_hashscanitem_matches~   s    ry   c              C   s)   t  j d  }  d } t |  j |  d S)z2A hash scan item matches digits with leading zerosr   Z02340N)r   rx   r$   r:   )rD   r   r   r   r   "test_hashscanitem_matches_leading0   s    rz   c              C   s)   t  j d  }  d } t |  j |  d S)z2A hash scan item does not match digits and lettersr   Z02a340N)r   rx   r    r:   )rD   r   r   r   r   test_hashscanitem_fails   s    r{   c              C   s)   t  j d  }  d } t |  j |  d S)z*An entity matches a reasonable entity namer   zSome EntityN)r   EntityScanItemr$   r:   )rD   r   r   r   r   test_entity_scan_item   s    r}   c              C   s)   t  j d  }  d } t |  j |  d S)z%A date scan item matches a valid dater   z
2017-01-01N)r   DateScanItemr$   r:   )rD   r   r   r   r   $test_date_scan_item_matches_gooddate   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z(A date scan item matches an invalid dater   z
0000-00-00N)r   r~   r$   r:   )rD   r   r   r   r   #test_date_scan_item_matches_baddate   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z,A date scan item does not match a short dater   z2017-1-1N)r   r~   r    r:   )rD   r   r   r   r   "test_date_scan_item_mismatch_short   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z4A date scan item does not match non-date-like stringr   z2017-sandwitch-1N)r   r~   r    r:   )rD   r   r   r   r   $test_date_scan_item_mismatch_letters   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z$A year scan item matches a good yearr   Z2017N)r   YearScanItemr$   r:   )rD   r   r   r   r   test_year_scan_item_match_good   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z#A year scan item matches a bad yearr   Z0017N)r   r   r$   r:   )rD   r   r   r   r   test_year_scan_item_match_bad   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z+A year scan item does not match alpha charsr   Z20a17N)r   r   r    r:   )rD   r   r   r   r   "test_year_scan_item_mismatch_alphs   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)zA hash scan item matches digitsr   rw   N)r   Last4DigitsScanItemr$   r:   )rD   r   r   r   r    test_last4digitsscanitem_matches   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z2A hash scan item matches digits with leading zerosr   Z0234N)r   r   r$   r:   )rD   r   r   r   r   )test_last4digitsscanitem_matches_leading0   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z2A hash scan item does not match digits and lettersr   Z2a340N)r   r   r    r:   )rD   r   r   r   r   test_last4digitsscanitem_fails   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)zA version number matchesr   z v10N)r   VersionScanItemr$   r:   )rD   r   r   r   r   test_versionscanitem_matches   s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z A version with a leading 0 failsr   z v01N)r   r   r    r:   )rD   r   r   r   r   #test_versionscanitem_fails_leading0   s    r   c              C   s,   t  j d d  }  d } t |  j |  d S)z2A parenthetical with no optional user text matchesr   z (some parenthetical)N)r   ParenScanItemr$   r:   )rD   r   r   r   r    test_parenscanitem_matches_plain   s    r   c        	      C   sd  t  j d d  }  d } d | d } |  j } | |  } t |  | g f } | | k } | sN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 6t j	 |  d 6t j	 |  d 6t j	 |  d 6} d i | d 6} t
 t j |    n  d } } } } d S)ziA parenthetical with valid optional user text matches and returns
    the expected content to be reportedr   z (some parenthetical)zsome parenthetical; Extra Stuffz ()r!   M%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.matches
}(%(py3)s)
} == %(py8)sr   r   rD   r
   rH   r,   r   r   assert %(py10)sr+   N)r!   )r   r   )r   r   r:   r   r   r   r   r   r   r   r   r   )	rD   contentr   r0   r   r2   rK   r   r4   r   r   r    test_parenscanitem_matches_extra   s    	        r   c              C   s,   t  j d d  }  d } t |  j |  d S)z5A parenthetical with different content fails to matchr   z (some parenthetical)z (some other parenthetical)N)r   r   r    r:   )rD   r   r   r   r   !test_parenscanitem_nomatch_differ  s    r   c              C   s,   t  j d d  }  d } t |  j |  d S)z>A parenthetical with invalid optional user text does not matchr   z (some parenthetical)z (some parenthetical; ===)N)r   r   r    r:   )rD   r   r   r   r    test_parenscanitem_nomatch_extra  s    r   c              C   s,   t  j d d  }  d } t |  j |  d S)z.A parenthetical does not match non-parenthesisr   z (some parenthetical)z some parentheticalN)r   r   r    r:   )rD   r   r   r   r   #test_parenscanitem_nomatch_notparen  s    r   c        	      C   sa  t  j d  }  d } d | d } |  j } | |  } t |  | g f } | | k } | sK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
 6t j	 |  d 6t j	 |  d 6t j	 |  d 6} d i | d 6} t
 t j |    n  d } } } } d S)z:A repeated parens scan item matches a single parentheticalr   zsome text and morez (r   r!   M%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.matches
}(%(py3)s)
} == %(py8)sr   r   rD   r
   rH   r,   r   r   assert %(py10)sr+   N)r!   )r   r   )r   RepeatedParensScanItemr:   r   r   r   r   r   r   r   r   r   )	rD   r   r   r0   r   r2   rK   r   r4   r   r   r   $test_repeatedparensscanitem_matches1  s    	        r   c        
      C   sr  t  j d  }  d } d } d | d | d } |  j } | |  } t |  | | g f } | | 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 6t j	 |  d 6t j	 |  d 6t j	 |  d 6} d i | d 6}	 t
 t j |	    n  d } } } } d S)z6A repeated parens scan item matches two parentheticalsr   zsome text and morezanother parentheticalz (z) (r   r!   M%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.matches
}(%(py3)s)
} == %(py8)sr   r   rD   r
   rH   r,   r   r   assert %(py10)sr+   N)r!   )r   r   )r   r   r:   r   r   r   r   r   r   r   r   r   )
rD   content1content2r   r0   r   r2   rK   r   r4   r   r   r   $test_repeatedparensscanitem_matches2"  s    	        r   c              C   s)   t  j d  }  d } t |  j |  d S)z3A repeated parens scan item fails on trailing charsr   z (some text; and more) N)r   r   r    r:   )rD   r   r   r   r   *test_repeatedparensscanitem_fails_trailing+  s    r   c              C   s)   t  j d  }  d } t |  j |  d S)zBA repeated parens scan item fails when parenthetical is not closedr   z (some text; and more N)r   r   r    r:   )rD   r   r   r   r   +test_repeatedparensscanitem_fails_notclosed2  s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z9A repeated parens scan item fails without a leading spacer   z(some text; and more)N)r   r   r    r:   )rD   r   r   r   r   0test_repeatedparensscanitem_fails_noleadingspace9  s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z?A repeated parens scan item fails when space follows open parenr   z( some text; and more)N)r   r   r    r:   )rD   r   r   r   r   +test_repeatedparensscanitem_fails_openspace@  s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z>A repeated parens scan item fails when space leads close parenr   z(some text; and more )N)r   r   r    r:   )rD   r   r   r   r   ,test_repeatedparensscanitem_fails_closespaceG  s    r   c              C   s)   t  j d  }  d } t |  j |  d S)z,A repeated parens scan item fails when emptyr   z()N)r   r   r    r:   )rD   r   r   r   r   +test_repeatedparensscanitem_fails_nocontentN  s    r   c           	   C   s9   t  j d g   }  t j t   |  j d  Wd QXd S)z5Trying to match an optional scan item raises an errorr   ZanythingN)r   OptionalScanItemr7   r8   r9   r:   )rD   r   r   r   $test_optionalscanitem_does_not_matchV  s    r   c        	      C   sW  d }  d } d |  d | d } t  j } | |  } |  | g } | | k } | sA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Returns what's expectedzsome text and morezanother parentheticalz (z) (r   r!   \%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.repeated_paren_content
}(%(py3)s)
} == %(py8)sr   r   r   r
   rH   r,   r   r   assert %(py10)sr+   N)r!   )r   r   )
r   repeated_paren_contentr   r   r   r   r   r   r   r   )	r   r   r   r0   r   r2   rK   r   r4   r   r   r   test_repeated_paren_contenth  s    	        r   c              C   s   t  j d g d  }  |  j } d } | | k } | s t j d | f d | | f  i d t j   k sx 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)zpTest that a scan item list of one item produces a
    specialuserstrscanitem with an empty string for a next_struser_str
<anything>r   r   r!   0%(py2)s
{%(py2)s = %(py0)s.next_str
} == %(py5)srD   r
   rH   r,   assert %(py7)srj   N)zuser_strr   )r!   )r   r   )r   scan_to_specialuserstrscanitemnext_strr   r   r   r   r   r   r   r   )rD   r0   r   r1   rn   rp   r   r   r   #test_scan_to_specialuserstrscanitemq  s    	    |   r   c              C   s  t  j d g d  }  t |   } d } | | k } | st j d | f d | | f  i t 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 |   r t j |   n d d 6} d i | d 6} t	 t j
 |    n  d } } } |  d } | j } 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 6t j |  d 6}	 d i |	 d 6}
 t	 t j
 |
    n  d } } } | j } d } | | k } | st j d  | f d! | | f  i d t j   k sdt j |  rst j |  n d d
 6t j |  d 6t j |  d 6}	 d" i |	 d 6}
 t	 t j
 |
    n  d } } } d S)#z1Does an entity tuple produce an entity scan item?entitySome EntityrP      r!   0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   r   r   r
   itemsr   r   assert %(py8)sr   Nr   ,%(py2)s
{%(py2)s = %(py0)s.type
} == %(py5)srD   rH   r,   assert %(py7)srj   +%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)s)zentityr   )r!   )r   r   )r!   )r   r   )r!   )r   r   )r   tuple_to_itemsr   r   r   r   r   r   r   r   r   typepos)r   r   r   r   r   r   rD   r0   r1   rn   rp   r   r   r   test_tuple_to_items_entity~  s4           
	    |   	    |   r   c            
   C   s-   t  j t   t j d g d  Wd QXd S)z2Do we get an exception when supplying a bad tuple?unknowntype	somevaluerP   N)r   r   )r7   r8   
ValueErrorr   r   r   r   r   r   test_tuple_to_items_badtuple  s    r   c              C   s   t  j j d  }  t j |  d  } | d } | j } d } | | k } | s t j d | f d | | f  i t j |  d 6t j |  d 6t j |  d	 6} d i | d 6} t	 t j
 |    n  d } } } } d S)zNA speicaluserstrscanitem gets the correct next_str when given
    parsed inputz<element one> by <element two>
   r   z by r!   0%(py3)s
{%(py3)s = %(py1)s.next_str
} == %(py6)sr   r   r   r   assert %(py8)sr   N)r!   )r   r   )r   parserparser   r   r   r   r   r   r   r   )scanr   ro   r   r   r   r   r   r   r   r   test_tuple_to_items_parsed  s    
 	    U   r   c              C   sJ  t  j t d   }  |  d } | j } d } | | k } | s t j d | f d | | f  i t j |  d 6t j |  d 6t j |  d 6} d i | d
 6} t t j |    n  d } } } } |  d } | j	 } d } | | k } | syt j d | f d | | f  i t j |  d 6t j |  d 6t j |  d 6} d i | d
 6} t t j |    n  d } } } } |  d } | j } d } | | k } | s4t j d | f d | | f  i t j |  d 6t j |  d 6t j |  d 6} d i | d
 6} t t j |    n  d } } } } d S)z3Do we get valid position information in scan items?ztwo words <address>r   r!   +%(py3)s
{%(py3)s = %(py1)s.pos
} == %(py6)sr   r   r   r   assert %(py8)sr   Nr   address,%(py3)s
{%(py3)s = %(py1)s.type
} == %(py6)s)r!   )r   r   )r!   )r   r   )r!   )r   r   )
r   to_scan_itemsr   r   r   r   r   r   r   r   )r   ro   r   r   r   r   r   r   r   r   test_to_scan_item_pos_simple  s8    
 	    U   
 	    U   
 	    U   r   c              C   s  t  j t d   }  |  d } | j } d } | | k } | s t j d | f d | | f  i t j |  d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d } } } } |  d } | j	 } d } | | k } | syt j d | f d | | f  i t j |  d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d } } } } d S)z3Do we get valid position information in scan items?z"two words <address> - <yyyy-mm-dd>   dater!   ,%(py3)s
{%(py3)s = %(py1)s.type
} == %(py6)sr   r   r   r   assert %(py8)sr   N   +%(py3)s
{%(py3)s = %(py1)s.pos
} == %(py6)s)r!   )r   r   )r!   )r   r   )
r   r   r   r   r   r   r   r   r   r   )r   ro   r   r   r   r   r   r   r   r   test_to_scan_item_pos_complex  s(    
 	    U   
 	    U   r   c              C   s  t  j t d   }  |  d } | j } d } | | k } | s t j d | f d | | f  i t j |  d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d } } } } |  d } | j	 } d } | | k } | syt j d | f d | | f  i t j |  d 6t j |  d 6t j |  d 6} d i | d 6} t t j |    n  d } } } } |  d j
 d } | j } d } | | k } | s;t j d | f d  | | f  i t j |  d 6t j |  d 6t j |  d 6} d! i | d 6} t t j |    n  d } } } } |  d j
 d } | j	 } d } | | k } | st j d" | f d# | | f  i t j |  d 6t j |  d 6t j |  d 6} d$ i | d 6} t t j |    n  d } } } } |  d j
 d } | j } d } | | k } | st j d% | f d& | | f  i t j |  d 6t j |  d 6t j |  d 6} d' i | d 6} t t j |    n  d } } } } |  d j
 d } | j	 } d } | | k } | st j d( | f d) | | f  i t j |  d 6t j |  d 6t j |  d 6} d* i | d 6} t t j |    n  d } } } } |  d } | j } d } | | k } | s<t j d+ | f d, | | f  i t j |  d 6t j |  d 6t j |  d 6} d- i | d 6} t t j |    n  d } } } } |  d } | j	 } d } | | k } | st j d. | f d/ | | f  i t j |  d 6t j |  d 6t j |  d 6} d0 i | d 6} t t j |    n  d } } } } |  d j
 d } | j } d } | | k } | st j d1 | f d2 | | f  i t j |  d 6t j |  d 6t j |  d 6} d3 i | d 6} t t j |    n  d } } } } |  d j
 d } | j	 } d } | | k } | s{t j d4 | f d5 | | f  i t j |  d 6t j |  d 6t j |  d 6} d6 i | d 6} t t j |    n  d } } } } d S)7z?Is position information valid with optional pattern components?z8two words <address>[ - <yyyy-mm-dd>][ - <last 4 digits>]   optionalr!   ,%(py3)s
{%(py3)s = %(py1)s.type
} == %(py6)sr   r   r   r   assert %(py8)sr   N   +%(py3)s
{%(py3)s = %(py1)s.pos
} == %(py6)sr   string   rP   r         $   last_4_digits(   )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   r   r   r   r   value)r   ro   r   r   r   r   r   r   r   r   test_to_scan_item_optional_pos  s    
 	    U   
 	    U    	    U    	    U    	    U    	    U   
 	    U   
 	    U    	    U    	    U   r   )Abuiltinsr   _pytest.assertion.rewrite	assertionrewriter   r7   enforcerr   r   r   r    r$   r6   r;   rB   rE   rO   r\   r`   ra   rd   re   rr   rv   ry   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   r   r   r   r   r   r   <module>   st     										