U
    †µ“ezO  ã                   @   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zd dlmZ W n  ek
r|   d dlmZ Y nX 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-7k3cqui1/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_long0   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_multiple6   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_yesD   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_noJ   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_invalidP   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_invalidT   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_valueX   s    z/TestCythonizeArgsParser.test_directive_no_valuec                 C   s–   dddddddddd	d
dœ}|  ¡ D ]l\}}dj|t|ƒd}|  d|g¡\}}|  |¡ | j|  |dg¡d| d | j|j| |d| d q$d S )NTÚ	bytearrayr9   ÚstrÚunicodeÚasciié   é   Ú3strZmy_initial_path)Úauto_pickler8   r8   r8   r8   r8   Zc_string_encodingr   r   r   Zset_initial_pathú{key}={value}©ÚkeyÚvaluer.   r   úError for option: r%   )	ÚitemsÚformatrH   r   r2   r3   r-   r*   r   )r   r   rQ   rR   Úcmdr   r5   r   r   r   Útest_directives_types\   s$    õ
z-TestCythonizeArgsParser.test_directives_typesc              
   C   sd   ddddœ}|  ¡ D ]J\}}dj|t|ƒd}| jtd| d}|  d	|g¡\}}W 5 Q R X qd S )
Né*   ZNONONOZbites)rN   rN   r8   rO   rP   rS   r%   r.   )rT   rU   rH   r?   r@   r   )r   r   rQ   rR   rV   rB   r   r5   r   r   r   Útest_directives_wrongq   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-envr[   r   r\   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 )	NrZ   r[   z
ARRSIZE=11r   r\   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 )NrZ   zMYSIZE=10,ARRSIZE=11r   r\   r]   ra   rb   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--optionrf   r   rg   Trh   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 )Nre   rf   zbuffer_max_dims=8r   rg   TÚbuffer_max_dimsrh   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 )Nre   z!docstrings=True,buffer_max_dims=8r   rg   Trk   rh   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 )Nre   zdocstrings=YeSr   rg   Trh   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 )Nre   zdocstrings=4242r   rg   Trh   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 )Nre   zdocstrings=0r   rg   Frh   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 )Nre   zdocstrings=r   rg   Trh   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 )Nre   zdocstrings=BBr   rg   Trh   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 )Nre   zdocstrings=nOr   rg   Frh   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 )Nre   rg   r   Trh   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 )Nre   rD   r   Trh   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   rK   ©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   rL   rv   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   rM   rv   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|   rM   )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_short2  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_long8  s    
z)TestCythonizeArgsParser.test_inplace_longc                 C   sB   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-jÚ42r'   rX   ©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'   rX   r•   r4   r   r   r   Útest_parallel_longD  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_shortJ  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_longP  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_shortV  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_longb  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_shorth  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_longn  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_longt  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.pyxrK   r   é   )r   r*   r(   r3   r-   r4   r   r   r   Útest_file_namez  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   rW   rY   r_   r`   rc   rd   ri   rj   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rw   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¤   Frg   )r   r*   r   rg   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·   r   ÚImportErrorÚior   r¿   r   r   r   r   Ú<module>   s      -