
    -PhV                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 ddl
mZ ddlmZ dd	lmZmZmZ e j        j        Zd
 Z ed e	e                     G d de                      ZdS )    N)StringIO)TestCase)patchMock   )Options)parse_command_line   )backup_Optionsrestore_Optionscheck_global_optionsc           
          | dt           j                            dd          t           j                            dd          dddddd	f	v rd
S t          |           S )N
source.pyx	/work/dirmy_working_pathfile.pyx	file1.pyx	file2.pyx	file3.pyxfoo.pyxbar.pyxT)ospathjoinunpatched_exists)r   s    a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/Tests/TestCmdLine.pypatched_existsr      se    
[,//
&55
 
 
 tD!!!    zos.path.exists)side_effect)newc                   f   e Zd Zd Zd Zg fdZg fdZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9S ):CmdLineParserTestc                 ,    t                      | _        d S N)r   _options_backupselfs    r   setUpzCmdLineParserTest.setUp!   s    -//r   c                 .    t          | j                   d S r$   )r   r%   r&   s    r   tearDownzCmdLineParserTest.tearDown$   s    ,-----r   c                 X    |                      t          | j        |          d           d S )N )assertEqualr   r%   )r'   
white_lists     r   check_default_global_optionsz.CmdLineParserTest.check_default_global_options'   s-    -d.BJOOQSTTTTTr   c                    t          j        t           j                  }t                      }|j                                        D ]>}||vr8|                     t          |||          t          ||          d|z              ?d S )Nzerror in option )msg)r   CompilationOptionsdefault_optionsobject__dict__keysr-   getattr)r'   optionsr.   r3   no_valuenames         r   check_default_optionsz'CmdLineParserTest.check_default_options*   s    !4W5LMM88#,1133 	B 	BD:%%  $!A!A7?\`CaCagy  }A  hA   B  B  B	B 	Br   c                 \   t          g d          \  }}|                     |           |                     |j                   |                     |j                   |                     |j                   |                     |j                   |                     |j        dk               |                     t          j	                   |                     t          j
                   |                     t          j                   |                     |j        d           t          g d          \  }}|                     |           |                     t          |          dk               |                     |j                   |                     |j        d           d S )N)-Vz-lz-+z-t-vr>   r>   z-pz-D-az-3   )z-fz-2r   r
   r   )r	   assertFalse
assertTrueshow_versionuse_listing_filecplus
timestampsverboser   embed_pos_in_docstring
docstringsannotater-   language_levellenr'   r8   sourcess      r   test_short_optionsz$CmdLineParserTest.test_short_options1   s   - /
 /
 /
   	!!!,---0111&&&*+++1,---6777+,,,()))/333- /
 /
 /
   	   G)***+,,,/33333r   c                    t          g d          \  }}|                     |           |                     |j                   |                     |j                   |                     |j                   |                     t          j        d           |                     |j	                   |                     |j
        dk               |                     t          j                   |                     t          j                   |                     t          j                   |                     t          j                   |                     t          j                   t          ddg          \  }}|                     |           |                     t!          |          dk               |                     |j	                   d S )N)z	--versionz--create-listingz--cplus--embed--timestamps	--verboserS   rS   z--embed-positionsz--no-docstrings
--annotatez	--lenientmainr@   z--forcer   r
   )r	   rA   rB   rC   rD   rE   r-   r   embedrF   rG   rH   rI   rJ   error_on_unknown_nameserror_on_uninitializedrL   rM   s      r   test_long_optionsz#CmdLineParserTest.test_long_optionsH   s   - /
 /
 /
  
 	!!!,---0111&&&///*+++1,---6777+,,,()))78887888-|/
   	   G)***+,,,,,r   c                 "   t          g d          \  }}|                     |dg           |                     t          j        d           |                     |j        g d           |                     |j        d           |                     |j        d           |                     t          j        d           |                     t          j        d           | 	                    t          j
                   |                     t          j        d	           | 	                    |j                   |                     |j        d
           |                     |j        d         d           |                     |j        d           d S )N)--embed=huhuz-I/test/include/dir1z --include-dir=/test/include/dir2z--include-dir/test/include/dir3z--working=/work/dirr   z--output-file=/output/dirz--pre-import=/pre/importz--cleanup=3z--annotate-coverage=cov.xmlz--gdb-outdir=/gdb/outdirz--directive=wraparound=falsez--shared=foo.sharedr   huhu)z/test/include/dir1z/test/include/dir2r\   r   z/output/dirz/pre/importr@   zcov.xmlz/gdb/outdir
