
    e                        d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 ddZ G d de      Z G d	 d
e
      Zh dZ G d d      Zy)    )annotationsN)Callable)basenameexistsjoin)	TypedDictc                D    t        d | j                  d      D              S )zBConvert python version to a tuple of integers for easy comparison.c              3  2   K   | ]  }t        |        y wN)int).0digits     G/usr/lib/python3/dist-packages/pylint/testutils/functional/test_file.py	<genexpr>z'parse_python_version.<locals>.<genexpr>   s     <U<s   .)tuplesplit)ver_strs    r   parse_python_versionr      s    <s);<<<    c                      e Zd Zy)NoFileErrorN)__name__
__module____qualname__ r   r   r   r      s    r   r   c                  T    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   y)TestFileOptionstuple[int, ...]	min_pyver	max_pyvermin_pyver_end_positionz	list[str]requiresexcept_implementationsexclude_platformsbool$exclude_from_minimal_messages_configN)r   r   r   __annotations__r   r   r   r   r      s,    ++%%  *..r   r   >   r#   r!   r    r%   r$   r"   r'   c                      e Zd ZU dZeeed d d dZded<   ddZdd	Zdd
Z	e
dd       Ze
dd       Ze
dd       Ze
dd       ZdddZy)FunctionalTestFilez0A single functional test case file with options.c                f    | j                  d      D cg c]  }|j                          c}S c c}w N,r   stripsis     r   <lambda>zFunctionalTestFile.<lambda>3   s"    !''#,?Qqwwy? ?   .c                f    | j                  d      D cg c]  }|j                          c}S c c}w r,   r.   r0   s     r   r3   zFunctionalTestFile.<lambda>4   s"    ,M1QWWY,M ,Mr4   c                f    | j                  d      D cg c]  }|j                          c}S c c}w r,   r.   r0   s     r   r3   zFunctionalTestFile.<lambda>5   s"    1773<'Ha	'H 'Hr4   )r    r!   r"   r#   r$   r%   z7dict[str, Callable[[str], tuple[int, ...] | list[str]]]_CONVERTERSc                ~    || _         |j                  dd      | _        dddg g g dd| _        | j	                          y )N.py )      )   r   )      F)r    r!   r"   r#   r$   r%   r'   )
_directoryreplacebaseoptions_parse_options)self	directoryfilenames      r   __init__zFunctionalTestFile.__init__8   sK    #$$UB/	  &,&(!#49)
 	r   c                     d| j                    S )NzFunctionalTest:)rB   rE   s    r   __repr__zFunctionalTestFile.__repr__H   s     ,,r   c                n   t        j                         }|j                  d       	 |j                  | j                         |j                  d      D ]Q  \  }}| j                  j                  |d       }|t        v sJ dt         d| d        ||      | j                  |<   S y # t
        $ r Y qw xY w)Ntestoptionsc                    | S r   r   )vs    r   r3   z3FunctionalTestFile._parse_options.<locals>.<lambda>T   s     r   z([testoptions]' can only contains one of z
 and had '')configparserConfigParseradd_sectionreadoption_filer   itemsr7   getPOSSIBLE_TEST_OPTIONSrC   )rE   cpnamevalueconvs        r   rD   z!FunctionalTestFile._parse_optionsK   s    &&(
}%	GGD$$% 88M2 	-KD%##''k:D --c9:O9PPZ[_Z``abc-!%eDLL	-  		s   B( (	B43B4c                $    | j                  d      S )Nz.rc
_file_typerJ   s    r   rU   zFunctionalTestFile.option_file[       u%%r   c                f    t        | j                        }dj                  || j                  g      S )Nr   )r   r@   r   rB   )rE   packages     r   modulezFunctionalTestFile.module_   s(    4??+xx$)),--r   c                (    | j                  dd      S )Nz.txtF)check_existsr^   rJ   s    r   expected_outputz"FunctionalTestFile.expected_outputd   s    vE::r   c                $    | j                  d      S )Nr9   r^   rJ   s    r   sourcezFunctionalTestFile.sourceh   r`   r   c                    t        | j                  | j                  |z         }|rt        |      r|S t	        d| d      )NzCannot find 'z'.)r   r@   rB   r   r   )rE   extre   rZ   s       r   r_   zFunctionalTestFile._file_typel   s<    DOOTYY_5vd|KM$r233r   N)rF   strrG   rk   returnNone)rl   rk   )rl   rm   )T)rj   rk   re   r&   rl   rk   )r   r   r   __doc__r   r7   r(   rH   rK   rD   propertyrU   rc   rf   rh   r_   r   r   r   r*   r*   ,   s    : *)"6?"MHLKH  --  & & . . ; ; & &4r   r*   )r   rk   rl   r   )
__future__r   rQ   collections.abcr   os.pathr   r   r   typingr   r   	Exceptionr   r   rX   r*   r   r   r   <module>ru      sJ   
 #  $ * * =
	) 	/i / D4 D4r   