o
    €e\Q  ã                   @   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y=   d dlmZ Y nw 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   úZD:\Projects\ConvertPro\env\Lib\site-packages\Cython/Build/Tests/TestCythonizeArgsParser.pyÚ<lambda>   s   
 z/TestCythonizeArgsParser.setUp.<locals>.<lambda>)r
   ÚsetUpr   r   ©Úselfr   r   r   r      s   
zTestCythonizeArgsParser.setUpc                 C   s¢   g d¢}g d¢}|D ]}t t||ƒƒdkr&||vr&| j|dd| d  dS q
|D ]}t||ƒd urC||vrC| j|dd| d  dS q)|jtkrOd|vrOd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_noneZopt_namer   r   r   Úare_default   s   €€z#TestCythonizeArgsParser.are_defaultc                 C   óF   |   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*   ó   
z,TestCythonizeArgsParser.test_directive_shortc                 C   r,   )Nz--directiver.   r   r/   Tr0   r3   r   r   r   Útest_directive_long0   r6   z+TestCythonizeArgsParser.test_directive_longc                 C   óX   |   g d¢¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )N)r-   r.   r-   zc_string_type=bytesr   r/   TÚc_string_typeÚbytesr0   r3   r   r   r   Útest_directive_multiple6   ó
   
z/TestCythonizeArgsParser.test_directive_multiplec                 C   óX   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )Nr-   z"cdivision=True,c_string_type=bytesr   r/   Tr9   r:   r0   r3   r   r   r   Útest_directive_multiple_v2=   r<   z2TestCythonizeArgsParser.test_directive_multiple_v2c                 C   r,   )Nr-   zcdivision=YeSr   r/   Tr0   r3   r   r   r   Útest_directive_value_yesD   r6   z0TestCythonizeArgsParser.test_directive_value_yesc                 C   r,   )Nr-   zcdivision=nor   r/   Fr0   r3   r   r   r   Útest_directive_value_noJ   r6   z/TestCythonizeArgsParser.test_directive_value_noc                 C   óB   |   t¡}|  ddg¡\}}W d   ƒ d S 1 sw   Y  d S )Nr-   zcdivision=sadfasd©ÚassertRaisesÚ
ValueErrorr   ©r   Úcontextr   r4   r   r   r   Útest_directive_value_invalidP   ó   "ÿz4TestCythonizeArgsParser.test_directive_value_invalidc                 C   rA   )Nr-   ÚabracadabrarB   rE   r   r   r   Útest_directive_key_invalidT   rH   z2TestCythonizeArgsParser.test_directive_key_invalidc                 C   rA   )Nr-   r/   rB   rE   r   r   r   Útest_directive_no_valueX   rH   z/TestCythonizeArgsParser.test_directive_no_valuec                 C   s–   dddddddddd	d
dœ}|  ¡ D ]6\}}dj|t|ƒd}|  d|g¡\}}|  |¡ | j|  |dg¡d| d | j|j| |d| d qd S )NTÚ	bytearrayr:   ÚstrÚunicodeÚasciié   é   Ú3strZmy_initial_path)Úauto_pickler9   r9   r9   r9   r9   Zc_string_encodingr   r   r   Zset_initial_pathú{key}={value}©ÚkeyÚvaluer-   r   úError for option: r$   )	ÚitemsÚformatrM   r   r1   r2   r+   r)   r   )r   r   rV   rW   Úcmdr   r4   r   r   r   Útest_directives_types\   s&   õ
ûz-TestCythonizeArgsParser.test_directives_typesc              	   C   sx   ddddœ}|  ¡ D ]/\}}dj|t|ƒd}| jtd| d}|  d	|g¡\}}W d   ƒ n1 s4w   Y  q
d S )
Né*   ZNONONOZbites)rS   rS   r9   rT   rU   rX   r$   r-   )rY   rZ   rM   rC   rD   r   )r   r   rV   rW   r[   rF   r   r4   r   r   r   Útest_directives_wrongq   s   ýÿ€þz-TestCythonizeArgsParser.test_directives_wrongc                 C   r,   )Nú-Eú	MYSIZE=10r   ÚMYSIZEé
   ©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_compile_time_env_short~   r6   z3TestCythonizeArgsParser.test_compile_time_env_shortc                 C   r,   )Nz--compile-time-envr`   r   ra   rb   rc   r3   r   r   r   Útest_compile_time_env_long„   r6   z2TestCythonizeArgsParser.test_compile_time_env_longc                 C   r8   )N)r_   r`   r_   z
