U
    {±Ëh!O  ã                   @   s|   d dl mZmZmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlZd dlmZ G dd„ deƒZG d	d
„ d
eƒZdS )é    )Úcreate_args_parserÚparse_args_rawÚ
parse_argsÚparallel_compiles)ÚOptions)Úbackup_OptionsÚrestore_OptionsÚcheck_global_options)ÚTestCaseN)ÚStringIOc                   @   sü  e Z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d+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6didj„ Z7dkdl„ Z8dmdn„ Z9dodp„ Z:dqdr„ Z;dsdt„ Z<dudv„ Z=dwdx„ Z>dydz„ Z?d{d|„ Z@d}S )~ÚTestCythonizeArgsParserc                 C   s   t  | ¡ tƒ fdd„| _d S )Nc                 S   s
   t || ƒS ©N)r   )ÚxÚparser© r   úN/tmp/pip-unpacked-wheel-fhl22ezh/Cython/Build/Tests/TestCythonizeArgsParser.pyÚ<lambda>   ó    z/TestCythonizeArgsParser.setUp.<locals>.<lambda>)r
   ÚsetUpr   r   ©Úselfr   r   r   r      s    
zTestCythonizeArgsParser.setUpc              	   C   s´   ddddg}ddddd	d
dddg	}|D ]8}t t||ƒƒdkr&||kr&| j|dd| d  dS q&|D ]4}t||ƒd k	rd||krd| j|dd| d  dS qd|jtkr°d|kr°dS dS )NÚ
directivesÚcompile_time_envÚoptionsÚexcludesÚlanguage_levelÚannotateÚbuildÚbuild_inplaceÚforceÚquietÚlenientÚ
keep_goingÚno_docstringsr   Ú zFor option ©ÚmsgFÚparallelT)ÚlenÚgetattrÚassertEqualr'   r   )r   r   ÚskipZempty_containersZare_noneÚopt_namer   r   r   Úare_default   s    z#TestCythonizeArgsParser.are_defaultc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nú-Xúcdivision=Truer   Ú	cdivisionT©r   ÚassertFalseÚ
assertTruer-   r*   r   ©r   r   Úargsr   r   r   Útest_directive_short'   s    
z,TestCythonizeArgsParser.test_directive_shortc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nz--directiver/   r   r0   Tr1   r4   r   r   r   Útest_directive_long-   s    
z+TestCythonizeArgsParser.test_directive_longc                 C   s\   |   ddddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )	Nr.   r/   zc_string_type=bytesr   r0   TÚc_string_typeÚbytesr1   r4   r   r   r   Útest_directive_multiple3   s
    
z/TestCythonizeArgsParser.test_directive_multiplec                 C   sX   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )Nr.   z"cdivision=True,c_string_type=bytesr   r0   Tr8   r9   r1   r4   r   r   r   Útest_directive_multiple_v2:   s
    