wraparoundFz
foo.shared)r	   r-   r   rV   include_pathworking_pathoutput_file
pre_importgenerate_cleanup_coderB   rJ   annotate_coverage_xml	gdb_debug
output_dircompiler_directivesshared_utility_qualified_namerM   s      r   test_options_with_valuesz*CmdLineParserTest.test_options_with_valuesb   st   - /
 /
 /
   	<.111///-/q/q/qrrr-{;;;,m<<<+];;;6:::()))6	BBB)***+];;;4\BEJJJ>MMMMMr   c                     t          ddg          \  }}|                     |dg           |                     t          j        d           d S )NrQ   r   rU   r	   r-   r   rV   rM   s      r   test_embed_before_positionalz.CmdLineParserTest.test_embed_before_positional   sY    -/
   	<.111/////r   c                     t          g d          \  }}|                     |dg           |                     t          j        d           d S )N)rQ   r[   r   r   r]   rk   rM   s      r   test_two_embedsz!CmdLineParserTest.test_two_embeds   ]    - /
 /
 /
   	<.111/////r   c                     t          g d          \  }}|                     |dg           |                     t          j        d           d S )N)r[   rQ   r   r   rU   rk   rM   s      r   test_two_embeds2z"CmdLineParserTest.test_two_embeds2   ro   r   c                 l    t          ddg          \  }}|                     t          j                   d S )Nr[   r   )r	   rA   r   rJ   rM   s      r   test_no_annotatez"CmdLineParserTest.test_no_annotate   s?    -L/
   	)*****r   c                 n    t          ddg          \  }}|                     t          j        d           d S )Nr?   r   defaultr	   r-   r   rJ   rM   s      r   test_annotate_shortz%CmdLineParserTest.test_annotate_short   sB    -/
   	)955555r   c                 n    t          ddg          \  }}|                     t          j        d           d S )NrT   r   ru   rv   rM   s      r   test_annotate_longz$CmdLineParserTest.test_annotate_long   sB    -/
   	)955555r   c                 n    t          ddg          \  }}|                     t          j        d           d S )N--annotate-fullcr   fullcrv   rM   s      r   test_annotate_fullcz%CmdLineParserTest.test_annotate_fullc   sB    -/
   	)733333r   c                     t          g d          \  }}|                     |j        d           |                                  |                     |dg           d S )N)z-wr   r   r   r`   )r	   r-   r`   r/   r;   rM   s      r   test_short_wzCmdLineParserTest.test_short_w   sr    - /
 /
 /
   	-/@AAA))+++""7^,<=====r   c                     t          g d          \  }}|                     |j        d           |                                  |                     |dg           d S )N)z-o	my_outputr   r   ra   )r	   r-   ra   r/   r;   rM   s      r   test_short_ozCmdLineParserTest.test_short_o   sp    - /
 /
 /
   	,k:::))+++""7]O<<<<<r   c                     t          g d          \  }}|                     t          j        d           |                     dg           |                     |           d S )N)z-zmy_preimportr   r   rb   )r	   r-   r   rb   r/   r;   rM   s      r   test_short_zzCmdLineParserTest.test_short_z   sp    - /
 /
 /
   	+^<<<))<.999""7+++++r   c                     t          ddg          \  }}|                     t          j        d           |                     dg           |                     |           d S )Nz--convert-ranger   Tconvert_range)r	   r-   r   r   r/   r;   rM   s      r   test_convert_rangez$CmdLineParserTest.test_convert_range   sm    -/
   	.555))?*;<<<""7+++++r   c                     t          ddg          \  }}|                     |j        d           |                                  |                     |dg           d S )Nz--line-directivesr   Temit_linenums)r	   r-   r   r/   r;   rM   s      r   test_line_directivesz&CmdLineParserTest.test_line_directives   sm    -/
   	.555))+++""7_,=>>>>>r   c                     t          ddg          \  }}|                     |j        d           |                                  |                     |dg           d S )Nz--no-c-in-tracebackr   Fc_line_in_traceback)r	   r-   r   r/   r;   rM   s      r   test_no_c_in_tracebackz(CmdLineParserTest.test_no_c_in_traceback   sn    -!/
   	4e<<<))+++""7-B,CDDDDDr   c                    t          ddg          \  }}|                     |j        d           |                     |j        t          j                   |                                  |                     |ddg           d S )N--gdbr   Tre   rf   r	   r-   re   rf   r   curdirr/   r;   rM   s      r   test_gdbzCmdLineParserTest.test_gdb   s    -/
   	*D111+RY777))+++""7[,,GHHHHHr   c                     t          ddg          \  }}|                     |j        d           |                                  |                     |dg           d S )Nz--3strr   3rK   )r	   r-   rK   r/   r;   rM   s      r   	test_3strzCmdLineParserTest.test_3str   sn    -/
   	/555))+++""7-=,>?????r   c                     t          ddg          \  }}|                     |j        d           |                                  |                     |dg           d S )Nz--capi-reexport-cincludesr   Tcapi_reexport_cincludes)r	   r-   r   r/   r;   rM   s      r   test_capi_reexport_cincludesz.CmdLineParserTest.test_capi_reexport_cincludes   sn    -'/
   	8$???))+++""7-F,GHHHHHr   c                     t          ddg          \  }}|                     t          j        d           |                     dg           |                     |           d S )Nz--fast-failr   T	fast_fail)r	   r-   r   r   r/   r;   rM   s      r   test_fast_failz CmdLineParserTest.test_fast_fail  sl    -/
   	*D111));-888""7+++++r   c                     t          ddg          \  }}|                     t          j        d           |                     dg           |                     |           d S )Nz--cimport-from-pyxr   Tcimport_from_pyx)r	   r-   r   r   r/   r;   rM   s      r   test_cimport_from_pyxz'CmdLineParserTest.test_cimport_from_pyx  sn    - /
   	14888))+=*>???""7+++++r   c                     t          ddg          \  }}|                     t          j        d           |                     dg           |                     |           d S )Nz-Werrorr   Twarning_errorsr	   r-   r   r   r/   r;   rM   s      r   test_WerrorzCmdLineParserTest.test_Werror  sn    -/
   	/666))+;*<===""7+++++r   c                     t          ddg          \  }}|                     t          j        d           |                     dg           |                     |           d S )Nz--warning-errorsr   Tr   r   rM   s      r   test_warning_errorsz%CmdLineParserTest.test_warning_errors  sn    -/
   	/666))+;*<===""7+++++r   c                     t          ddg          \  }}|                     |j        t          j                   |                                  |                     |dg           d S )Nz-Wextrar   rg   r	   r-   rg   r   extra_warningsr/   r;   rM   s      r   test_WextrazCmdLineParserTest.test_Wextra(  sq    -/
   	4g6LMMM))+++""7-B,CDDDDDr   c                     t          ddg          \  }}|                     |j        t          j                   |                                  |                     |dg           d S )N--warning-extrar   rg   r   rM   s      r   test_warning_extraz$CmdLineParserTest.test_warning_extra1  sq    -/
   	4g6LMMM))+++""7-B,CDDDDDr   c                     t          ddg          \  }}|                     t          j        d           |                     dg           |                     |           d S )Nz--old-style-globalsr   Told_style_globals)r	   r-   r   r   r/   r;   rM   s      r   test_old_style_globalsz(CmdLineParserTest.test_old_style_globals:  sn    -!/
   	2D999))+>*?@@@""7+++++r   c                    t          g d          \  }}|                     |j        d         d           |                     |j        d         d           |                                  |                     |dg           d S )N)-Xcdivision=Truer   c_string_type=bytesr   	cdivisionTc_string_typebytesrg   r	   r-   rg   r/   r;   r'   r8   sources      r   test_directive_multiplez)CmdLineParserTest.test_directive_multipleC  s    , .
 .
 .
  
 	4[A4HHH4_EwOOO))+++""7-B,CDDDDDr   c                    t          g d          \  }}|                     |j        d         d           |                     |j        d         d           |                                  |                     |dg           d S )N)r   z"cdivision=True,c_string_type=bytesr   r   Tr   r   rg   r   r   s      r   test_directive_multiple_v2z,CmdLineParserTest.test_directive_multiple_v2N  s    , .
 .
 .
   	4[A4HHH4_EwOOO))+++""7-B,CDDDDDr   c                     t          g d          \  }}|                     |j        d         d           |                                  |                     |dg           d S )N)r   zcdivision=YeSr   r   Trg   r   r   s      r   test_directive_value_yesz*CmdLineParserTest.test_directive_value_yesX  sv    , .
 .
 .
   	4[A4HHH))+++""7-B,CDDDDDr   c                     t          g d          \  }}|                     |j        d         d           |                                  |                     |dg           d S )N)r   zcdivision=nor   r   Frg   r   r   s      r   test_directive_value_noz)CmdLineParserTest.test_directive_value_noa  sv    , .
 .
 .
   	4[A5III))+++""7-B,CDDDDDr   c                 L    |                      t          t          g d           d S )N)r   zcdivision=sadfasdr   assertRaises