ARRSIZE=11r   ra   rb   ÚARRSIZEé   rc   r3   r   r   r   Útest_compile_time_env_multipleŠ   r<   z6TestCythonizeArgsParser.test_compile_time_env_multiplec                 C   r=   )Nr_   zMYSIZE=10,ARRSIZE=11r   ra   rb   rf   rg   rc   r3   r   r   r   Ú!test_compile_time_env_multiple_v2‘   r<   z9TestCythonizeArgsParser.test_compile_time_env_multiple_v2c                 C   r,   )Nú-súdocstrings=Truer   Ú
docstringsT©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_option_short™   r6   z)TestCythonizeArgsParser.test_option_shortc                 C   r,   )Nz--optionrk   r   rl   Trm   r3   r   r   r   Útest_option_longŸ   r6   z(TestCythonizeArgsParser.test_option_longc                 C   sX   |   g d¢¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )N)rj   rk   rj   zbuffer_max_dims=8r   rl   TÚbuffer_max_dimsrm   r3   r   r   r   Útest_option_multiple¥   r<   z,TestCythonizeArgsParser.test_option_multiplec                 C   sX   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )Nrj   z!docstrings=True,buffer_max_dims=8r   rl   Trp   rm   r3   r   r   r   Útest_option_multiple_v2¬   r<   z/TestCythonizeArgsParser.test_option_multiple_v2c                 C   r,   )Nrj   zdocstrings=YeSr   rl   Trm   r3   r   r   r   Útest_option_value_yes³   r6   z-TestCythonizeArgsParser.test_option_value_yesc                 C   r,   )Nrj   zdocstrings=4242r   rl   Trm   r3   r   r   r   Útest_option_value_4242¹   r6   z.TestCythonizeArgsParser.test_option_value_4242c                 C   r,   )Nrj   zdocstrings=0r   rl   Frm   r3   r   r   r   Útest_option_value_0¿   r6   z+TestCythonizeArgsParser.test_option_value_0c                 C   r,   )Nrj   zdocstrings=r   rl   Trm   r3   r   r   r   Útest_option_value_emptystrÅ   r6   z2TestCythonizeArgsParser.test_option_value_emptystrc                 C   r,   )Nrj   zdocstrings=BBr   rl   Trm   r3   r   r   r   Útest_option_value_a_strË   r6   z/TestCythonizeArgsParser.test_option_value_a_strc                 C   r,   )Nrj   zdocstrings=nOr   rl   Frm   r3   r   r   r   Útest_option_value_noÑ   r6   z,TestCythonizeArgsParser.test_option_value_noc                 C   óF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrj   rl   r   Trm   r3   r   r   r   Útest_option_no_value×   r6   z,TestCythonizeArgsParser.test_option_no_valuec                 C   ry   )Nrj   rI   r   Trm   r3   r   r   r   Útest_option_any_keyÝ   r6   z+TestCythonizeArgsParser.test_option_any_keyc                 C   ó@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-2r   rP   ©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_language_level_2ã   ó   
z-TestCythonizeArgsParser.test_language_level_2c                 C   r|   )Nz-3r   rQ   r}   r3   r   r   r   Útest_language_level_3é   r   z-TestCythonizeArgsParser.test_language_level_3c                 C   r|   )Nú--3strr   rR   r}   r3   r   r   r   Útest_language_level_3strï   r   z0TestCythonizeArgsParser.test_language_level_3strc                 C   r|   )Nú-ar   Údefault©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_annotate_shortõ   r   z+TestCythonizeArgsParser.test_annotate_shortc                 C   r|   )Nú
--annotater   r„   r…   r3   r   r   r   Útest_annotate_longû   r   z*TestCythonizeArgsParser.test_annotate_longc                 C   r|   )Nú--annotate-fullcr   Úfullcr…   r3   r   r   r   Útest_annotate_fullc  r   z+TestCythonizeArgsParser.test_annotate_fullcc                 C   sF   |   ddg¡\}}|  |dg¡ |  |  |dg¡¡ |  |jd¡ d S )Nrƒ   úfoo.pyxr   r„   )r   r)   r2   r+   r   r3   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ƒ   r   r   r   r„   rR   )r   r1   r2   r+   r)   r   r   r3   r   r   r   Útest_annotate_and_optional  s
   