z2TestCythonizeArgsParser.test_directive_multiple_v2c                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nr.   zcdivision=YeSr   r0   Tr1   r4   r   r   r   Útest_directive_value_yesA   s    
z0TestCythonizeArgsParser.test_directive_value_yesc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nr.   zcdivision=nor   r0   Fr1   r4   r   r   r   Útest_directive_value_noG   s    
z/TestCythonizeArgsParser.test_directive_value_noc              	   C   s,   |   t¡}|  ddg¡\}}W 5 Q R X d S )Nr.   zcdivision=sadfasd©ÚassertRaisesÚ
ValueErrorr   ©r   Úcontextr   r5   r   r   r   Útest_directive_value_invalidM   s    z4TestCythonizeArgsParser.test_directive_value_invalidc              	   C   s,   |   t¡}|  ddg¡\}}W 5 Q R X d S )Nr.   Úabracadabrar>   rA   r   r   r   Útest_directive_key_invalidQ   s    z2TestCythonizeArgsParser.test_directive_key_invalidc              	   C   s,   |   t¡}|  ddg¡\}}W 5 Q R X d S )Nr.   r0   r>   rA   r   r   r   Útest_directive_no_valueU   s    z/TestCythonizeArgsParser.test_directive_no_valuec              
   C   sš   dddddddddd	g
}|D ]x\}}d
j |t|ƒd}|  d|g¡\}}|  |¡ | j|  |dg¡d| d |dkrzd}| j|j| |d| d qd S )N)Úauto_pickleT)r8   Ú	bytearray)r8   r9   )r8   Ústr)r8   Úunicode)Zc_string_encodingÚascii)r   Ú2)r   Ú3)Zset_initial_pathZmy_initial_pathú{key}={value}©ÚkeyÚvaluer.   r   úError for option: r%   rJ   rI   )ÚformatrI   r   r2   r3   r-   r*   r   )r   r   rP   rQ   Úcmdr   r5   r   r   r   Útest_directives_typesY   s&    õ
z-TestCythonizeArgsParser.test_directives_typesc              
   C   s^   dddg}|D ]J\}}dj |t|ƒd}| jtd| d}|  d|g¡\}}W 5 Q R X qd S )	N)rG   é*   )rG   ZNONONO)r8   ZbitesrN   rO   rR   r%   r.   )rS   rI   r?   r@   r   )r   r   rP   rQ   rT   rB   r   r5   r   r   r   Útest_directives_wrongp   s    ýz-TestCythonizeArgsParser.test_directives_wrongc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nú-Eú	MYSIZE=10r   ÚMYSIZEé
   ©r   r2   r3   r-   r*   r   r4   r   r   r   Útest_compile_time_env_short}   s    
