î
œ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
 d  d l m Z d  d l m Z d  d l 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: d; „  Z( d< d= „  Z) d> d? „  Z* d@ dA „  Z+ dB dC „  Z, dD dE „  Z- d S)Fé    N)Ú
exceptions)Úfstree)Úparse_rules)Ústartupc             C   s   t  d d „  |  Dƒ ƒ S)zBReturn a set of (rownum, pos) tuples from the PatternLocs suppliedc             S   s"   g  |  ] } | j  | j f ‘ q S© )ÚrownumÚpos)Ú.0Úplr   r   úQ/home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_fstree.pyú
<listcomp>!   s   	 z%patlocs_to_tuples.<locals>.<listcomp>)Úset)Zplsr   r   r   Úpatlocs_to_tuples   s    r   c              C   s  t  j }  d } |  | ƒ } d 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)z9Does breaking a string with no version an no parens work?Úwordú==ú\%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.breakon_version_parens
}(%(py4)s)
} == %(py9)sÚpy6r   Úpy0Úpy2Úpy4Úpy9Ú úassert %(py11)sÚpy11N)r   )r   r   )
r   Úbreakon_version_parensÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚAssertionErrorÚ_format_explanation)Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12r   r   r   Ú!test_breakon_version_parens_plain'   s    	   	   œ   r*   c              C   s  t  j }  d } |  | ƒ } d d 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)z2Does breaking a string with a version number work?zword v5r   z v5r   ú\%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.breakon_version_parens
}(%(py4)s)
} == %(py9)sr   r   r   r   r   r   r   úassert %(py11)sr   N)r   )r+   r,   )
r   r   r   r   r   r   r   r    r!   r"   )r#   r$   r%   r&   r'   r(   r)   r   r   r   Ú#test_breakon_version_parens_version,   s    	      œ   r-   c              C   s  t  j }  d } |  | ƒ } d d 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 breaking a string with a version number and paren work?zword v5 (paren)r   z v5 (paren)r   ú\%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.breakon_version_parens
}(%(py4)s)
} == %(py9)sr   r   r   r   r   r   r   úassert %(py11)sr   N)r   )r.   r/   )
r   r   r   r   r   r   r   r    r!   r"   )r#   r$   r%   r&   r'   r(   r)   r   r   r   Ú)test_breakon_version_parens_version_paren1   s    	      œ   r0   c              C   s  t  j }  d } |  | ƒ } d d 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 breaking a string with no version number and parens work?zword (paren) (again)r   z (paren) (again)r   ú\%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.breakon_version_parens
}(%(py4)s)
} == %(py9)sr   r   r   r   r   r   r   úassert %(py11)sr   N)r   )r1   r2   )
r   r   r   r   r   r   r   r    r!   r"   )r#   r$   r%   r&   r'   r(   r)   r   r   r   Ú"test_breakon_version_parens_parens7   s    	      œ   r3   c              C   s2  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 6t j |  ƒ d 6} d i | d 6} t t j	 | ƒ ƒ ‚ n  d }  } } } } } d S)z$Does re-assembly do the right thing?ÚabcÚdefZabcdefr   úZ%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.reassemble
}(%(py4)s, %(py6)s)
} == %(py11)sr   r   r   r   r   Úpy8r   r   úassert %(py13)sZpy13N)r   )r6   r8   )
r   Z
reassembler   r   r   r   r   r    r!   r"   )r#   r$   r%   r'   Z@py_assert10Z@py_assert9r)   Z@py_format14r   r   r   Útest_reassemble=   s    	  	     ¬   r9   c              C   sÂ   t  j t  j d ƒ }  |  j ƒ  |  j } | ƒ  } | s´ d d i d t j ƒ  k sb t j |  ƒ rq t j	 |  ƒ n d d 6t j	 | ƒ d 6t j	 | ƒ d 6} t
 t j | ƒ ƒ ‚ n  d } } d S)	z$Can we set and detect the root node?Úpatternr   zBassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_root
}()
}Úfsdirr   r   r   N)r   ÚFSDirÚDecisionTreeZset_rootÚis_rootr   r   r   r    r   r!   r"   )r;   r#   r$   Ú@py_format5r   r   r   Útest_fsdir_is_root_trueG   s    
	 	  e  r@   c              C   sÃ   t  j t  j d ƒ }  |  j } | ƒ  } | } | s± d d i d t j ƒ  k s_ t j |  ƒ rn t j |  ƒ n d d 6t j | ƒ d 6t j | ƒ d 6} t	 t j
 | ƒ ƒ ‚ n  d } } } d S)	z$Are non-root nodes detected as such?r:   r   zFassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_root
}()
}r;   r   r   r   N)r   r<   r=   r>   r   r   r   r    r   r!   r"   )r;   r#   r$   r%   Ú@py_format6r   r   r   Útest_fsdir_is_root_falseN   s    	 	   e  rB   c              C   st  t  j t  j d ƒ }  |  j d d ƒ |  j d d ƒ |  j d d ƒ |  j } t | ƒ } 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 6d 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%Are child nodes retained as expected?r:   é   Úfirsté   Úsecondé   Úthirdr   úN%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.children
})
} == %(py8)sÚpy3Úlenr   Úpy5r;   Úpy1r7   r   úassert %(py10)sZpy10N)r   )rI   rN   )r   r<   r=   Z	add_childÚchildrenrK   r   r   r   r   r   r    r!   r"   )r;   Ú@py_assert2Ú@py_assert4r'   Ú@py_assert6Ú@py_format9Z@py_format11r   r   r   Útest_fsdir_add_childT   s    	     Ã   rT   c              C   sg  t  j t j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j } | j } d d d g } | | k } | sQ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 6} d i | d 6} t t	 j | ƒ ƒ ‚ n  d } } } } d S)z@Is the list of directory content added and returned as expected?r:   é   rD   é   rF   rC   rH   r   úO%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.decision_tree
}.tree
} == %(py7)sÚpy7r;   r   r   r   r   úassert %(py9)sr   N)rU   zfirst)rV   zsecond)rC   zthird)r   )rW   rY   )r   r<   ÚlibtestZMockTreeÚadd_contentÚdecision_treer   ÚparserÚtreer   r   r   r   r   r    r!   r"   )r;   r#   r$   rR   r%   Ú@py_format8r(   r   r   r   Útest_fsdir_get_patterns]   s    	 	    Œ   r`   c              C   sµ  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  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 6} d# i | d 6} t t j | ƒ ƒ ‚ n  d } } | j ƒ  } t | ƒ } d }	 | |	 k }
 |
 sD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 } }
 }	 | 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 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 } } }
 g  } | | k } | s§t j	 d- | f d. | | f ƒ i t j
 | ƒ d 6d  t j ƒ  k sdt j | ƒ rst j
 | ƒ n d  d 6} d/ i | d 6} t t j | ƒ ƒ ‚ n  d } } d S)0z Does a simple string match work?Ú.rU   rD   rV   rF   rC   rH   r   r   ú%(py0)s == %(py3)srJ   Ú	unmatchedr   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   ÚpatlocsrM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sÚpatlocr   úassert %(py7)srX   é   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)sÚreport_items)r   )rb   rd   )r   )re   rg   )r   )rh   rj   )r   )rl   rj   )r   )rb   rd   )r   r<   r=   r[   r\   r   r]   Úinvalidr   r   r   r   r   r    r!   r"   ÚpoprK   r   r   )r;   rc   rf   rm   rP   r#   Ú@py_format4rA   ri   r%   rQ   Ú@py_format7rS   r$   r_   r   r   r   Útest_fsdir_invalid_matchg   sX       l   
    ³   	    |   	    |      l   rr   c              C   sN   t  j t  j d ƒ }  t j t j ƒ ! |  j |  j t	 j
 d d ƒ Wd QXd S)zAre lexing errors detected?zdir patternrU   zfirst(problem)N)r   r<   r=   ÚpytestÚraisesÚexÚ	ScanErrorr[   r\   r   r]   )r;   r   r   r   Útest_fsdir_scan_errorv   s    rw   c              C   sN   t  j t  j d ƒ }  t j t j ƒ ! |  j |  j t	 j
 d d ƒ Wd QXd S)z#Are yacc bad-token errors detected?zdir patternrU   zfirst<problem>N)r   r<   r=   rs   rt   ru   Ú
