o
    wÖi!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   úg/home/ubuntu/sommelier/.venv/lib/python3.10/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   ÚskipÚempty_containersÚare_noneÚ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--directiver1   r   r2   Tr3   r6   r   r   r   Útest_directive_long-   r9   z+TestCythonizeArgsParser.test_directive_longc                 C   óX   |   g d¢¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )N)r0   r1   r0   zc_string_type=bytesr   r2   TÚc_string_typeÚbytesr3   r6   r   r   r   Útest_directive_multiple3   ó
   
z/TestCythonizeArgsParser.test_directive_multiplec                 C   óX   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )Nr0   z"cdivision=True,c_string_type=bytesr   r2   Tr<   r=   r3   r6   r   r   r   Útest_directive_multiple_v2:   r?   z2TestCythonizeArgsParser.test_directive_multiple_v2c                 C   r/   )Nr0   zcdivision=YeSr   r2   Tr3   r6   r   r   r   Útest_directive_value_yesA   r9   z0TestCythonizeArgsParser.test_directive_value_yesc                 C   r/   )Nr0   zcdivision=nor   r2   Fr3   r6   r   r   r   Útest_directive_value_noG   r9   z/TestCythonizeArgsParser.test_directive_value_noc                 C   óB   |   t¡}|  ddg¡\}}W d   ƒ d S 1 sw   Y  d S )Nr0   zcdivision=sadfasd©ÚassertRaisesÚ
ValueErrorr   ©r   Úcontextr   r7   r   r   r   Útest_directive_value_invalidM   ó   "ÿz4TestCythonizeArgsParser.test_directive_value_invalidc                 C   rD   )Nr0   ÚabracadabrarE   rH   r   r   r   Útest_directive_key_invalidQ   rK   z2TestCythonizeArgsParser.test_directive_key_invalidc                 C   rD   )Nr0   r2   rE   rH   r   r   r   Útest_directive_no_valueU   rK   z/TestCythonizeArgsParser.test_directive_no_valuec                 C   sŠ   g d¢}|D ]<\}}dj |t|ƒd}|  d|g¡\}}|  |¡ | j|  |dg¡d| d |dkr5d	}| j|j| |d| d qd S )
N)
)Úauto_pickleT©r<   Ú	bytearray)r<   r=   )r<   ÚstrrP   )r<   Úunicode)Úc_string_encodingÚascii)r   Ú2)r   Ú3)Úset_initial_pathÚmy_initial_pathú{key}={value}©ÚkeyÚvaluer0   r   úError for option: r$   rS   rR   )ÚformatrR   r   r4   r5   r.   r)   r   )r   r   r\   r]   Úcmdr   r7   r   r   r   Útest_directives_typesY   s   
ùz-TestCythonizeArgsParser.test_directives_typesc              	   C   sp   g d¢}|D ]/\}}dj |t|ƒd}| jtd| d}|  d|g¡\}}W d   ƒ n1 s0w   Y  qd S )N))rO   é*   )rO   ÚNONONO)r<   ÚbitesrZ   r[   r^   r$   r0   )r_   rR   rF   rG   r   )r   r   r\   r]   r`   rI   r   r7   r   r   r   Útest_directives_wrongp   s   ÿ€þz-TestCythonizeArgsParser.test_directives_wrongc                 C   r/   )Nú-Eú	MYSIZE=10r   ÚMYSIZEé
   ©r   r4   r5   r.   r)   r   r6   r   r   r   Útest_compile_time_env_short}   r9   z3TestCythonizeArgsParser.test_compile_time_env_shortc                 C   r/   )Nz--compile-time-envrg   r   rh   ri   rj   r6   r   r   r   Útest_compile_time_env_longƒ   r9   z2TestCythonizeArgsParser.test_compile_time_env_longc                 C   r;   )N)rf   rg   rf   z
ARRSIZE=11r   rh   ri   ÚARRSIZEé   rj   r6   r   r   r   Útest_compile_time_env_multiple‰   r?   z6TestCythonizeArgsParser.test_compile_time_env_multiplec                 C   r@   )Nrf   zMYSIZE=10,ARRSIZE=11r   rh   ri   rm   rn   rj   r6   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   r4   r5   r.   r)   r   r6   r   r   r   Útest_option_short˜   r9   z)TestCythonizeArgsParser.test_option_shortc                 C   r/   )Nz--optionrr   r   rs   Trt   r6   r   r   r   Útest_option_longž   r9   z(TestCythonizeArgsParser.test_option_longc                 C   sX   |   g d¢¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ |  |jd d¡ d S )N)rq   rr   rq   zbuffer_max_dims=8r   rs   TÚbuffer_max_dimsrt   r6   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 )Nrq   z!docstrings=True,buffer_max_dims=8r   rs   Trw   rt   r6   r   r   r   Útest_option_multiple_v2«   r?   z/TestCythonizeArgsParser.test_option_multiple_v2c                 C   r/   )Nrq   zdocstrings=YeSr   rs   Trt   r6   r   r   r   Útest_option_value_yes²   r9   z-TestCythonizeArgsParser.test_option_value_yesc                 C   r/   )Nrq   zdocstrings=4242r   rs   Trt   r6   r   r   r   Útest_option_value_4242¸   r9   z.TestCythonizeArgsParser.test_option_value_4242c                 C   r/   )Nrq   zdocstrings=0r   rs   Frt   r6   r   r   r   Útest_option_value_0¾   r9   z+TestCythonizeArgsParser.test_option_value_0c                 C   r/   )Nrq   zdocstrings=r   rs   Trt   r6   r   r   r   Útest_option_value_emptystrÄ   r9   z2TestCythonizeArgsParser.test_option_value_emptystrc                 C   r/   )Nrq   zdocstrings=BBr   rs   Trt   r6   r   r   r   Útest_option_value_a_strÊ   r9   z/TestCythonizeArgsParser.test_option_value_a_strc                 C   r/   )Nrq   zdocstrings=nOr   rs   Frt   r6   r   r   r   Útest_option_value_noÐ   r9   z,TestCythonizeArgsParser.test_option_value_noc                 C   óF   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd d¡ d S )Nrq   rs   r   Trt   r6   r   r   r   Útest_option_no_valueÖ   r9   z,TestCythonizeArgsParser.test_option_no_valuec                 C   r€   )Nrq   rL   r   Trt   r6   r   r   r   Útest_option_any_keyÜ   r9   z+TestCythonizeArgsParser.test_option_any_keyc                 C   ó@   |   dg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-2r   é   ©r   r4   r5   r.   r)   r   r6   r   r   r   Útest_language_level_2â   ó   
z-TestCythonizeArgsParser.test_language_level_2c                 C   rƒ   )Nz-3r   é   r…   r6   r   r   r   Útest_language_level_3è   r‡   z-TestCythonizeArgsParser.test_language_level_3c                 C   rƒ   )Nú--3strr   rˆ   r…   r6   r   r   r   Útest_language_level_3strî   r‡   z0TestCythonizeArgsParser.test_language_level_3strc                 C   rƒ   )Nú-ar   Údefault©r   r4   r5   r.   r)   r   r6   r   r   r   Útest_annotate_shortô   r‡   z+TestCythonizeArgsParser.test_annotate_shortc                 C   rƒ   )Nú
--annotater   r   rŽ   r6   r   r   r   Útest_annotate_longú   r‡   z*TestCythonizeArgsParser.test_annotate_longc                 C   rƒ   )Nú--annotate-fullcr   ÚfullcrŽ   r6   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)   r5   r.   r   r6   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   rˆ   )r   r4   r5   r.   r)   r   r   r6   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   r4   r5   r.   r   r6   r   r   r   Útest_exclude_short  ó   
z*TestCythonizeArgsParser.test_exclude_shortc                 C   r˜   )Nú	--excluder™   r   rš   r6   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   r4   r5   r.   r)   r   r6   r   r   r   Útest_exclude_multiple  r9   z-TestCythonizeArgsParser.test_exclude_multiplec                 C   rƒ   )Nz-br   T©r   r4   r5   r.   r)   r   r6   r   r   r   Útest_build_short%  r‡   z(TestCythonizeArgsParser.test_build_shortc                 C   rƒ   )Nz--buildr   Tr¡   r6   r   r   r   Útest_build_long+  r‡   z'TestCythonizeArgsParser.test_build_longc                 C   rƒ   )Nú-ir   T©r   r4   r5   r.   r)   r   r6   r   r   r   Útest_inplace_short1  r‡   z*TestCythonizeArgsParser.test_inplace_shortc                 C   rƒ   )Nz	--inplacer   Tr¥   r6   r   r   r   Útest_inplace_long7  r‡   z)TestCythonizeArgsParser.test_inplace_longc                 C   óB   |   ddg¡\}}|  |¡ |  |  |dg¡¡ |  |jd¡ d S )Nz-jÚ42r&   rb   ©r   r4   r5   r.   r)   r&   r6   r   r   r   Útest_parallel_short=  ó   
z+TestCythonizeArgsParser.test_parallel_shortc                 C   r¨   )Nz
--parallelr©   r&   rb   rª   r6   r   r   r   Útest_parallel_longC  r¬   z*TestCythonizeArgsParser.test_parallel_longc                 C   rƒ   )Nú-fr   T©r   r4   r5   r.   r)   r   r6   r   r   r   Útest_force_shortI  r‡   z(TestCythonizeArgsParser.test_force_shortc                 C   rƒ   )Nz--forcer   Tr¯   r6   r   r   r   Útest_force_longO  r‡   z'TestCythonizeArgsParser.test_force_longc                 C   rƒ   )Nz-qr   T©r   r4   r5   r.   r)   r   r6   r   r   r   Útest_quite_shortU  r‡   z(TestCythonizeArgsParser.test_quite_shortc                 C   rƒ   )Nz--quietr   Tr²   r6   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   r5   r.   r4   r)   r    r6   r   r   r   Útest_lenient_longa  s   
z)TestCythonizeArgsParser.test_lenient_longc                 C   rƒ   )Nz-kr!   T©r   r4   r5   r.   r)   r!   r6   r   r   r   Útest_keep_going_shortg  r‡   z-TestCythonizeArgsParser.test_keep_going_shortc                 C   rƒ   )Nz--keep-goingr!   Tr·   r6   r   r   r   Útest_keep_going_longm  r‡   z,TestCythonizeArgsParser.test_keep_going_longc                 C   rƒ   )Nú--no-docstringsr"   T)r   r4   r5   r.   r)   r"   r6   r   r   r   Útest_no_docstrings_longs  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.pyxr„   r   é   )r   r)   r'   r5   r.   r6   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   r5   r.   r6   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   r5   r.   r6   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Á   r6   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   r5   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   r5   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   rF   Ú
SystemExitr   r5   Úgetvalue)r   Ú
old_stderrrÔ   r   r   r   Útest_wrong_option¯  s   
ÿz)TestCythonizeArgsParser.test_wrong_optionN)AÚ__name__Ú
__module__Ú__qualname__r   r.   r8   r:   r>   rA   rB   rC   rJ   rM   rN   ra   re   rk   rl   ro   rp   ru   rv   rx   ry   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Ò   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   Ú
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à   r6   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º   Frs   )r   r)   r   rs   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Ü   )ÚCython.Build.Cythonizer   r   r   r   ÚCython.Compilerr   ÚCython.Compiler.Tests.Utilsr   r   r	   Úunittestr
   rÓ   Úior   r   rÜ   r   r   r   r   Ú<module>   s       /