z3TestCythonizeArgsParser.test_compile_time_env_shortc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nz--compile-time-envrY   r   rZ   r[   r\   r4   r   r   r   Útest_compile_time_env_longƒ   s    
z2TestCythonizeArgsParser.test_compile_time_env_longc                 C   s\   |   ddddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )	NrX   rY   z
ARRSIZE=11r   rZ   r[   ÚARRSIZEé   r\   r4   r   r   r   Útest_compile_time_env_multiple‰   s
    
z6TestCythonizeArgsParser.test_compile_time_env_multiplec                 C   sX   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )NrX   zMYSIZE=10,ARRSIZE=11r   rZ   r[   r_   r`   r\   r4   r   r   r   Ú!test_compile_time_env_multiple_v2   s
    
z9TestCythonizeArgsParser.test_compile_time_env_multiple_v2c                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nú-súdocstrings=Truer   Ú
docstringsT©r   r2   r3   r-   r*   r   r4   r   r   r   Útest_option_short˜   s    
z)TestCythonizeArgsParser.test_option_shortc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nz--optionrd   r   re   Trf   r4   r   r   r   Útest_option_longž   s    
z(TestCythonizeArgsParser.test_option_longc                 C   s\   |   ddddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )Nrc   rd   zbuffer_max_dims=8r   re   TÚbuffer_max_dimsrf   r4   r   r   r   Útest_option_multiple¤   s
    
z,TestCythonizeArgsParser.test_option_multiplec                 C   sX   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )Nrc   z!docstrings=True,buffer_max_dims=8r   re   Tri   rf   r4   r   r   r   Útest_option_multiple_v2«   s
    
z/TestCythonizeArgsParser.test_option_multiple_v2c                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   zdocstrings=YeSr   re   Trf   r4   r   r   r   Útest_option_value_yes²   s    
z-TestCythonizeArgsParser.test_option_value_yesc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   zdocstrings=4242r   re   Trf   r4   r   r   r   Útest_option_value_4242¸   s    
z.TestCythonizeArgsParser.test_option_value_4242c                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   zdocstrings=0r   re   Frf   r4   r   r   r   Útest_option_value_0¾   s    
z+TestCythonizeArgsParser.test_option_value_0c                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   zdocstrings=r   re   Trf   r4   r   r   r   Útest_option_value_emptystrÄ   s    
z2TestCythonizeArgsParser.test_option_value_emptystrc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   zdocstrings=BBr   re   Trf   r4   r   r   r   Útest_option_value_a_strÊ   s    
z/TestCythonizeArgsParser.test_option_value_a_strc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   zdocstrings=nOr   re   Frf   r4   r   r   r   Útest_option_value_noÐ   s    
z,TestCythonizeArgsParser.test_option_value_noc                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   re   r   Trf   r4   r   r   r   Útest_option_no_valueÖ   s    
z,TestCythonizeArgsParser.test_option_no_valuec                 C   sF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrc   rD   r   Trf   r4   r   r   r   Útest_option_any_keyÜ   s    
z+TestCythonizeArgsParser.test_option_any_keyc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-2r   é   ©r   r2   r3   r-   r*   r   r4   r   r   r   Útest_language_level_2â   s    
z-TestCythonizeArgsParser.test_language_level_2c                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-3r   é   ru   r4   r   r   r   Útest_language_level_3è   s    
z-TestCythonizeArgsParser.test_language_level_3c                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nú--3strr   rw   ru   r4   r   r   r   Útest_language_level_3strî   s    
z0TestCythonizeArgsParser.test_language_level_3strc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nú-ar   Údefault©r   r2   r3   r-   r*   r   r4   r   r   r   Útest_annotate_shortô   s    
z+TestCythonizeArgsParser.test_annotate_shortc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nú
--annotater   r|   r}   r4   r   r   r   Útest_annotate_longú   s    
z*TestCythonizeArgsParser.test_annotate_longc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nú--annotate-fullcr   Úfullcr}   r4   r   r   r   Útest_annotate_fullc   s    
z+TestCythonizeArgsParser.test_annotate_fullcc                 C   sF   |   ddg¡\}}|  |dg¡ |  |  |dg¡¡ |  |jd¡ d S )Nr{   úfoo.pyxr   r|   )r   r*   r3   r-   r   r4   r   r   r   Útest_annotate_and_positional  s    z4TestCythonizeArgsParser.test_annotate_and_positionalc                 C   sR   |   ddg¡\}}|  |¡ |  |  |ddg¡¡ |  |jd¡ |  |jd¡ d S )Nr{   ry   r   r   r|   rw   )r   r2   r3   r-   r*   r   r   r4   r   r   r   Útest_annotate_and_optional  s
    
z2TestCythonizeArgsParser.test_annotate_and_optionalc                 C   sD   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  d|jk¡ d S )Nz-xú*.pyxr   ©r   r2   r3   r-   r   r4   r   r   r   Útest_exclude_short  s    
z*TestCythonizeArgsParser.test_exclude_shortc                 C   sD   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  d|jk¡ d S )Nú	--excluder‡   r   rˆ   r4   r   r   r   Útest_exclude_long  s    
z)TestCythonizeArgsParser.test_exclude_longc                 C   sJ   |   ddddg¡\}}|  |¡ |  |  |dg¡¡ |  |jddg¡ d S )NrŠ   r‡   z*.pyr   )r   r2   r3   r-   r*   r   r4   r   r   r   Útest_exclude_multiple  s    
z-TestCythonizeArgsParser.test_exclude_multiplec                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-br   T©r   r2   r3   r-   r*   r   r4   r   r   r   Útest_build_short%  s    
z(TestCythonizeArgsParser.test_build_shortc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz--buildr   Tr   r4   r   r   r   Útest_build_long+  s    
z'TestCythonizeArgsParser.test_build_longc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nú-ir   T©r   r2   r3   r-   r*   r   r4   r   r   r   Útest_inplace_short1  s    
z*TestCythonizeArgsParser.test_inplace_shortc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz	--inplacer   Tr‘   r4   r   r   r   Útest_inplace_long7  s    
z)TestCythonizeArgsParser.test_inplace_longc                 C   sB   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-jÚ42r'   rV   ©r   r2   r3   r-   r*   r'   r4   r   r   r   Útest_parallel_short=  s    
z+TestCythonizeArgsParser.test_parallel_shortc                 C   sB   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz
--parallelr”   r'   rV   r•   r4   r   r   r   Útest_parallel_longC  s    
z*TestCythonizeArgsParser.test_parallel_longc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nú-fr   T©r   r2   r3   r-   r*   r   r4   r   r   r   Útest_force_shortI  s    
z(TestCythonizeArgsParser.test_force_shortc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz--forcer   Tr™   r4   r   r   r   Útest_force_longO  s    
z'TestCythonizeArgsParser.test_force_longc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-qr    T©r   r2   r3   r-   r*   r    r4   r   r   r   Útest_quite_shortU  s    
z(TestCythonizeArgsParser.test_quite_shortc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz--quietr    Trœ   r4   r   r   r   Útest_quite_long[  s    
z'TestCythonizeArgsParser.test_quite_longc                 C   s@   |   dg¡\}}|  |  |dg¡¡ |  |¡ |  |jd¡ d S )Nú	--lenientr!   T)r   r3   r-   r2   r*   r!   r4   r   r   r   Útest_lenient_longa  s    
z)TestCythonizeArgsParser.test_lenient_longc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-kr"   T©r   r2   r3   r-   r*   r"   r4   r   r   r   Útest_keep_going_shortg  s    
z-TestCythonizeArgsParser.test_keep_going_shortc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz--keep-goingr"   Tr¡   r4   r   r   r   Útest_keep_going_longm  s    
z,TestCythonizeArgsParser.test_keep_going_longc                 C   s@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nú--no-docstringsr#   T)r   r2   r3   r-   r*   r#   r4   r   r   r   Útest_no_docstrings_longs  s    
z/TestCythonizeArgsParser.test_no_docstrings_longc                 C   sX   |   ddg¡\}}|  t|ƒd¡ |  |d d¡ |  |d d¡ |  |  |g ¡¡ d S )Nú	file1.pyxú	file2.pyxrt   r   é   )r   r*   r(   r3   r-   r4   r   r   r   Útest_file_namey  s
    z&TestCythonizeArgsParser.test_file_namec                 C   sF   |   ddg¡\}}|  |dg¡ |  |jd¡ |  |  |dg¡¡ d S )Nr   úfile.pyxTr   ©r   r*   r   r3   r-   r4   r   r   r   Útest_option_first€  s    z)TestCythonizeArgsParser.test_option_firstc                 C   sX   |   dddg¡\}}|  |dg¡ |  |jd¡ |  |jd¡ |  |  |ddg¡¡ d S )Nr   rª   r{   Tr|   r   r   )r   r*   r   r   r3   r-   r4   r   r   r   Útest_file_inbetween†  s
    z+TestCythonizeArgsParser.test_file_inbetweenc                 C   sF   |   ddg¡\}}|  |dg¡ |  |jd¡ |  |  |dg¡¡ d S )Nrª   r   Tr   r«   r4   r   r   r   Útest_option_trailing  s    z,TestCythonizeArgsParser.test_option_trailingc                 C   sJ   |   dddg¡\}}|  |ddg¡ |  |jd¡ |  |  |dg¡¡ d S )Nr¦   r{   r§   r|   r   ©r   r*   r   r3   r-   ©r   r   Úsourcesr   r   r   Útest_interspersed_positional“  s     þ
z4TestCythonizeArgsParser.test_interspersed_positionalc                 C   sP   |   dddddg¡\}}|  |dddg¡ |  |jd¡ |  |  |dg¡¡ d S )Nr¦   r{   r§   z	file3.pyxr|   r   r¯   r°   r   r   r   Útest_interspersed_positional2œ  s       þ
z5TestCythonizeArgsParser.test_interspersed_positional2c              
   C   sj   |   ddddddddg¡\}}|  |dddddg¡ |  |jd¡ |  |jd	¡ |  |  |d
dg¡¡ d S )Nr˜   Úf1Úf2r{   Zf3Zf4Zf5r|   Tr   r   )r   r*   r   r   r3   r-   r°   r   r   r   Útest_interspersed_positional3¥  s          þ
z5TestCythonizeArgsParser.test_interspersed_positional3c                 C   sD   t j}tƒ  }t _z|  t| jdg¡ W 5 |t _X |  | ¡ ¡ d S )Nz--unknown-option)ÚsysÚstderrr   r?   Ú
SystemExitr   r3   Úgetvalue)r   Z
old_stderrr¸   r   r   r   Útest_wrong_option¯  s    
ÿz)TestCythonizeArgsParser.test_wrong_optionN)AÚ__name__Ú
__module__Ú__qualname__r   r-   r6   r7   r:   r;   r<   r=   rC   rE   rF   rU   rW   r]   r^   ra   rb   rg   rh   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rv   rx   rz   r~   r€   rƒ   r…   r†   r‰   r‹   rŒ   rŽ   r   r’   r“   r–   r—   rš   r›   r   rž   r    r¢   r£   r¥   r©   r¬   r­   r®   r²   r³   r¶   r»   r   r   r   r   r      s|   		
r   c                   @   sP   e Zd Zdd„ Zdd„ Zg fdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestParseArgsc                 C   s   t ƒ | _d S r   )r   Ú_options_backupr   r   r   r   r   ¼  s    zTestParseArgs.setUpc                 C   s   t | jƒ d S r   )r   rÀ   r   r   r   r   ÚtearDown¿  s    zTestParseArgs.tearDownc                 C   s   |   t| j|ƒd¡ d S )Nr$   )r*   r	   rÀ   )r   Z
white_listr   r   r   Úcheck_default_global_optionsÂ  s    z*TestParseArgs.check_default_global_optionsc                 C   s*   t ddgƒ\}}|  |jd¡ |  ¡  d S )Nr„   r   T)r   r*   r   rÂ   r4   r   r   r   Útest_build_set_for_inplaceÅ  s    z(TestParseArgs.test_build_set_for_inplacec                 C   sL   t ddgƒ\}}|  |dg¡ |  tjd¡ |  tjd¡ |  ddg¡ d S )Nr„   rŸ   FÚerror_on_unknown_namesÚerror_on_uninitialized)r   r*   r   rÄ   rÅ   rÂ   r°   r   r   r   Útest_lenientÊ  s
    zTestParseArgs.test_lenientc                 C   s<   t ddgƒ\}}|  |dg¡ |  tjd¡ |  dg¡ d S )Nr„   r   r|   r   ©r   r*   r   r   rÂ   r°   r   r   r   Útest_annotateÑ  s    zTestParseArgs.test_annotatec                 C   s<   t ddgƒ\}}|  |dg¡ |  tjd¡ |  dg¡ d S )Nr„   r   r‚   r   rÇ   r°   r   r   r   rƒ   ×  s    z!TestParseArgs.test_annotate_fullcc                 C   s<   t ddgƒ\}}|  |dg¡ |  tjd¡ |  dg¡ d S )Nr„   r¤   Fre   )r   r*   r   re   rÂ   r°   r   r   r   Útest_no_docstringsÝ  s    z TestParseArgs.test_no_docstringsN)r¼   r½   r¾   r   rÁ   rÂ   rÃ   rÆ   rÈ   rƒ   rÉ   r   r   r   r   r¿   »  s   r¿   )ZCython.Build.Cythonizer   r   r   r   ZCython.Compilerr   ZCython.Compiler.Tests.Utilsr   r   r	   Zunittestr
   r·   Úior   r   r¿   r   r   r   r   Ú<module>   s      /