ParseErrorr[   r\   r   r]   )r;   r   r   r   Útest_fsdir_parse_error~   s    ry   c              C   sN   t  j t  j d ƒ }  t j t j ƒ ! |  j |  j t	 j
 d d ƒ Wd QXd S)zAre yacc eof errors detected?zdir patternrU   zfirst N)r   r<   r=   rs   rt   ru   ÚParseEOFErrorr[   r\   r   r]   )r;   r   r   r   Útest_fsdir_eof_error†   s    r{   c              C   s¸  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j j d ƒ \ } } } d } | | k } | s1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 } } | j ƒ  } t | ƒ } d }	 | |	 k }
 |
 sG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 } }
 }	 | 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 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 } } }
 g  } | | k } | sªt j	 d- | f d. | | f ƒ i t j
 | ƒ d 6d  t j ƒ  k sgt j | ƒ rvt j
 | ƒ n d  d 6} d/ i | d 6} t t j | ƒ ƒ ‚ n  d } } d S)0z Does a simple string match work?ra   rU   rD   rV   rF   rC   rH   r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   rk   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )r|   r}   )r   )r~   r   )r   )r€   r   )r   )r‚   r   )r   )r|   r}   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Útest_dn_invalid_match‘   sX       l   
    ³   	    |   	    |      l   rƒ   c              C   s¸  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j j d ƒ \ } } } d	 } | | k } | s1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 } } | j ƒ  } t | ƒ } d }	 | |	 k }
 |
 sG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 } }
 }	 | 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 sŒt j | ƒ r›t j
 | ƒ n d d 6t j
 |
 ƒ d 6t j
 | ƒ d 6} d0 i | d  6} t t j | ƒ ƒ ‚ n  d } } }
 g  } | | k } | sªt j	 d1 | f d2 | | f ƒ i t j
 | ƒ d 6d$ t j ƒ  k sgt j | ƒ rvt j
 | ƒ n d$ d 6} d3 i | d 6} t t j | ƒ ƒ ‚ n  d } } d S)4z2Does a simple string match fail when 1 char short?ra   rU   rD   rV   rF   rC   rH   ZseconTÚisú%(py0)s is %(py3)srJ   rc   r   r   úassert %(py5)srL   Nr   r   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   rG   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)sú%(py0)s == %(py3)srm   )r„   )r…   r†   )r   )r‡   rˆ   )r   )r‰   rŠ   )r   )r‹   rŠ   )r   )rŒ   r†   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Útest_dn_invalid_match_1short    sX       l   
    ³   	    |   	    |      l   r   c              C   s¸  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j j d ƒ \ } } } d } | | k } | s1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 } } | j ƒ  } t | ƒ } d }	 | |	 k }
 |
 sG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 } }
 }	 | 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 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 } } }
 g  } | | k } | sªt j	 d- | f d. | | f ƒ i t j
 | ƒ d 6d  t j ƒ  k sgt j | ƒ rvt j
 | ƒ n d  d 6} d/ i | d 6} t t j | ƒ ƒ ‚ n  d } } d S)0z@Does a string match work when multiple patterns partially match?ra   rU   Ú	somethingrV   rF   rC   rH   r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   rk   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )r   r   )r   )r‘   r’   )r   )r“   r”   )r   )r•   r”   )r   )r   r   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Útest_dn_invalid_match_intree¯   sX       l   
    ³   	    |   	    |      l   r–   c              C   s¸  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j j d ƒ \ } } } d	 } | | k } | s1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 } } | j ƒ  } t | ƒ } d }	 | |	 k }
 |
 sG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 } }
 }	 | 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 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 } } }
 g  } | | k } | sªt j	 d0 | f d1 | | f ƒ i t j
 | ƒ d 6d# t j ƒ  k sgt j | ƒ rvt j
 | ƒ n d# d 6} d2 i | d 6} t t j | ƒ ƒ ‚ n  d } } d S)3z4Does a partial string match return expected results?ra   rU   rŽ   rV   rF   rC   rH   ZsecTr„   ú%(py0)s is %(py3)srJ   rc   r   r   úassert %(py5)srL   Nr   r   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)sú%(py0)s == %(py3)srm   )r„   )r—   r˜   )r   )r™   rš   )r   )r›   rœ   )r   )r   rœ   )r   )rž   r˜   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Útest_dn_invalid_match_partial¾   sX       l   
    ³   	    |   	    |      l   rŸ   c              C   s~  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j j d ƒ \ } } } d	 } | | k } | s1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 } } 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 } }	 } t | ƒ } 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* } | | k } | s¹t j	 d+ | f d, | | f ƒ i d t j ƒ  k sft j | ƒ rut j
 | ƒ n d d 6t j
 | ƒ d 6} d- i | d 6} t t j | ƒ ƒ ‚ n  d } } g  } | | k } | spt j	 d. | f d/ | | f ƒ i t j
 | ƒ d 6d t j ƒ  k s-t j | ƒ r<t j
 | ƒ n d d 6} d0 i | d 6} t t j | ƒ ƒ ‚ n  d } } d S)1zCPartial string matching multiple patterns returns expected results?ra   rU   rŽ   rV   rF   rC   rH   ÚsTr„   ú%(py0)s is %(py3)srJ   rc   r   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   Úinú%(py1)s in %(py3)sÚtuplesú%(py0)s == %(py3)srm   )r„   )r¡   r¢   )r   )r£   r¤   )rU   rU   )r¥   )r¦   r¢   )rV   rU   )r¥   )r¦   r¢   )r   )r¨   r¢   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   rK   r   )r;   rc   rf   rm   rP   r#   rp   rA   r%   rQ   rq   rS   r§   Ú@py_assert0r   r   r   Ú&test_dn_invalid_match_partial_multipleÍ   sT       l   
    ³      l   
   l   
   l   rª   c              C   s¸  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j j d ƒ \ } } } d	 } | | k } | s1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 } } 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 } }	 } | j ƒ  } | 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 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 } } }	 g  } | | k } | sªt j	 d. | f d/ | | f ƒ i t j
 | ƒ d 6d! t j ƒ  k sgt j | ƒ rvt j
 | ƒ n d! d 6} d0 i | d 6} t t j | ƒ ƒ ‚ n  d } } d S)1z-Failure to match because the name is too longra   rU   rŽ   rV   rF   rC   rH   zsomething elsez elser   ú%(py0)s == %(py3)srJ   rc   r   r   úassert %(py5)srL   Nú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   é	   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )r«   r¬   )r   )r­   r®   )r   )r¯   r°   )r   )r²   r°   )r   )r«   r¬   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   rK   ro   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   r%   rQ   rq   rS   ri   r$   r_   r   r   r   Útest_dn_invalid_match_toolongÜ   sZ    	   l   
    ³   	    |   	    |      l   r³   c              C   sF  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j 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
 6} d i | d 6} t t j | ƒ ƒ ‚ n  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 } }	 } t | ƒ } d# } | | k } | sÊt j	 d$ | f d% | | f ƒ i d t j ƒ  k swt j | ƒ r†t j
 | ƒ n d d 6t j
 | ƒ d 6} d& i | d 6} t t j | ƒ ƒ ‚ n  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 } } g  } | | k } | s8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>Fail to match optional components puts failures at right spotsra   rU   zword[ - <#>][ - <yyyy>]zword - aÚar   ú%(py0)s == %(py3)srJ   rc   r   r   úassert %(py5)srL   NrV   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   é   r¥   ú%(py1)s in %(py3)sr§   é   rm   )r   )rµ   r¶   )r   )r·   r¸   )rU   r¹   )r¥   )rº   r¶   )rU   r»   )r¥   )rº   r¶   )r   )rµ   r¶   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   rK   r   )r;   rc   rf   rm   rP   r#   rp   rA   r%   rQ   rq   rS   r§   r©   r   r   r   Ú"test_dn_invalid_match_same_patterní   sT    
	   l   
    ³      l   
   l   
   l   r¼   c              C   s€  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j 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
 6} d  i | d 6} t t j | ƒ ƒ ‚ n  d } } | j ƒ  } 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 } }
 }	 | 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 sTt j | ƒ rct j
 | ƒ n d d
 6t j
 |
 ƒ d 6t j
 | ƒ d 6} d) i | d 6} t t j | ƒ ƒ ‚ n  d } } }
 g  } | | k } | sr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'Matches a version number after a stringra   rU   z	word v<#>zword v5r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   r±   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )r½   r¾   )r   )r¿   rÀ   )r   )rÁ   rÂ   )r   )rÃ   rÂ   )r   )r½   r¾   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Útest_dn_invalid_match_versioný   sV    
   l   
    ³   	    |   	    |      l   rÄ   c              C   s€  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j 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
 6} d  i | d 6} t t j | ƒ ƒ ‚ n  d } } | j ƒ  } 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 } }
 }	 | 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 sTt j | ƒ rct j
 | ƒ n d d
 6t j
 |
 ƒ d 6t j
 | ƒ d 6} d) i | d 6} t t j | ƒ ƒ ‚ n  d } } }
 g  } | | k } | sr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-Matches a version number after a user elementra   rU   zword - <address> v<#>zword - Park Place v5r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   é   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )rÅ   rÆ   )r   )rÇ   rÈ   )r   )rÉ   rÊ   )r   )rÌ   rÊ   )r   )rÅ   rÆ   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Ú%test_dn_invalid_match_version_userstr  sX    
	   l   
    ³   	    |   	    |      l   rÍ   c              C   s€  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j 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
 6} d  i | d 6} t t j | ƒ ƒ ‚ n  d } } | j ƒ  } 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 } }
 }	 | 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 sTt j | ƒ rct j
 | ƒ n d d
 6t j
 |
 ƒ d 6t j
 | ƒ d 6} d) i | d 6} t t j | ƒ ƒ ‚ n  d } } }
 g  } | | k } | sr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-Matches a version number after a user elementra   rU   zword - <address>zword - Park Place v5r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   r»   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )rÎ   rÏ   )r   )rÐ   rÑ   )r   )rÒ   rÓ   )r   )rÔ   rÓ   )r   )rÎ   rÏ   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Ú-test_dn_invalid_match_implied_version_userstr  sX    
	   l   
    ³   	    |   	    |      l   rÕ   c              C   s€  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j 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
 6} d  i | d 6} t t j | ƒ ƒ ‚ n  d } } | j ƒ  } 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 } }
 }	 | 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 sTt j | ƒ rct j
 | ƒ n d d
 6t j
 |
 ƒ d 6t j
 | ƒ d 6} d) i | d 6} t t j | ƒ ƒ ‚ n  d } } }
 g  } | | k } | sr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)-zWMatches a version number after a user element followed by an optional
    parentheticalra   rU   zword - <address>[ (optional)]zword - Park Place v5r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   é   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )rÖ   r×   )r   )rØ   rÙ   )r   )rÚ   rÛ   )r   )rÝ   rÛ   )r   )rÖ   r×   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Ú6test_dn_invalid_match_implied_version_userstr_optparen,  sX    
	   l   
    ³   	    |   	    |      l   rÞ   c              C   sƒ  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j 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
 6} d! i | d 6} t t j | ƒ ƒ ‚ n  d } } | j ƒ  } 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 } }
 }	 | 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 sTt j | ƒ rct j
 | ƒ n d d
 6t j
 |
 ƒ d 6t j
 | ƒ d 6} d* i | d 6} t t j | ƒ ƒ ‚ n  d } } }
 d g } | | k } | sut j	 d+ | f d, | | f ƒ i t j
 | ƒ d 6d t j ƒ  k s2t j | ƒ rAt j
 | ƒ n d d
 6} d- i | d 6} t t j | ƒ ƒ ‚ n  d } } d S).z-Matches optional parens after required parensra   rU   zword - <address> (comment)z)word - Park Place (comment) (extra paren)r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   é   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)szextra parenrm   )r   )rß   rà   )r   )rá   râ   )r   )rã   rä   )r   )ræ   rä   )r   )rß   rà   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Útest_dn_invalid_match_parens=  sX    
	   l   
    ³   	    |   	    |   	   l   rç   c              C   s´  t  j t  j d ƒ }  |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j |  j t j d d ƒ |  j j d ƒ \ } } } d } | | k } | s1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 } } 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 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 } } } g  } | | k } | s¦t j	 d) | f d* | | f ƒ i t j
 | ƒ d 6d t j ƒ  k sct j | ƒ rrt j
 | ƒ n d d 6} d+ i | d 6} t t j | ƒ ƒ ‚ n  d } } d S),zFailure to match any patternra   rU   rŽ   rV   rF   rC   rH   Zxxxr   ú%(py0)s == %(py3)srJ   rc   r   r   úassert %(py5)srL   Nú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   c             S   s   g  |  ] } | j  ‘ q Sr   )r   )r	   r
   r   r   r   r   W  s   	 z)test_dn_match_nothing.<locals>.<listcomp>r   ú%(py1)s == %(py4)sr   úassert %(py6)srm   )r   )rè   ré   )r   )rê   rë   )r   )rì   rí   )r   )rè   ré   )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   rK   )r;   rc   rf   rm   rP   r#   rp   rA   r%   rQ   rq   rS   r©   r$   r?   r   r   r   Útest_dn_match_nothingM  sF       l   
    ³       E      l   rî   c             C   s7  t  j j ƒ  t j t j d d ƒ} | j | j t j	 d d ƒ | j | j t j	 d d ƒ |  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 } } t  j j ƒ  d S)zEDo 2 rules where the 2nd is an extension of the first make a warning?Úname_patternra   rV   ÚonerC   Úoneplusr   ú!=ú%(py0)s != %(py3)srJ   Úerrr   úassert %(py5)srL   N)rò   )ró   rõ   )r   ÚemÚexit_if_erroredr   r<   r=   r[   r\   r   r]   Ú
