ó
‹ãX+#  c           @   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 m Z d  d l Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' d  „  Z( d! „  Z) d" „  Z* d# „  Z+ d S($   iÿÿÿÿN(   t
   exceptions(   t   fstree(   t	   get_rules(   t   parse_rules(   t   startupc           C   s#   i t  j d 6d d 6d d 6d d 6S(   s9   Helper function: return a config (dict) with a rules_patht   rules_sourcet   patht
   rules_patht   begint   begin_markeri   t	   max_depth(   R   t   FILE_SOURCE(    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   sample_config    s    c           C   s   d d d d d d d g S(   s+   Helper function: Produce a basic rule file.s   remark1
s   remark2
s   begin
s   one
s   ,two
s   ,,three
s   four
(    (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   sample_rules(   s    c         C   s   t  j t ƒ  |  ƒ S(   s.   Helper function: Tokenize the basic rule file.(   R   t   lex_rules_fs_structR   (   t   rules(    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   sample_tokens3   s    c           C   s)   y t  j j ƒ  Wn t k
 r$ n Xd S(   s    Clear out the global error stateN(   R   t   emt   exit_if_erroredt
   SystemExit(    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   clear_error_state8   s    c          C   sF  d }  t  j } i t j d 6|  d 6} | | ƒ } | |  k } | s0t j d | f d | |  f ƒ i d t j ƒ  k s† t j |  ƒ r• t j	 |  ƒ n d d 6t j	 | ƒ d 6d	 t j ƒ  k sÍ t j t  ƒ rÜ t j	 t  ƒ n d	 d
 6t j	 | ƒ d 6t j	 | ƒ d 6} d i | d 6} t
 t j | ƒ ƒ ‚ n  d } } } } d S(   s,   Does a file source produce expected results?s	   some pathR   R   s   ==sQ   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_file_id
}(%(py4)s)
} == %(py8)sR   t   py8t   py2R   t   py0t   py6t   py4t    s   assert %(py10)st   py10N(   s   ==(   sQ   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_file_id
}(%(py4)s)
} == %(py8)ss   assert %(py10)s(   R   t   get_file_idR   R   t
   @pytest_art   _call_reprcomparet   @py_builtinst   localst   _should_repr_global_namet	   _safereprt   AssertionErrort   _format_explanationt   None(   R   t   @py_assert1t   @py_assert3t   @py_assert5t   @py_assert7t   @py_format9t   @py_format11(    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_get_file_id_fileF   s    	     Ã   c          C   sF  d }  t  j } i t j d 6|  d 6} | | ƒ } | |  k } | s0t j d | f d | |  f ƒ i d t j ƒ  k s† t j |  ƒ r• t j	 |  ƒ n d d 6t j	 | ƒ d 6d	 t j ƒ  k sÍ t j t  ƒ rÜ t j	 t  ƒ n d	 d
 6t j	 | ƒ d 6t j	 | ƒ d 6} d i | d 6} t
 t j | ƒ ƒ ‚ n  d } } } } d S(   s.   Does a google source produce expected results?s	   some nameR   t   spreadsheet_names   ==sQ   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_file_id
}(%(py4)s)
} == %(py8)st   nameR   R   R   R   R   R   R   s   assert %(py10)sR   N(   s   ==(   sQ   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_file_id
}(%(py4)s)
} == %(py8)ss   assert %(py10)s(   R   R   R   t   GOOGLE_SOURCER   R   R   R    R!   R"   R#   R$   R%   (   R.   R&   R'   R(   R)   R*   R+   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_get_file_id_googleN   s    	     Ã   c          C   s   t  j t ƒ  d d g d ƒ t s{ d	 i d t j ƒ  k sI t j t ƒ rX t j t ƒ n d d 6}  t	 t j
 |  ƒ ƒ ‚ n  d S(
   s+   A non-empty row fails to raise an exceptioni   t   onei    R   s   assert %(py0)st   TrueR   Ns   assert %(py0)s(   R   t   check_empty_rowR   R2   R   R    R   R!   R"   R#   R$   (   t   @py_format1(    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_raise_empty_row_fullX   s     A c        	   C   s9   t  j t j ƒ ! t j t ƒ  d d g d ƒ Wd QXd S(   s    An empty row raises an exceptioni   R   i   N(   t   pytestt   raisest   ext   EmptyRowErrorR   R3   R   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_check_empty_row_empty^   s    c          C   s|   t  j t ƒ  d d d ƒ t sx d	 i d t j ƒ  k sF t j t ƒ rU t j t ƒ n d d 6}  t	 t j
 |  ƒ ƒ ‚ n  d S(
   s!   First rule can start at top leveli   iÿÿÿÿi    R   s   assert %(py0)sR2   R   Ns   assert %(py0)s(   R   t   check_skipped_sub_dirR   R2   R   R    R   R!   R"   R#   R$   (   R4   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_check_depth_delta_initialf   s     A c        	   C   s6   t  j t j ƒ  t j t ƒ  d d d ƒ Wd QXd S(   s"   First rule must start at top leveli   iÿÿÿÿi   N(   R6   R7   R8   t   SkippedSubDirErrorR   R;   R   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt&   test_check_skipped_sub_dir_initial_badl   s    c          C   s|   t  j t ƒ  d d d ƒ t sx d	 i d t j ƒ  k sF t j t ƒ rU t j t ƒ n d d 6}  t	 t j
 |  ƒ ƒ ‚ n  d S(
   s1   Rules can go downward one level in directory treei   i    i   R   s   assert %(py0)sR2   R   Ns   assert %(py0)s(   R   R;   R   R2   R   R    R   R!   R"   R#   R$   (   R4   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_check_skipped_sub_dirr   s     A c          C   s|   t  j t ƒ  d d d ƒ t sx d	 i d t j ƒ  k sF t j t ƒ rU t j t ƒ n d d 6}  t	 t j
 |  ƒ ƒ ‚ n  d S(
   sB   Check that the rules can skip directries going upwards in the treei
   i   i    R   s   assert %(py0)sR2   R   Ns   assert %(py0)s(   R   R;   R   R2   R   R    R   R!   R"   R#   R$   (   R4   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt"   test_check_skipped_sub_dir_upwardsx   s     A c        
   C   s?   t  j t j ƒ ' t j t ƒ  d d d d g d ƒ Wd QXd S(   s0   A row with 2 non-empty cells raises an exceptioni   R   t   twot   threei   N(   R6   R7   R8   t   ParentWithChildErrorR   t   check_parent_with_childR   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt!   test_check_parent_with_child_fail€   s    c           C   s&   t  j t ƒ  d d d d g d ƒ d S(   s>   A row with only one non-empty cell does not raise an exceptioni   R   RA   i   N(   R   RD   R   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_check_parent_with_child‡   s    c          C   s  t  j }  d d d g } |  | ƒ } 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 6t j | ƒ d	 6t j | ƒ d
 6} d i | d 6} t t j	 | ƒ ƒ ‚ n  d }  } } } } d S(   s'   An empty row has a depth of N-cells + 1R   i   s   ==sO   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_depth
}(%(py4)s)
} == %(py9)sR   t   py9R   R   R   R   s   assert %(py11)st   py11N(   s   ==(   sO   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_depth
}(%(py4)s)
} == %(py9)ss   assert %(py11)s(   R   t	   get_depthR   R   R"   R   R    R!   R#   R$   R%   (   R&   R'   R(   t   @py_assert8R)   t   @py_format10t   @py_format12(    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_get_depth_emptystrings   s    	      œ   c          C   s  t  j }  d d d g } |  | ƒ } 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	 6t j | ƒ d
 6t j | ƒ d 6} d i | d 6} t t j	 | ƒ ƒ ‚ n  d }  } } } } d S(   s?   A non-empty row can have the non-empty cell's column identifiedR   R1   i   s   ==sO   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_depth
}(%(py4)s)
} == %(py9)sR   RG   R   R   R   R   s   assert %(py11)sRH   N(   s   ==(   sO   %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_depth
}(%(py4)s)
} == %(py9)ss   assert %(py11)s(   R   RI   R   R   R"   R   R    R!   R#   R$   R%   (   R&   R'   R(   RJ   R)   RK   RL   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_get_depth”   s    	      œ   c           C   s0   t  j t j ƒ  t j t ƒ  g  ƒ Wd QXd S(   s-   An empty rules file should raise an exceptionN(   R6   R7   R8   t   NoMarkerErrorR   R   R   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_lex_rules_fs_struct_emptyž   s    c        	   C   s9   t  j t j ƒ ! t j t ƒ  d d d g ƒ Wd QXd S(   s5   A rules file with no marker should raise an exceptions   one
s   two
s   three
N(   R6   R7   R8   RO   R   R   R   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt"   test_lex_rules_fs_struct_no_marker¤   s    c          C   sG  d d d d d d g }  d d d	 g f d
 d d d d d g f d d d d d g f g } t  j t ƒ  |  ƒ } | | k } | s=t j d | f d | | f ƒ i d t j ƒ  k sÃ t j | ƒ rÒ t j | ƒ n d d 6d t j ƒ  k sú t j | ƒ r	t j | ƒ n d d 6} d i | d 6} t	 t j
 | ƒ ƒ ‚ n  d } d S(   s-   max_depth is 4, ignore all subsequent columnss   remark1
s   remark2
s   begin
s   one
s   ,two,,,comment
s   ,,three
i   i    R1   i   i   R   RA   i   i   RB   s   ==s   %(py0)s == %(py2)st   expected_resultsR   t   tokensR   s   assert %(py4)sR   N(   s   ==(   s   %(py0)s == %(py2)ss   assert %(py4)s(   R   R   R   R   R   R   R    R!   R"   R#   R$   R%   (   R   RR   RS   R&   t   @py_format3t   @py_format5(    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt"   test_lex_rules_fs_struct_max_depth«   s    	  “   c          C   sA  t  ƒ  }  d d d g f d d d d g f d d	 d d d
 g f d d d g f g } t j t ƒ  |  ƒ } | | k } | s7t j d | f d | | f ƒ i d t j ƒ  k s½ t j | ƒ rÌ t j	 | ƒ n d d 6d t j ƒ  k sô t j | ƒ rt j	 | ƒ n d d 6} d i | d 6} t
 t j | ƒ ƒ ‚ n  d } d S(   s!   Produce the right token structurei   i    R1   i   i   R   RA   i   i   RB   i   t   fours   ==s   %(py0)s == %(py2)sRR   R   RS   R   s   assert %(py4)sR   N(   s   ==(   s   %(py0)s == %(py2)ss   assert %(py4)s(   R   R   R   R   R   R   R   R    R!   R"   R#   R$   R%   (   R   RR   RS   R&   RT   RU   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_lex_rules_fs_struct¶   s    	  “   c        
   C   sN   t  j t j ƒ 6 t j t ƒ  t j t j	 d ƒ d d g  f d ƒ Wd QXd S(   s?   An bad row should return a BadRow exception.  Use an empty row.t   patterni   i    N(
   R6   R7   R8   t   BadRowErrorR   t   raise_bad_rowR   R   t   FSDirt   DecisionTree(    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_raise_bad_row_exceptionÃ   s
    c          C   s  t  j t j t ƒ  t j t j d ƒ d d g  f d ƒ }  |  t k } | st	 j
 d | f d |  t f ƒ i d 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 S(   s<   A bad row where the exception is caught should return false.RY   i   i    t   iss   %(py0)s is %(py2)st   FalseR   t   resultR   R   s   assert %(py4)sR   N(   R_   (   s   %(py0)s is %(py2)ss   assert %(py4)s(   R   t   validate_rowR   R   R   R   R\   R]   R`   R   R   R   R    R!   R"   R#   R$   R%   R   (   Ra   R&   RT   RU   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_validate_row_falseÎ   s      “   c          C   s  t  j t j t ƒ  t j t j d ƒ d d d g f d ƒ }  |  t k } | s
t	 j
 d | f d |  t f ƒ i d 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 S(   s   A good row should return true.RY   i   i    R1   R_   s   %(py0)s is %(py2)sR2   R   Ra   R   R   s   assert %(py4)sR   N(   R_   (   s   %(py0)s is %(py2)ss   assert %(py4)s(   R   Rb   R   R   R   R   R\   R]   R2   R   R   R   R    R!   R"   R#   R$   R%   (   Ra   R&   RT   RU   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   test_validate_row_trueÚ   s      “   c        	   C   s<   t  j t j ƒ $ t j t j t j	 t
 ƒ  g  ƒ Wd  QXd  S(   N(   R6   R7   R8   t   NoRulesErrorR   t   parse_rules_fs_structR   R]   R   R   R   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt'   test_parse_rules_fs_struct_no_fs_structè   s    c          C   s%  t  j t j t j t ƒ  t t ƒ  ƒ ƒ }  |  j	 } | j
 } d d g } | | k } | st j d | f d | | f ƒ i t j | ƒ d 6d t j ƒ  k s¬ t j |  ƒ r» t j |  ƒ n d d	 6t j | ƒ d
 6t j | ƒ d 6} d i | d 6} t t j | ƒ ƒ ‚ n  d } } } } d S(   s#   Is the root node's content correct?i   R1   i   RW   s   ==sO   %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.decision_tree
}.tree
} == %(py7)sR   t   rootR   t   py7R   R   s   assert %(py9)sRG   N(   i   s   one(   i   s   four(   s   ==(   sO   %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.decision_tree
}.tree
} == %(py7)ss   assert %(py9)s(   R   Rf   t   libtestt   MockTreeR   R   R   R   R   t   decision_treet   treeR   R   R"   R   R    R!   R#   R$   R%   (   Rh   R&   R'   t   @py_assert6R(   t   @py_format8RK   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt&   test_parse_rules_fs_struct_rootcontentî   s    	 	    Œ   c          C   sê  t  j t j t j t ƒ  t t ƒ  ƒ ƒ }  |  j	 d } t
 j } t | | ƒ } | s@d d i d t j ƒ  k s€ t j t
 ƒ r t j t
 ƒ n d d 6d t j ƒ  k s· t j | ƒ rÆ t j | ƒ n d d 6d t j ƒ  k sî t j t ƒ rý t j t ƒ n d d	 6t j | ƒ d
 6t j | ƒ d 6} t t j | ƒ ƒ ‚ n  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	 6t j | ƒ d 6} d i | d 6} t t j | ƒ ƒ ‚ n  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	 6t j | ƒ d 6} d i | d 6} t t j | ƒ ƒ ‚ n  d } } } | j } | j } d g }	 | |	 k } | sÔt j d  | f d! | |	 f ƒ i t j | ƒ d 6d t j ƒ  k sq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(#   s   Is the first dir correct?i   R   sP   assert %(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py4)s
{%(py4)s = %(py2)s.FSDir
})
}R   R   t   first_childt   py1t
   isinstanceR   R   R   R1   s   ==s4   %(py2)s
{%(py2)s = %(py0)s.name_pattern
} == %(py5)st   py5s   assert %(py7)sRi   s.   %(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)si   RA   sO   %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.decision_tree
}.tree
} == %(py7)ss   assert %(py9)sRG   N(   s   ==(   s4   %(py2)s
{%(py2)s = %(py0)s.name_pattern
} == %(py5)ss   assert %(py7)s(   s   ==(   s.   %(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)ss   assert %(py7)s(   i   s   two(   s   ==(   sO   %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.decision_tree
}.tree
} == %(py7)ss   assert %(py9)s(   R   Rf   Rj   Rk   R   R   R   R   R   t   childrenR   R\   Rs   R   R    R   R!   R"   R#   R$   R%   t   name_patternR   t   rownumRl   Rm   (   Rh   Rq   R'   R(   t   @py_format7R&   t   @py_assert4t   @py_format6Ro   Rn   RK   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt%   test_parse_rules_fs_struct_firstchildø   sF    	   Ó  
	    |   	    |   	 	 	   Œ   c          C   s÷  t  j t j t j t ƒ  t t ƒ  ƒ ƒ }  |  j	 d } | j	 d } t
 j } t | | ƒ } | sMd d i d t j ƒ  k s t j t
 ƒ rœ t j t
 ƒ n d d 6d t j ƒ  k sÄ t j | ƒ rÓ t j | ƒ n d d 6d	 t j ƒ  k sû t j t ƒ r
t j t ƒ n d	 d
 6t j | ƒ d 6t j | ƒ d 6} t t j | ƒ ƒ ‚ n  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
 6t j | ƒ d 6} d i | d 6}	 t t j |	 ƒ ƒ ‚ n  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
 6t j | ƒ d 6} d i | d 6}	 t t j |	 ƒ ƒ ‚ n  d } } } | j } | j } d  g }
 | |
 k } | sát j d! | f d" | |
 f ƒ i t j | ƒ d 6d t j ƒ  k s~t j | ƒ rt j | ƒ n d d
 6t j |
 ƒ d 6t j | ƒ d 6}	 d# i |	 d 6} t t j | ƒ ƒ ‚ n  d } } } }
 d S($   s   Is the grandchild dir correct?i   i   R   sP   assert %(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py4)s
{%(py4)s = %(py2)s.FSDir
})
}R   R   t
   grandchildRr   Rs   R   R   R   RA   s   ==s4   %(py2)s
{%(py2)s = %(py0)s.name_pattern
} == %(py5)sRt   s   assert %(py7)sRi   s.   %(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)si   RB   sO   %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.decision_tree
}.tree
} == %(py7)ss   assert %(py9)sRG   N(   s   ==(   s4   %(py2)s
{%(py2)s = %(py0)s.name_pattern
} == %(py5)ss   assert %(py7)s(   s   ==(   s.   %(py2)s
{%(py2)s = %(py0)s.rownum
} == %(py5)ss   assert %(py7)s(   i   s   three(   s   ==(   sO   %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.decision_tree
}.tree
} == %(py7)ss   assert %(py9)s(   R   Rf   Rj   Rk   R   R   R   R   R   Ru   R   R\   Rs   R   R    R   R!   R"   R#   R$   R%   Rv   R   Rw   Rl   Rm   (   Rh   Rq   R|   R'   R(   Rx   R&   Ry   Rz   Ro   Rn   RK   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt%   test_parse_rules_fs_struct_grandchild  sH    	   Ó  
	    |   	    |   	 	 	   Œ   c           C   s[   t  j t j t j t t d d d d d d g ƒ ƒ t j	 t
 ƒ  t j j ƒ  Wd QXd S(   s   A bad rule generates an errors   remark1
s   begin
s   one
s   ,two - (bad)
s   ,,three - (bad)
s   four
N(   R   Rf   R   R]   R   R   R   R   R6   R7   R   R   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt    test_parse_rules_fs_struct_error  s    c         C   s-  t  j t j t j t ƒ  d d g  f d d g  f g ƒ |  j ƒ  \ } } t j } | | ƒ } | sd d i d t	 j
 ƒ  k s t j | ƒ rž t j | ƒ n d d 6t j | ƒ d 6d	 t	 j
 ƒ  k sÖ t j t ƒ rå t j t ƒ n d	 d
 6t j | ƒ d 6} t t j | ƒ ƒ ‚ n  d } } t ƒ  d S(   s;   Do we get multiple errors when there are multiple problems?i   i    i   R   sQ   assert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.multiple_errors
}(%(py3)s)
}t   errt   py3R   Rj   R   Rt   N(   R   Rf   Rj   Rk   R   R   R   t
   readouterrt   multiple_errorsR   R    R   R!   R"   R#   R$   R%   R   (   t   capsyst   outR   R&   Ry   Rz   (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt!   test_parse_rules_fs_struct_errors$  s    %	   œ  
(,   t   __builtin__R   t   _pytest.assertion.rewritet	   assertiont   rewriteR   R6   t   enforcerR    R8   R   R   R   R   Rj   R   R   R   R   R,   R0   R5   R:   R<   R>   R?   R@   RE   RF   RM   RN   RP   RQ   RV   RX   R^   Rc   Rd   Rg   Rp   R{   R}   R~   R…   (    (    (    sV   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/tests/test_parse_rules.pyt   <module>   sJ     						
										
									
			