ValueErrorr	   r&   s    r   test_directive_value_invalidz.CmdLineParserTest.test_directive_value_invalidj  8    *&8 ;
 ;
 ;
 	 	 	 	 	r   c                 L    |                      t          t          g d           d S )N)r   abracadabrar   r   r&   s    r   test_directive_key_invalidz,CmdLineParserTest.test_directive_key_invalidp  r   r   c                 L    |                      t          t          g d           d S )N)r   r   r   r   r&   s    r   test_directive_no_valuez)CmdLineParserTest.test_directive_no_valuev  r   r   c                     t          g d          \  }}|                     |j        d         d           |                                  |                     |dg           d S )N)-E	MYSIZE=10r   MYSIZE
   compile_time_envr	   r-   r   r/   r;   r   s      r   test_compile_time_env_shortz-CmdLineParserTest.test_compile_time_env_short|  v    , .
 .
 .
   	1(;R@@@))+++""7-?,@AAAAAr   c                     t          g d          \  }}|                     |j        d         d           |                                  |                     |dg           d S )N)z--compile-time-envr   r   r   r   r   r   r   s      r   test_compile_time_env_longz,CmdLineParserTest.test_compile_time_env_long  r   r   c                    t          g d          \  }}|                     |j        d         d           |                     |j        d         d           |                                  |                     |dg           d S )N)r   r   r   z