readouterrr   r   r   r   r   r    r!   r"   )ÚcapsysÚroot_dirÚoutrô   rP   r#   rp   rA   r   r   r   Útest_dn_warn_no_option1[  s"    

   l   
rü   c             C   s7  t  j j ƒ  t j t j d d ƒ} | j | j t j	 d d ƒ | j | j t j	 d d ƒ |  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 } } t  j j ƒ  d S)zCDo 2 rules where the 1st is an extension of the 2nd make a warning?rï   ra   rV   rñ   rC   rð   r   rò   ú%(py0)s != %(py3)srJ   rô   r   úassert %(py5)srL   N)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ô   rP   r#   rp   rA   r   r   r   Útest_dn_warn_no_option2j  s"    

   l   
rÿ   c             C   s7  t  j j ƒ  t j t j d d ƒ} | j | j t j	 d d ƒ | j | j t j	 d d ƒ |  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 } } t  j j ƒ  d S)z#Do 2 idential rules make a warning?rï   ra   rV   rð   rC   r   rò   ú%(py0)s != %(py3)srJ   rô   r   úassert %(py5)srL   N)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ô   rP   r#   rp   rA   r   r   r   Útest_dn_warn_dupsy  s"    

   l   
r  c             C   s  t  j t  j d d ƒ} | j | j t j d d ƒ | j | j t j d d ƒ |  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 S)z)Different rules should not make a warningrï   ra   rV   ZoneArC   ZoneBr   r   ú%(py0)s == %(py3)srJ   rô   r   úassert %(py5)srL   N)r   )r  r  )r   r<   r=   r[   r\   r   r]   rø   r   r   r   r   r   r    r!   r"   )rù   rú   rû   rô   rP   r#   rp   rA   r   r   r   Útest_dn_no_warnˆ  s    

   l   r  c              C   s³  t  j t  j d ƒ }  |  j |  j t j d d ƒ d } d } d } |  j j d | d | d | 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 } } | j ƒ  } t | ƒ } d } | | k } | s9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 } } } | 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 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 } } } | | | g } | | k } | s¥t j	 d/ | f d0 | | f ƒ i t j
 | ƒ d 6d" t j ƒ  k sbt j | ƒ rqt j
 | ƒ n d" d 6}	 d1 i |	 d 6}
 t t j |
 ƒ ƒ ‚ n  d } } d S)2zJReported parens and optional parens are returned,
    in the correct orderra   rU   zword - <address> (comment)zcomment; with extrazextra parenzanother extra parenzword - Park Place (z) (ú)r   r   ú%(py0)s == %(py3)srJ   rc   r   úassert %(py5)srL   Nr   ú0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   rK   rf   rM   úassert %(py8)sr7   ú.%(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)sri   r   úassert %(py7)srX   rå   ú+%(py2)s
{%(py2)s = %(py0)s.pos
} == %(py5)srm   )r   )r  r  )r   )r	  r
  )r   )r  r  )r   )r  r  )r   )r  r  )r   r<   r=   r[   r\   r   r]   rn   r   r   r   r   r   r    r!   r"   ro   rK   r   r   )r;   Zmatched_commentZextra_paren1Zextra_paren2rc   rf   rm   rP   r#   rp   rA   ri   r%   rQ   rq   rS   r$   r_   r   r   r   Útest_dt_invalid_report_items—  s^    
	*   l   
    ³   	    |   	    |      l   r  ).Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   rs   Úenforcerr   ru   r   r   r   rZ   r   r*   r-   r0   r3   r9   r@   rB   rT   r`   rr   rw   ry   r{   rƒ   r   r–   rŸ   rª   r³   r¼   rÄ   rÍ   rÕ   rÞ   rç   rî   rü   rÿ   r  r  r  r   r   r   r   Ú<module>   sN     
	