z2TestCythonizeArgsParser.test_annotate_and_optionalc                 C   óD   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  d|jv ¡ d S )Nz-xú*.pyxr   ©r   r1   r2   r+   r   r3   r   r   r   Útest_exclude_short  ó   
z*TestCythonizeArgsParser.test_exclude_shortc                 C   r   )Nú	--excluder   r   r‘   r3   r   r   r   Útest_exclude_long  r“   z)TestCythonizeArgsParser.test_exclude_longc                 C   sF   |   g d¢¡\}}|  |¡ |  |  |dg¡¡ |  |jddg¡ d S )N)r”   r   r”   ú*.pyr   r   r–   )r   r1   r2   r+   r)   r   r3   r   r   r   Útest_exclude_multiple   r6   z-TestCythonizeArgsParser.test_exclude_multiplec                 C   r|   )Nz-br   T©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_build_short&  r   z(TestCythonizeArgsParser.test_build_shortc                 C   r|   )Nz--buildr   Tr˜   r3   r   r   r   Útest_build_long,  r   z'TestCythonizeArgsParser.test_build_longc                 C   r|   )Nú-ir   T©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_inplace_short2  r   z*TestCythonizeArgsParser.test_inplace_shortc                 C   r|   )Nz	--inplacer   Trœ   r3   r   r   r   Útest_inplace_long8  r   z)TestCythonizeArgsParser.test_inplace_longc                 C   óB   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-jÚ42r&   r]   ©r   r1   r2   r+   r)   r&   r3   r   r   r   Útest_parallel_short>  ó   
z+TestCythonizeArgsParser.test_parallel_shortc                 C   rŸ   )Nz
--parallelr    r&   r]   r¡   r3   r   r   r   Útest_parallel_longD  r£   z*TestCythonizeArgsParser.test_parallel_longc                 C   r|   )Nú-fr   T©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_force_shortJ  r   z(TestCythonizeArgsParser.test_force_shortc                 C   r|   )Nz--forcer   Tr¦   r3   r   r   r   Útest_force_longP  r   z'TestCythonizeArgsParser.test_force_longc                 C   r|   )Nz-qr   T©r   r1   r2   r+   r)   r   r3   r   r   r   Útest_quite_shortV  r   z(TestCythonizeArgsParser.test_quite_shortc                 C   r|   )Nz--quietr   Tr©   r3   r   r   r   Útest_quite_long\  r   z'TestCythonizeArgsParser.test_quite_longc                 C   s@   |   dg¡\}}|  |  |dg¡¡ |  |¡ |  |jd¡ d S )Nú	--lenientr    T)r   r2   r+   r1   r)   r    r3   r   r   r   Útest_lenient_longb  s   
z)TestCythonizeArgsParser.test_lenient_longc                 C   r|   )Nz-kr!   T©r   r1   r2   r+   r)   r!   r3   r   r   r   Útest_keep_going_shorth  r   z-TestCythonizeArgsParser.test_keep_going_shortc                 C   r|   )Nz--keep-goingr!   Tr®   r3   r   r   r   Útest_keep_going_longn  r   z,TestCythonizeArgsParser.test_keep_going_longc                 C   r|   )Nú--no-docstringsr"   T)r   r1   r2   r+   r)   r"   r3   r   r   r   Útest_no_docstrings_longt  r   z/TestCythonizeArgsParser.test_no_docstrings_longc                 C   sX   |   ddg¡\}}|  t|ƒd¡ |  |d d¡ |  |d d¡ |  |  |g ¡¡ d S )Nú	file1.pyxú	file2.pyxrP   r   é   )r   r)   r'   r2   r+   r3   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   r2   r+   r3   r   r   r   Útest_option_first  ó   z)TestCythonizeArgsParser.test_option_firstc                 C   sV   |   g d¢¡\}}|  |dg¡ |  |jd¡ |  |jd¡ |  |  |ddg¡¡ d S )N)r›   r·   rƒ   r·   Tr„   r   r   )r   r)   r   r   r2   r+   r3   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¸   r3   r   r   r   Útest_option_trailingŽ  rº   z,TestCythonizeArgsParser.test_option_trailingc                 C   sH   |   g d¢¡\}}|  |ddg¡ |  |jd¡ |  |  |dg¡¡ d S )N)r³   rƒ   r´   r³   r´   r„   r   ©r   r)   r   r2   r+   ©r   r   Úsourcesr   r   r   Útest_interspersed_positional”  ó   z4TestCythonizeArgsParser.test_interspersed_positionalc                 C   sH   |   g d¢¡\}}|  |g d¢¡ |  |jd¡ |  |  |dg¡¡ d S )N)r³   rƒ   r´   rƒ   ú	file3.pyx)r³   r´   rÂ   r„   r   r½   r¾   r   r   r   Útest_interspersed_positional2  rÁ   z5TestCythonizeArgsParser.test_interspersed_positional2c                 C   sX   |   g d¢¡\}}|  |g d¢¡ |  |jd¡ |  |jd¡ |  |  |ddg¡¡ d S )N)r¥   Úf1Úf2rƒ   Úf3Úf4rƒ   Úf5)rÄ   rÅ   rÆ   rÇ   rÈ   r„   Tr   r   )r   r)   r   r   r2   r+   r¾   r   r   r   Útest_interspersed_positional3¦  s
   z5TestCythonizeArgsParser.test_interspersed_positional3c                 C   sJ   t j}tƒ  }t _z|  t| jdg¡ W |t _n|t _w |  | ¡ ¡ d S )Nz--unknown-option)ÚsysÚstderrr   rC   Ú
SystemExitr   r2   Úgetvalue)r   Z
old_stderrrË   r   r   r   Útest_wrong_option°  s   
ÿz)TestCythonizeArgsParser.test_wrong_optionN)AÚ__name__Ú
__module__Ú__qualname__r   r+   r5   r7   r;   r>   r?   r@   rG   rJ   rK   r\   r^   rd   re   rh   ri   rn   ro   rq   rr   rs   rt   ru   rv   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   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Õ   r3   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   ó<   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Ò  ó   zTestParseArgs.test_annotatec                 C   rÚ   )NrŒ   r‰   rŠ   r   rÛ   r¾   r   r   r   r‹   Ø  rÝ   z!TestParseArgs.test_annotate_fullcc                 C   rÚ   )NrŒ   r±   Frl   )r   r)   r   rl   rÕ   r¾   r   r   r   Útest_no_docstringsÞ  rÝ   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    ÿ   -