ARRSIZE=11r   r   r   ARRSIZE   r   r   r   s      r   test_compile_time_env_multiplez0CmdLineParserTest.test_compile_time_env_multiple      , .
 .
 .
   	1(;R@@@1)<bAAA))+++""7-?,@AAAAAr   c                    t          g d          \  }}|                     |j        d         d           |                     |j        d         d           |                                  |                     |dg           d S )N)r   zMYSIZE=10,ARRSIZE=11r   r   r   r   r   r   r   r   s      r   !test_compile_time_env_multiple_v2z3CmdLineParserTest.test_compile_time_env_multiple_v2  r   r   c                 \    t          ddg          \  }}|                     |dg           d S )Nr=   r   r	   r-   rM   s      r   test_option_firstz#CmdLineParserTest.test_option_first  s7    -tZ.@AA:,/////r   c                 \    t          g d          \  }}|                     |dg           d S )N)r=   r   r?   r   r   rM   s      r   test_file_inbetweenz%CmdLineParserTest.test_file_inbetween  s9    -.F.F.FGG:,/////r   c                 \    t          ddg          \  }}|                     |dg           d S )Nr   r=   r   rM   s      r   test_option_trailingz&CmdLineParserTest.test_option_trailing  s7    -z4.@AA:,/////r   c                 ^    t          g d          \  }}|                     |g d           d S )N)r   r=   r   r?   r   )r   r   r   r   rM   s      r   test_multiple_filesz%CmdLineParserTest.test_multiple_files  sJ    - /
 /
 /
  
 	"I"I"IJJJJJr   c                     t          g d          \  }}ddlm} dD ]9}|                     t	          ||          |dv            t          ||d           :d S )N)z--debug-disposal-codez--debug-coercionr   r   )
