
yNY!                 @   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
 e
 j 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. d/   Z! d0 d1   Z" d2 d3   Z# d4 d5   Z$ d6 d7   Z% d8 d9   Z& d S):    N)
exceptions)
rules_yaccc        	      C   sw  t  j }  d } |  |  } d g } t j } | | } | | k } | sU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
 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)zA simple string works	two wordsstring==%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})py12py6py4py9r   py10parserpy0py2 assert %(py15)spy15N)zstringr   )r   )r   r   )r   parser   IMPLICIT_SUFFIXES
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanation)	@py_assert1@py_assert3@py_assert5@py_assert8@py_assert11@py_assert13@py_assert7@py_format14@py_format16 r&   U/home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_rules_yacc.pytest_string   s    	   	 	 
      r(   c        	      C   sz  t  j }  d } |  |  } d d g } t j } | | } | | k } | sX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 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)z$A string followed by an entity worksztwo words <entity>r   
two words entity<entity>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zstringr)   )zentityr+   )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'   test_string_entity"   s    	    	 
      r.   c        	      C   s  t  j }  d } |  |  } d d d d g } t j } | | } | | 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 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)z$A string followed by an entity worksztwo words <#> <entity>r   
two words hash<#> r*   <entity>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)stringr/   )zhashr1   )r6   r2   )zentityr3   )r   )r4   r5   )r   r   r   r   r   r   r   r   r   r   r   r   )	r   r   r   r    r!   r"   r#   r$   r%   r&   r&   r'   test_hashedstring_entity*   s    	    	 
      r7   c        	      C   sw  t  j }  d } |  |  } d g } t j } | | } | | k } | sU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
 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)zA longer string worksthree words yeahr   r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zstringr8   )r   )r9   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'   test_long_string4   s    	   	 	 
      r;   c        	      C   sw  t  j }  d } |  |  } d g } t j } | | } | | k } | sU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
 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)zAn entity as a name works<entity>r*   r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zentityr<   )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'   test_entity;   s    	   	 	 
      r?   c        	      C   s}  t  j }  d } |  |  } d d d g } t j } | | } | | 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 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)z!A string followed by a name worksztwo words - <yyyy-mm-dd>r   	two words - date<yyyy-mm-dd>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)stringr@   )rF   rA   )zdaterC   )r   )rD   rE   )r   r   r   r   r   r   r   r   r   r   r   r   )	r   r   r   r    r!   r"   r#   r$   r%   r&   r&   r'   test_string_dateA   s    	    	 
      rG   c        	      C   s}  t  j }  d } |  |  } d d d g } t j } | | } | | 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 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)z"An entity followed by a year worksz<entity> - <yyyy>r*   <entity>r    - year<yyyy>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zentityrH   )zstringrI   )zyearrK   )r   )rL   rM   )r   r   r   r   r   r   r   r   r   r   r   r   )	r   r   r   r    r!   r"   r#   r$   r%   r&   r&   r'   test_entity_yearJ   s    	    	 
      rN   c              C   s  t  j }  d } |  |  } d d f d d d f d d f g f g } t j } | | } t j } | | } | | k } | rt j d f | f d	 f | | f  i	 t j |  d
 6t j |  d 6t j |  d 6t j |  d 6t j |  d 6d t j	   k pt j
 t  r%t j t  n d d 6d t j	   k pJ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 6}	 d d i |	 d 6}
 t t j |
    n  d }  } } } } } } } } d S)z)String followed by an optional hash worksztwo words[ - <#>]r   z	two wordsoptionalz - r0   z<#>r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == ((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py16)s
{%(py16)s = %(py14)s.IMPLICIT_PARENS
})r   r	   r
   r   py16r   r   r   r   r   py14r   zassert %(py19)spy19N)r   r   r   IMPLICIT_VERSIONIMPLICIT_PARENSr   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   @py_assert15@py_assert17r#   @py_format18@py_format20r&   r&   r'   test_string_opt_hashQ   s    	   * 	 
 	 
    1   rY   c              C   s   t  j }  d } |  |  } d d f d d d f d d f g f d d d f d d	 f g f g } t j } | | } t j } | | } | | k } | rt j d
 f | f d f | | f  i	 t j |  d 6t j |  d 6t j |  d 6t j |  d 6t j |  d 6d t j	   k p.t j
 t  r@t j t  n d d 6d t j	   k pet j
 t   rwt j t   n d d 6t j |   d 6d t j	   k pt j
 t  rt j t  n d d 6}	 d d i |	 d 6}
 t t j |
    n  d }  } } } } } } } } d S)zCString followed by an optional hash works by an optional user valueztwo words[ - <#>][ - <address>]r   z	two wordsrO   z - r0   z<#>user_strz	<address>r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == ((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py16)s
{%(py16)s = %(py14)s.IMPLICIT_PARENS
})r   r	   r
   r   rP   r   r   r   r   r   rQ   r   zassert %(py19)srR   N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   rU   rV   r#   rW   rX   r&   r&   r'   !test_string_opt_hash_opt_user_strZ   s    	   E 	 
 	 
    1   r[   c        	      C   s  t  j }  d } |  |  } d d d d g f d g } t j } | | } | | k } | sg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 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) z4String followed by optional hash by required versionztwo words[ - <#>] v<#>r   	two wordsrO    - r0   <#>version v<#>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_PARENS
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)stringr\   )rc   r]   )zhashr^   )zversionr`   )r   )ra   rb   )r   r   r   rT   r   r   r   r   r   r   r   r   )	r   r   r   r    r!   r"   r#   r$   r%   r&   r&   r'   test_string_opt_hash_versiond   s    	    	 
      rd   c        	      C   s}  t  j }  d } |  |  } d d d g } t j } | | } | | 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 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)z8String followed by a version followed by a parentheticalztwo words v<#> (some note)r   	two wordsr_    v<#>paren (some note)r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_PARENS
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zstringre   )zversionrf   )zparenrh   )r   )ri   rj   )r   r   r   rT   r   r   r   r   r   r   r   r   )	r   r   r   r    r!   r"   r#   r$   r%   r&   r&   r'   test_string_version_parenm   s    	    	 
      rk   c        	      C   sz  t  j }  d } |  |  } d d g } t j } | | } | | k } | sX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 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)zString followed by a versionztwo words v<#>r   	two wordsr_    v<#>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_PARENS
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zstringrl   )zversionrm   )r   )rn   ro   )r   r   r   rT   r   r   r   r   r   r   r   r   )	r   r   r   r    r!   r"   r#   r$   r%   r&   r&   r'   test_string_versionv   s    	    	 
      rp   c              C   s  t  j }  d } |  |  } d d f g } t j } | | } d d f g } | | } t j } | | }	 | |	 k }
 |
 rt j d f |
 f d f | |	 f  i
 t j |  d 6t 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 6d t j	   k pHt j
 t  rZt j t  n d d 6d t j	   k p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)zString followed by parenztwo words (some note)r   z	two wordsrg   z (some note)r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py15)s) + %(py19)s
{%(py19)s = %(py17)s.IMPLICIT_PARENS
})r   r	   r   r   py17r
   r   r   r   r   r   rR   r   zassert %(py22)spy22N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   @py_assert14@py_assert16@py_assert18@py_assert20r#   @py_format21@py_format23r&   r&   r'   test_string_paren}   s"    	    	 
  
 	 
    A   ry   c              C   s-  t  j }  d } |  |  } d d f g } t j } | | } d d f d d d f g f g } | | } t j } | | }	 | |	 k }
 |
 rt j d f |
 f d	 f | |	 f  i
 t j |  d
 6t 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 6d t j	   k pZt j
 t  rlt j t  n d d 6d t j	   k p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)z*String followed by paren by optional parenz'two words (some note)[ (optional note)]r   z	two wordsrg   z (some note)rO   z (optional note)r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py15)s) + %(py19)s
{%(py19)s = %(py17)s.IMPLICIT_PARENS
})r   r	   r   r   rq   r
   r   r   r   r   r   rR   r   zassert %(py22)srr   N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   rs   rt   ru   rv   r#   rw   rx   r&   r&   r'   test_string_paren_opt_paren   s"    	    	 
 ! 
 	 
    A   rz   c              C   s$  t  j }  d } |  |  } d d f g } t j } | | } d d d f g f g } | | } t j } | | }	 | |	 k }
 |
 rt j d f |
 f d f | |	 f  i
 t j |  d	 6t 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 6d t j	   k pQt j
 t  rct j t  n d d 6d t j	   k p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)z!String followed by optional parenztwo words[ (optional note)]r   z	two wordsrO   rg   z (optional note)r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py15)s) + %(py19)s
{%(py19)s = %(py17)s.IMPLICIT_PARENS
})r   r	   r   r   rq   r
   r   r   r   r   r   rR   r   zassert %(py22)srr   N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   rs   rt   ru   rv   r#   rw   rx   r&   r&   r'   test_string_opt_paren   s"    	    	 
  
 	 
    A   r{   c              C   s$  t  j }  d } |  |  } d d f g } t j } | | } d d f d d f g } | | } t j } | | }	 | |	 k }
 |
 rt j d f |
 f d f | |	 f  i
 t j |  d	 6t 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 6d t j	   k pQt j
 t  rct j t  n d d 6d t j	   k p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)z!String followed by paren by parenz$two words (some note) (another note)r   z	two wordsrg   z (some note)z (another note)r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py15)s) + %(py19)s
{%(py19)s = %(py17)s.IMPLICIT_PARENS
})r   r	   r   r   rq   r
   r   r   r   r   r   rR   r   zassert %(py22)srr   N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   rs   rt   ru   rv   r#   rw   rx   r&   r&   r'   test_string_paren_paren   s"    	    	 
  
 	 
    A   r|   c              C   s6  t  j }  d } |  |  } d d f g } t j } | | } d d d f g f d d d f g f g } | | } t j } | | }	 | |	 k }
 |
 rt j d f |
 f d	 f | |	 f  i
 t j |  d
 6t 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 6d t j	   k pct j
 t  rut j t  n d d 6d t j	   k p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)z3String followed by optional paren by optional parenz0two words[ (optional note)][ (another opt note)]r   z	two wordsrO   rg   z (optional note)z (another opt note)r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py15)s) + %(py19)s
{%(py19)s = %(py17)s.IMPLICIT_PARENS
})r   r	   r   r   rq   r
   r   r   r   r   r   rR   r   zassert %(py22)srr   N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   rs   rt   ru   rv   r#   rw   rx   r&   r&   r'   test_string_opt_paren_opt_paren   s"    	    	 
 * 
 	 
    A   r}   c              C   s6  t  j }  d } |  |  } d d f d d f d d f g } t j } | | } d d d	 f g f g } | | } t j } | | }	 | |	 k }
 |
 rt j d
 f |
 f d f | |	 f  i
 t j |  d 6t 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 6d t j	   k pct j
 t  rut j t  n d d 6d t j	   k p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)z?String followed by a user element followed by an optional parenzword - <address>[ (optional)]r   wordz - rZ   z	<address>rO   rg   z (optional)r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py15)s) + %(py19)s
{%(py19)s = %(py17)s.IMPLICIT_PARENS
})r   r	   r   r   rq   r
   r   r   r   r   r   rR   r   zassert %(py22)srr   N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   rs   rt   ru   rv   r#   rw   rx   r&   r&   r'   "test_string_user_element_opt_paren   s"    	   ! 	 
  
 	 
    A   r   c        	      C   s}  t  j }  d } |  |  } d d d g } t j } | | } | | 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 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)z)Hash follwed by period followed by stringz<#>. two wordsr0   <#>r   . 	two wordsr   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zhashr   )stringr   )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'   test_numbered_bullet   s    	    	 
      r   c        	      C   s  t  j }  d } |  |  } d d d d g } t j } | | } | | 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 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)z)Hash follwed by period followed by stringz<#>. two words v<#>r0   <#>r   . 	two wordsr_    v<#>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_PARENS
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zhashr   )stringr   )r   r   )zversionr   )r   )r   r   )r   r   r   rT   r   r   r   r   r   r   r   r   )	r   r   r   r    r!   r"   r#   r$   r%   r&   r&   r'   test_numbered_bullet_version   s    	    	 
      r   c        	      C   s}  t  j }  d } |  |  } d d d g } t j } | | } | | 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 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)z String followed by last 4 digitsztwo words - <last 4 digits>r   	two words - last_4_digits<last 4 digits>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)stringr   )r   r   )zlast_4_digitsr   )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'   test_last_4_digits   s    	    	 
      r   c        	      C   sz  t  j }  d } |  |  } d d g } t j } | | } | | k } | sX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 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)zString followed by hashztwo words <#>r   
two words r0   <#>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)zstringr   )zhashr   )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'   !test_hash_suffixed_string_complex   s    	    	 
      r   c        	      C   s  t  j }  d } |  |  } d d d d d d g } t j } | | } | | k } | sd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 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) z-String followed by entity by string by entityz two words <entity> from <entity>r   
two words r*   <entity>r2   fromr   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)stringr   )entityr   )r   r2   )r   zfrom)r   r2   )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'   test_string_uval_string_uval   s    	    	 
      r   c              C   s  t  j }  d } |  |  } d d f d d d f d d f g f g } t j } | | } t j } | | } | | k } | rt j d f | f d	 f | | f  i	 t j |  d
 6t j |  d 6t j |  d 6t j |  d 6t j |  d 6d t j	   k pt j
 t  r%t j t  n d d 6d t j	   k pJ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 6}	 d d i |	 d 6}
 t t j |
    n  d }  } } } } } } } } d S)z-String followed by optional string-user_valueztwo words[ from <somewhere>]r   z	two wordsrO   z from rZ   z<somewhere>r   z%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == ((%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_VERSION
}) + %(py16)s
{%(py16)s = %(py14)s.IMPLICIT_PARENS
})r   r	   r
   r   rP   r   r   r   r   r   rQ   r   zassert %(py19)srR   N)r   r   r   rS   rT   r   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   rU   rV   r#   rW   rX   r&   r&   r'   test_string_opt_string_uval   s    	   * 	 
 	 
    1   r   c        	      C   s  t  j }  d } |  |  } d d d d g } t j } | | } | | 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 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)z,user value followed by string, by user valuez<first> of <second>rZ   <first>r   r2   of <second>r   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py4)s)
} == (%(py9)s + %(py12)s
{%(py12)s = %(py10)s.IMPLICIT_SUFFIXES
})r   r	   r
   r   r   r   r   r   r   r   assert %(py15)sr   N)user_strr   )stringr2   )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'   test_uval_string_uval   s    	    	 
      r   c            	   C   s*   t  j t j   t j d  Wd QXd S)z"Test the yacc bad-token error codez -  - N)pytestraisesex	YaccErrorr   r   r&   r&   r&   r'   test_yaccerror   s    r   c            	   C   s*   t  j t j   t j d  Wd QXd S)zTest the yacc eof error codez
something N)r   r   r   YaccEOFErrorr   r   r&   r&   r&   r'   test_yacceoferror  s    r   )'builtinsr   _pytest.assertion.rewrite	assertionrewriter   r   enforcerr   r   r   r   r(   r.   r7   r;   r?   rG   rN   rY   r[   rd   rk   rp   ry   rz   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   <module>   s@     	
		
			
	
	
	