DebugFlags)debug_disposal_codedebug_temp_allocdebug_coercion)r   r   )r	   Cython.Compilerr   r-   r7   setattr)r'   r8   rN   r   r:   s        r   test_debug_flagsz"CmdLineParserTest.test_debug_flags  s    - /
 /
 /
   	/.....Q 	) 	)DWZ66@i8ijjjJa((((	) 	)r   c                    t          g d          \  }}|                     |j        d           |                     |j        t          j                   |                                  |                     |ddg           d S )N)--gdb-outdir=my_dirr   r   Tre   rf   r   rM   s      r   test_gdb_overwrites_gdb_outdirz0CmdLineParserTest.test_gdb_overwrites_gdb_outdir  s    - /
 /
 /
   	*D111+RY777))+++""7[,,GHHHHHr   c                     t          g d          \  }}|                     |j        d           |                     |j        d           |                                  |                     |ddg           d S )N)r   r   r   Tmy_dirre   rf   )r	   r-   re   rf   r/   r;   rM   s      r   test_gdb_firstz CmdLineParserTest.test_gdb_first  s    - /
 /
 /
   	*D111+X666))+++""7[,,GHHHHHr   c                    t          g d          \  }}|                     t          j        d           |                     t          j        d           |                     ddg           |                     |           d S )N)r{   --annotate-coverage=my.xmlr   Tmy.xmlrJ   rd   r	   r-   r   rJ   rd   r/   r;   rM   s      r   #test_coverage_overwrites_annotationz5CmdLineParserTest.test_coverage_overwrites_annotation  s    - /
 /
 /
   	)40006AAA)):7N*OPPP""7+++++r   c                    t          g d          \  }}|                     t          j        d           |                     t          j        d           |                     ddg           |                     |           d S )N)r   r{   r   r|   r   rJ   rd   r   rM   s      r   test_coverage_firstz%CmdLineParserTest.test_coverage_first  s    - /
 /
 /
   	)73336AAA)):7N*OPPP""7+++++r   c                     t          g d          \  }}|                     t          j        d           |                     dg           |                     |           d S )N)rT   r{   r   r|   rJ   r	   r-   r   rJ   r/   r;   rM   s      r    test_annotate_first_fullc_secondz2CmdLineParserTest.test_annotate_first_fullc_second  sp    - /
 /
 /
   	)7333)):,777""7+++++r   c                     t          g d          \  }}|                     t          j        d           |                     dg           |                     |           d S )N)r{   rT   r   ru   rJ   r   rM   s      r   test_annotate_fullc_firstz+CmdLineParserTest.test_annotate_fullc_first  sp    - /
 /
 /
   	)9555)):,777""7+++++r   c                    t          g d          \  }}|                     t          |j                  t          t          j                  dz              |                                  |                     |dg           d S )N)r   r   r   r   r   r   r
   rg   )r	   rB   rL   rg   r   r   r/   r;   rM   s      r   !test_warning_extra_dont_overwritez3CmdLineParserTest.test_warning_extra_dont_overwrite  s    - /
 /
 /
   	G788#g>T:U:UXY:YZZZ))+++""7-B,CDDDDDr   c                 h   t          dg          \  }}|                     |j        d            |                                  |                     |           t          g d          \  }}|                     |j        d           |                                  |                     |dg           d S )Nr   )--module-namefoo.barr   r  module_name)r	   r-   r  r/   r;   rM   s      r   test_module_namez"CmdLineParserTest.test_module_name  s    -/
   	,d333))+++""7+++- /
 /
 /
   	,i888))+++""7]O<<<<<r   c                     t          dg          \  }}|                     |g            |                     |j        d           d S )Nz--generate-shared=foo/shared.czfoo/shared.c)r	   r-   shared_c_file_pathrM   s      r   test_generate_sharedz&CmdLineParserTest.test_generate_shared  sU    -,/
   	"%%%3^DDDDDr   c                     d fd	} |dgd            |dgd            |dgd            |dgd	            |d
gd            |dgd            |dgd            |ddgd            |ddgd            |ddgd            |g dd            |g dd            |ddgd            |dgd           d S ) Nc                 X   t           j        }t                      x}t           _        	                     t          t
          t          |                      |t           _        n# |t           _        w xY w|                                }d                    |	                                          }
                    |                    d          d|z             
                    d|v d|z             |r1
                    t          j        ||          |d|d           d S d S )NzMessage "{}"zusage: z %s does not start with "usage :"z	: error: z%s does not contain ": error :"z does not match search "")sysstderrr   r   
SystemExitr	   listgetvalueformatstriprB   
startswithresearch)argsregex
old_stderrr  r1   err_msgr'   s         r   errorz,CmdLineParserTest.test_errors.<locals>.error  s-   J"***,FSZ(!!*.@$t**MMM'

Z
''''//##C$++CIIKK88GOOCNN955>HJ J JOOK3.=GI I I 2	% 5 5!(%%%!12 2 2 2 22 2s   .A$ $A2z-1zunknown option -1z-Iz0argument -I/--include-dir: expected one argumentz--version=-az5argument -V/--version: ignored explicit argument '-a'z--version=--annotate=truezBargument -V/--version: ignored explicit argument '--annotate=true'z	--workingz,argument -w/--working: expected one argumentz--verbose=1z4argument -v/--verbose: ignored explicit argument '1'z	--cleanupz)argument --cleanup: expected one argumentz --debug-disposal-code-wrong-namer   z/unknown option --debug-disposal-code-wrong-namer  r   zNeed at least one source filer  )r  r  r   r   z5Only one source file allowed when using --module-name)r  r  rR   r   z*Cannot use --module-name with --timestampsz--generate-shared=shared.cz4Source file not allowed when using --generate-sharedz--generate-sharedz1argument --generate-shared: expected one argumentr$    )r'   r  s   ` r   test_errorszCmdLineParserTest.test_errors  s   	2 	2 	2 	2 	2 	2$ 	tf!	# 	# 	#tf@	B 	B 	B~E	G 	G 	G*+"	# 	# 	# 	{m<	> 	> 	>}oD	F 	F 	F{m9	; 	; 	;1;??	A 	A 	A	*-	/ 	/ 	/	*-	/ 	/ 	/@@@E	G 	G 	GEEE:	< 	< 	<+Y7D	F 	F 	F"#A	C 	C 	C 	C 	Cr   N);__name__
__module____qualname__r(   r*   r/   r;   rO   rY   ri   rl   rn   rq   rs   rw   ry   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   r   r"   r"      s       0 0 0. . . 79 U U U U 9; B B B B4 4 4.- - -4N N N:0 0 00 0 00 0 0+ + +6 6 66 6 64 4 4> > >= = =, , ,, , ,? ? ?E E EI I I@ @ @I I I, , ,, , ,, , ,, , ,E E EE E E, , ,	E 	E 	EE E EE E EE E E      B B BB B BB B BB B B0 0 00 0 00 0 0K K K) ) )I I II I I, , ,, , ,, , ,, , ,	E 	E 	E= = =E E E/C /C /C /C /Cr   r"   )r   r  r  ior   unittestr   unittest.mockr   r   r,   r   CmdLiner	   Utilsr   r   r   r   existsr   r   r"   r  r   r   <module>r(     s)   				 



 				             % % % % % % % %       ( ( ( ( ( ( H H H H H H H H H H7> " " "  TTn===>>>jC jC jC jC jC jC jC ?>jC jC jCr   