
    z%iJ                    J   d dl mZmZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZ ej(                  d        ej*                  d      5  d dlZd d	lmZ ddd        G d
 de      Z G d d      Z G d d      Z G d d      Z ej8                  dd      Z G d d      Z G d de      Z G d de      Z  G d de      Z! G d d      Z" G d d       Z# G d! d"e      Z$ G d# d$e      Z% G d% d&e      Z&	 d dl'Z( ejT                  e(du d'       G d( d)ej                               Z+ G d* d+ej                        Z, G d, d-ej                        Z-e.d.k(  r ej^                          yy# 1 sw Y   xY w# e)$ r dZ(Y w xY w)/    )support
test_tools)	os_helper)SHORT_TIMEOUTrequires_subprocess)TESTFNunlink)dedent)TestCaseNclinic)	DSLParserc                       e Zd ZdZd Zd Zy)_ParserBaseNc                     t        j                         5 }| j                  t              5   ||       d d d        d d d        |j	                         S # 1 sw Y   !xY w# 1 sw Y   j	                         S xY wN)r   captured_stdoutassertRaises
SystemExitgetvalue)selfparser_inputstdouts       D/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_clinic.pyexpect_parser_failurez!_ParserBase.expect_parser_failure   sh    $$& 	&"":. v	    	   s!   A 	AA A	A  A8c                 :    | j                  | j                  |      S r   )r   parse_function)r   r   s     r   parse_function_should_failz&_ParserBase.parse_function_should_fail!   s    ))$*=*=vFF    )__name__
__module____qualname__maxDiffr   r    r   r   r   r      s    G!Gr   r   c                       e Zd Zd Zy)FakeConverterc                      || _         || _        y r   )nameargsr   r(   r)   s      r   __init__zFakeConverter.__init__&   s    		r   N)r    r!   r"   r+   r$   r   r   r&   r&   %   s    r   r&   c                       e Zd Zd Zd Zy)FakeConverterFactoryc                     || _         y r   r(   r   r(   s     r   r+   zFakeConverterFactory.__init__,   s	    	r   c                 .    t        | j                  |      S r   )r&   r(   )r   r(   defaultkwargss       r   __call__zFakeConverterFactory.__call__/   s    TYY//r   N)r    r!   r"   r+   r4   r$   r   r   r-   r-   +   s    0r   r-   c                       e Zd Zd Zd Zy)FakeConvertersDictc                     i | _         y r   )used_convertersr   s    r   r+   zFakeConvertersDict.__init__4   s
    !r   c                 L    | j                   j                  |t        |            S r   )r8   
setdefaultr-   )r   r(   r2   s      r   getzFakeConvertersDict.get7   s!    ##..t5I$5OPPr   N)r    r!   r"   r+   r<   r$   r   r   r6   r6   3   s    "Qr   r6   Cfile)languagefilenamec                   V    e Zd Zd Zd Zd Zd Zd Zej                  j                  Z
y)
FakeClinicc                    t               | _        t               | _        t        j                  d       | _        d | _        i | _        t        j                  d| j
                        | _	        t        j                         | _        t        j                         | _        | t        _        d| _        dx| _        | _        i | _        | j%                  dd       | j%                  dd       | j%                  dd       | j"                  j&                  }t        j                  d |d      fd |d      fd	 |d      fd
 |d      fd |d      fd |d      fd |d      ff      | _        y )N rB   blockbufferr>   suppressdocstring_prototypedocstring_definitionmethoddef_defineimpl_prototypeparser_prototypeparser_definitionimpl_definition)r6   
converterslegacy_convertersr   	CLanguager?   r@   destination_buffersBlockParserblock_parsercollectionsOrderedDictmodulesclassesr(   line_prefixline_suffixdestinationsadd_destinationr<   field_destinations)r   ds     r   r+   zFakeClinic.__init__=   sD   ,.!3!5((.#% "..r4==A"..0"..0 	.004+Wh/VX.Z4!!"-"9"9"AjM2#QwZ07,qz*:/ !G*-'
+;
 #r   c                     | j                   j                  |      }|s!t        j                  dt	        |      z          |S )NzDestination does not exist: )r[   r<   sysexitrepr)r   r(   r^   s      r   get_destinationzFakeClinic.get_destinationX   s6    !!$'HH3d4j@Ar   c                     || j                   v r!t        j                  dt        |      z          t	        j
                  ||| g| | j                   |<   y )NzDestination already exists: )r[   r`   ra   rb   r   Destination)r   r(   typer)   s       r   r\   zFakeClinic.add_destination^   sJ    4$$$HH3d4j@A"("4"4T4"M"M$r   c                     |dk(  S )Nmoduler$   r0   s     r   is_directivezFakeClinic.is_directivec   s    xr   c                 "    || j                   |<   y r   )called_directivesr*   s      r   	directivezFakeClinic.directivef   s    '+t$r   N)r    r!   r"   r+   rc   r\   ri   rl   r   Clinic_module_and_classr$   r   r   rB   rB   <   s.    6N
 , 77r   rB   c                   r    e 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y)ClinicWholeFileTestc                 b    t        j                  t        j                  d       d      | _         y )Ntest.cr@   )r   rm   rQ   r9   s    r   setUpzClinicWholeFileTest.setUpm   s    mmF$4$4T$:XNr   c                     t        |      j                         }| j                  | j                  j                  |      S r   )r
   stripr   r   parse)r   rawr   s      r   expect_failurez"ClinicWholeFileTest.expect_failurep   s1    ""$))$++*;*;VDDr   c                     d}| j                   j                  |      j                         }|d   j                         }| j	                  |d       | j                  |d       y )Nz/*[clinic]
foo
[clinic]*/   z[clinic]*/[clinic]*/z
[clinic]*/)r   rw   
splitlinesrstripassertNotEqualassertEqual)r   rx   cookedend_lines       r   test_eolzClinicWholeFileTest.test_eolt   s[     ,""3'224!9##% 	H&<=<0r   c                 R    d}d}| j                  |      }| j                  ||       y )Nz
            /*[clinic input]
            [clinic start generated code]*/
            /*[clinic end generated code: foo]*/
        znError in file "test.c" on line 3:
Mangled Argument Clinic marker line: '/*[clinic end generated code: foo]*/'
ry   r   r   rx   msgouts       r   test_mangled_marker_linez,ClinicWholeFileTest.test_mangled_marker_line   s6    \ 	 !!#&c"r   c                 R    d}d}| j                  |      }| j                  ||       y )Nz
            /*[clinic input]
            [clinic start generated code]*/
            /*[clinic end generated code: output=0123456789abcdef input=fedcba9876543210]*/
        zkError in file "test.c" on line 3:
Checksum mismatch!
Expected: 0123456789abcdef
Computed: da39a3ee5e6b4b0d
ry   assertInr   s       r   test_checksum_mismatchz*ClinicWholeFileTest.test_checksum_mismatch   s3    + 	 !!#&c3r   c                 R    d}d}| j                  |      }| j                  ||       y )Nz_
            /*[clinic input]
            [clinic start generated code]*/foobarfoobar!
        zKError in file "test.c" on line 2:
Garbage after stop line: 'foobarfoobar!'
r   r   s       r   test_garbage_after_stop_linez0ClinicWholeFileTest.test_garbage_after_stop_line   s5    
9 	 !!#&c"r   c                 R    d}d}| j                  |      }| j                  ||       y )NzS
            /*[clinic input]
             [clinic start generated code]*/
        zuError in file "test.c" on line 2:
Whitespace is not allowed before the stop line: ' [clinic start generated code]*/'
r   r   s       r    test_whitespace_before_stop_linez4ClinicWholeFileTest.test_whitespace_before_stop_line   s6    
c 	 !!#&c"r   c                 0   t        j                  d       }d|_        d|_        d|_        t        j
                  |d      }t        d      j                         }|j                  |      }t        d      j                         }| j                  ||       y )Nz//z//[{dsl_name} start]z//[{dsl_name} stop]rr   rs   z\
            //[clinic start]
            //module test
            //[clinic stop]
        z
            //[clinic start]
            //module test
            //
            //[clinic stop]
            /*[clinic end generated code: output=da39a3ee5e6b4b0d input=65fab8adff58cf08]*/
        )r   rQ   body_prefix
start_line	stop_linerm   r
   rv   rw   lstripr   )r   clangclrx   r   expecteds         r   test_parse_with_body_prefixz/ClinicWholeFileTest.test_parse_with_body_prefix   s      & 1/]]584   UW	 	
 hhsm   VX 	 	h'r   c                 R    d}d}| j                  |      }| j                  ||       y )NzR
            /* start
            /* nested
            */
            */
        z8Error in file "test.c" on line 2:
Nested block comment!
r   r   s       r   *test_cpp_monitor_fail_nested_block_commentz>ClinicWholeFileTest.test_cpp_monitor_fail_nested_block_comment   s5    & 	 !!#&c"r   c                 R    d}d}| j                  |      }| j                  ||       y )Nz<
            #if
            a()
            #endif
        zLError in file "test.c" on line 1:
Invalid format for #if line: no argument!
r   r   s       r   *test_cpp_monitor_fail_invalid_format_noargz>ClinicWholeFileTest.test_cpp_monitor_fail_invalid_format_noarg   s5    : 	 !!#&c"r   c                 R    d}d}| j                  |      }| j                  ||       y )NzC
            #ifdef A B
            a()
            #endif
        zbError in file "test.c" on line 1:
Invalid format for #ifdef line: should be exactly one argument!
r   r   s       r   0test_cpp_monitor_fail_invalid_format_toomanyargszDClinicWholeFileTest.test_cpp_monitor_fail_invalid_format_toomanyargs   s6    P 	 !!#&c"r   c                 R    d}d}| j                  |      }| j                  ||       y )Nz#elsezQError in file "test.c" on line 1:
#else without matching #if / #ifdef / #ifndef!
r   r   s       r   $test_cpp_monitor_fail_no_matching_ifz8ClinicWholeFileTest.test_cpp_monitor_fail_no_matching_if   s3    ? 	 !!#&c"r   c                 N    | j                  d      }d}| j                  ||       y )Nzy
            /*[clinic input]
            output preset nosuchpreset
            [clinic start generated code]*/
        zUnknown preset 'nosuchpreset'r   r   r   r   s      r   $test_directive_output_unknown_presetz8ClinicWholeFileTest.test_directive_output_unknown_preset   s,    !! # 
 .c3r   c                 N    | j                  d      }d}| j                  ||       y )Nzi
            /*[clinic input]
            output pop
            [clinic start generated code]*/
        z"Can't 'output pop', stack is emptyr   r   s      r   test_directive_output_cant_popz2ClinicWholeFileTest.test_directive_output_cant_pop  s,    !! # 
 3c3r   c                    t        d      }| j                  j                  |      }| j                  |j	                  t        d                   h d}|D ]/  }| j                  |      5  | j                  ||       d d d        1 |j                         j                  d      d   }| j                  |j	                  d             y # 1 sw Y   ~xY w)Nz~
            /*[clinic input]
            output print 'I told you once.'
            [clinic start generated code]*/
        >
   cpp_if	cpp_endifrK   rN   rJ   methoddef_ifndefrL   rM   rH   rI   )field
z%/*[clinic end generated code: output=)	r
   r   rw   
assertTrue
startswithsubTestr   r}   split)r   rx   r   fieldsr   	last_lines         r   test_directive_output_printz/ClinicWholeFileTest.test_directive_output_print  s      
 kk$ 	v / (  	

  	*EE* *eS)* *	* JJL&&t,R0	  !HI	
* *s   +CC	c                 N    | j                  d      }d}| j                  ||       y )Nz
            /*[clinic input]
            destination buffer nosuchcommand
            [clinic start generated code]*/
        z+unknown destination command 'nosuchcommand'r   r   s      r    test_unknown_destination_commandz4ClinicWholeFileTest.test_unknown_destination_command4  s,    !! # 
 <c3r   c                 N    | j                  d      }d}| j                  ||       y )Na  
            /*[python input]
            class Custom_converter(CConverter):
                converter = "some_c_function"
                def converter_init(self):
                    self.function.noaccess
            [python start generated code]*/
            /*[clinic input]
            module test
            test.fn
                a: Custom
            [clinic start generated code]*/
        z{Stepped on a land mine, trying to access attribute 'noaccess':
Don't access members of self.function inside converter_init!r   r   s      r   +test_no_access_to_members_in_converter_initz?ClinicWholeFileTest.test_no_access_to_members_in_converter_init=  s2    !! # K 	 	c3r   N)r    r!   r"   rt   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r   r   rp   rp   l   sZ    OE1"# 
#
#(*####  !
F  r   rp   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ClinicGroupPermuterTestc                 V    t        j                  |||      }| j                  ||       y r   )r   permute_optional_groupsr   )r   lmroutputcomputeds         r   _testzClinicGroupPermuterTest._testS  s&    11!Q:*r   c                 6    | j                  dggdgdggd       y )Nstartstopstep))r   )r   r   )r   r   r   r   r9   s    r   
test_rangez"ClinicGroupPermuterTest.test_rangeW  s#    

WI;F8*	r   c                 8    | j                  ddggdgdggd       y )Nxychattr))r   )r   r   )r   r   r   )r   r   r   r   r   r9   s    r   test_add_windowz'ClinicGroupPermuterTest.test_add_window_  s%    

S#J<$6(	r   c                 F    | j                  g dddggdgddgg dgd       y )	N)a1a2a3b1b2c1d1d2)e1e2e3))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   r9   s    r   test_ludicrousz&ClinicGroupPermuterTest.test_ludicroush  s/    

&t5vtN`?a	r   c                 8    | j                  g g dgdgdggd       y )Nabc)r$   r   r   r   r   r   r   r   r9   s    r   test_right_onlyz'ClinicGroupPermuterTest.test_right_onlys  s&    

2rSE3%.	r   c                 6    d }| j                  t        |       y )Nc                  4    t        j                  dgg g        y )Nr   )r   r   r$   r   r   fnzPClinicGroupPermuterTest.test_have_left_options_but_required_is_empty.<locals>.fn}  s    **C5"b9r   )r   
ValueError)r   r   s     r   ,test_have_left_options_but_required_is_emptyzDClinicGroupPermuterTest.test_have_left_options_but_required_is_empty|  s    	:*b)r   N)	r    r!   r"   r   r   r   r   r   r   r$   r   r   r   r   R  s     +	*r   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	ClinicLinearFormatTestc                 T    t        j                  |fi |}| j                  ||       y r   )r   linear_formatr   )r   inputr   r3   r   s        r   r   zClinicLinearFormatTest._test  s'    ''88*r   c                 (    | j                  dd       y )NrD   r   r9   s    r   test_empty_stringsz)ClinicLinearFormatTest.test_empty_strings  s    

2rr   c                 (    | j                  dd       y )Nr   r   r9   s    r   test_solo_newlinez(ClinicLinearFormatTest.test_solo_newline  s    

4r   c                 (    | j                  dd       y )Nz
          abc
        r   r9   s    r   test_no_substitutionz+ClinicLinearFormatTest.test_no_substitution  s    

 	r   c                 ,    | j                  ddd       y )N6
          abc
          {name}
          def
        z%
          abc
          def
        rD   r/   r   r9   s    r   test_empty_substitutionz.ClinicLinearFormatTest.test_empty_substitution  s"    

   	 	r   c                 ,    | j                  ddd       y )Nr   z6
          abc
          GARGLE
          def
        GARGLEr/   r   r9   s    r   test_single_line_substitutionz4ClinicLinearFormatTest.test_single_line_substitution  s"    

   	 	r   c                 ,    | j                  ddd       y )Nr   zH
          abc
          bingle
          bungle

          def
        zbingle
bungle
r/   r   r9   s    r   test_multiline_substitutionz2ClinicLinearFormatTest.test_multiline_substitution  s"    

  % 	 
	&r   N)
r    r!   r"   r   r   r   r   r   r   r   r$   r   r   r   r     s%    +	&r   r   c                       e Zd Zd Zd Zy)InertParserc                      y r   r$   r   r   s     r   r+   zInertParser.__init__      r   c                      y r   r$   r   rE   s     r   rw   zInertParser.parse  r   r   Nr    r!   r"   r+   rw   r$   r   r   r   r     s    r   r   c                       e Zd Zd Zd Zy)
CopyParserc                      y r   r$   r   s     r   r+   zCopyParser.__init__  r   r   c                 &    |j                   |_        y r   )r   r   r  s     r   rw   zCopyParser.parse  s    {{r   Nr  r$   r   r   r  r    s    #r   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ClinicBlockParserTestc                 H   t        j                  d       }t        t        j                  ||            }t        j                  |      }|D ]  }|j                  |        |j                  j                         }||k(  s"J dt        |      z   dz   t        |      z          y )Nzoutput != input!

output z	

 input )	r   rQ   listrS   BlockPrinterprint_blockfr   rb   )r   r   r   r?   blockswriterrE   s          r   r   zClinicBlockParserTest._test  s    ##D)f((9:$$X. 	&Eu%	&""$j =V L} \_cdi_j jjr   c                 &    | j                  ||      S r   r   )r   r   s     r   
round_tripz ClinicBlockParserTest.round_trip  s    zz%''r   c                 &    | j                  d       y )Nz@
            verbatim text here
            lah dee dah
        r  r9   s    r   test_round_trip_1z'ClinicBlockParserTest.test_round_trip_1  s      	r   c                 &    | j                  d       y )Nz
    verbatim text here
    lah dee dah
/*[inert]
abc
[inert]*/
def
/*[inert checksum: 7b18d017f89f61cf17d47f92749ea6930a3f1deb]*/
xyz
r  r9   s    r   test_round_trip_2z'ClinicBlockParserTest.test_round_trip_2  s     	 		r   c                    t        j                  d       }t        j                  |d      }t        |      |j                  d<   t        |      |j                  d<   |j                  |      }| j                  ||       y )Nr>   rs   inertcopy)r   rQ   rm   r   parsersr  rw   r   )r   r   r   r?   r   r   s         r   _test_clinicz"ClinicBlockParserTest._test_clinic  sc    ##D)MM(V4(^		'&qM		&775>*r   c                 (    | j                  dd       y )Nz
    verbatim text here
    lah dee dah
/*[copy input]
def
[copy start generated code]*/
abc
/*[copy end generated code: output=03cfd743661f0797 input=7b18d017f89f61cf]*/
xyz
z
    verbatim text here
    lah dee dah
/*[copy input]
def
[copy start generated code]*/
def
/*[copy end generated code: output=7b18d017f89f61cf input=7b18d017f89f61cf]*/
xyz
)r  r9   s    r   test_clinic_1z#ClinicBlockParserTest.test_clinic_1  s     			r   N)	r    r!   r"   r   r  r  r  r  r  r$   r   r   r	  r	    s!    k(

+r   r	  c                   d   e 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) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d;d8Z:d9 Z;y:)<ClinicParserTestc                     | j                  t        |d             | j                  |j                  j	                         t        |      j	                                y )N	docstring)r   hasattrr   r"  rv   r
   )r   r   r   s      r   checkDocstringzClinicParserTest.checkDocstring  sC    K01++-)//1	3r   c                    t        t                     }t        j                  d      }|j	                  |       |j
                  \  }}| j                  d|j                         | j                  d|j                         y )Nz5
            module os
            os.access
        accessos)r   rB   r   Blockrw   
signaturesr   r(   )r   r   rE   rh   functions        r   test_trivialzClinicParserTest.test_trivial  sg    :<(   	U ++8==1v{{+r   c                     | j                  t        d            }|j                  \  }}| j                  d|j                         | j                  d|j                         y )NzC
            #
            module os
            os.access
        r&  r'  )rw   r
   r)  r   r(   )r   rE   rh   r*  s       r   test_ignore_linez!ClinicParserTest.test_ignore_line  sV    

6 #  
 !++8==1v{{+r   c                 R   | j                  d      }| j                  d|j                         | j                  dt        |j                               |j                  d   }| j                  d|j                         | j                  |j                  t        j                         y )NzO
            module os
            os.access
                path: int
        r&  r{   path)	r   r   r(   len
parametersassertIsInstance	converterr   int_converterr   r*  ps      r   
test_paramzClinicParserTest.test_param  s    && ( 
 	8==1C 3 345'(akk6+?+?@r   c                 |    | j                  d      }|j                  d   }| j                  d|j                         y )Nzb
            module os
            os.access
                follow_symlinks: bool = True
        follow_symlinksTr   r1  r   r2   r5  s      r   test_param_defaultz#ClinicParserTest.test_param_default)  s>    && ( 
  12qyy)r   c                 |    | j                  d      }|j                  d   }| j                  d|j                         y )Nz
            module os
            os.access
                follow_symlinks: \
                bool \
                = \
                True
        r9  Tr:  r5  s      r   test_param_with_continuationsz.ClinicParserTest.test_param_with_continuations2  s>    && (   12qyy)r   c                 .   | j                  d      }|j                  d   }| j                  t        j                  |j
                         | j                  d|j                  j                         d}| j                  d      }| j                  ||       y )Nz
            module os
            os.access
                follow_symlinks: int(c_default='MAXSIZE') = sys.maxsize
            r9  MAXSIZEz~Error on line 0:
When you specify a named constant ('sys.maxsize') as your default value,
you MUST specify a valid c_default.
zh
            module os
            os.access
                follow_symlinks: int = sys.maxsize
        )	r   r1  r   r`   maxsizer2   r3  	c_defaultr   )r   r*  r6  expected_msgr   s        r   test_param_default_expressionz.ClinicParserTest.test_param_default_expression>  s    && ( 
  12aii0AKK$9$9:4 	
 -- / 
 	l+r   c                     | j                  d      }|j                  d   }| j                  dt        |j                               |j                  d   j                  }| j                  |t        j                         y )Nz
            module os
            os.access
                follow_symlinks: bool = True
                something_else: str = ''
        r9     something_else)r   r1  r   r0  r3  r2  r   str_converter)r   r*  r6  convs       r   test_param_no_docstringz(ClinicParserTest.test_param_no_docstringT  sr    && (   12C 3 345""#34>>dF$8$89r   c                 N    d}| j                  d      }| j                  ||       y )NzoError on line 0:
Can't have a parameter without a default ('something_else')
after a parameter with a default!
z}
            module os
            os.access
                follow_symlinks: bool = True
                something_else: strr   r   r   rB  r   s      r   *test_param_default_parameters_out_of_orderz;ClinicParserTest.test_param_default_parameters_out_of_order`  s5    2 	
 -- /' (
 	l+r   c                     | j                  d      }|j                  d   }| j                  d|j                  j                  d          y )Nz^
            module os
            os.access
                path: path_t(allow_fd=1)
        r/     allow_fd)r   r1  r   r3  r)   r5  s      r   !disabled_test_converter_argumentsz2ClinicParserTest.disabled_test_converter_argumentsm  sH    && ( 
 'AKK,,Z89r   c                 J    | j                  d      }| j                  |d       y )Nz
            module os
            os.stat as os_stat_fn

               path: str
                   Path to be examined

            Perform a stat system call on the given path.
        z
            stat($module, /, path)
            --

            Perform a stat system call on the given path.

              path
                Path to be examined
        r   r$  r   r*  s     r   test_function_docstringz(ClinicParserTest.test_function_docstringv  .    && (  	H ' 	r   c                 \    | j                  t        d            }| j                  |d       y )Nz
            module foo
            foo.bar
              x: int
                 Documentation for x.
              y: int

            This is the documentation for foo.

            Okay, we're done here.
        z
            bar($module, /, x, y)
            --

            This is the documentation for foo.

              x
                Documentation for x.

            Okay, we're done here.
        r   r
   r$  rT  s     r   %test_explicit_parameters_in_docstringz6ClinicParserTest.test_explicit_parameters_in_docstring  s5    &&v 
/ 
( 
 	H 
' 
	r   c                 \    | j                  t        d            }| j                  |d       y )Nzt
            module os
            os.stat
                path: str
            This/used to break Clinic!
        zc
            stat($module, /, path)
            --

            This/used to break Clinic!
        rX  rT  s     r   Ttest_parser_regression_special_character_in_parameter_column_of_docstring_first_linezeClinicParserTest.test_parser_regression_special_character_in_parameter_column_of_docstring_first_line  s5    &&v / (  	H ' 	r   c                 ^    | j                  d      }| j                  d|j                         y )NzA
            module os
            os.stat as os_stat_fn
        
os_stat_fn)r   r   
c_basenamerT  s     r   test_c_namezClinicParserTest.test_c_name  s/    && (  	x':':;r   c                 z    | j                  d      }| j                  |j                  t        j                         y )Nz:
            module os
            os.stat -> int
        )r   r2  return_converterr   int_return_converterrT  s     r   test_return_converterz&ClinicParserTest.test_return_converter  s5    && (  	h779T9TUr   c                     | j                  d      }|j                  d   }| j                  t        j                  j
                  |j                         | j                  d|j                         y )Nzt
            module os
            os.access
                *
                follow_symlinks: bool = True
        r9  r   )r   r1  r   inspect	ParameterKEYWORD_ONLYkindgroupr5  s      r   	test_starzClinicParserTest.test_star  s^    && (   12**77@AGG$r   c                 |    | j                  d      }|j                  d   }| j                  d|j                         y )Nz
            module window
            window.border
                [
                ls: int
                ]
                /
        lsrO  )r   r1  r   ri  r5  s      r   
test_groupzClinicParserTest.test_group  s=    && (  %AGG$r   c                 p   | j                  d      }d}|D ]  \  }}| j                  ||      5  |j                  |   }| j                  |j                  |       | j                  |j
                  t        j                  j                         d d d         | j                  |d       y # 1 sw Y   xY w)Na  
            module curses
            curses.addch
                [
                y: int
                    Y-coordinate.
                x: int
                    X-coordinate.
                ]
                ch: char
                    Character to add.
                [
                attr: long
                    Attributes for the character.
                ]
                /
        ))r   r   )r   r   r   r   )r   rO  r(   ri  a  
            addch([y, x,] ch, [attr])


              y
                Y-coordinate.
              x
                X-coordinate.
              ch
                Character to add.
              attr
                Attributes for the character.
        
r   r   r1  r   ri  rh  re  rf  POSITIONAL_ONLYr$  r   r*  datasetr(   ri  r6  s         r   test_left_groupz ClinicParserTest.test_left_group  s    && ( "

 # 	LKD%4u5 L''-  %0  ):):)J)JKL L	L
 	H ' 		L L   A B,,B5	c                 p   | j                  d      }d}|D ]  \  }}| j                  ||      5  |j                  |   }| j                  |j                  |       | j                  |j
                  t        j                  j                         d d d         | j                  |d       y # 1 sw Y   xY w)Na  
            module curses
            curses.imaginary
               [
               [
               y1: int
                 Y-coordinate.
               y2: int
                 Y-coordinate.
               ]
               x1: int
                 X-coordinate.
               x2: int
                 X-coordinate.
               ]
               ch: char
                 Character to add.
               [
               attr1: long
                 Attributes for the character.
               attr2: long
                 Attributes for the character.
               attr3: long
                 Attributes for the character.
               [
               attr4: long
                 Attributes for the character.
               attr5: long
                 Attributes for the character.
               attr6: long
                 Attributes for the character.
               ]
               ]
               /
        ))y1)y2ry  )x1r   )x2r   ro  )attr1rO  )attr2rO  )attr3rO  )attr4r{   )attr5r{   )attr6r{   rp  a  
            imaginary([[y1, y2,] x1, x2,] ch, [attr1, attr2, attr3, [attr4, attr5,
                      attr6]])


              y1
                Y-coordinate.
              y2
                Y-coordinate.
              x1
                X-coordinate.
              x2
                X-coordinate.
              ch
                Character to add.
              attr1
                Attributes for the character.
              attr2
                Attributes for the character.
              attr3
                Attributes for the character.
              attr4
                Attributes for the character.
              attr5
                Attributes for the character.
              attr6
                Attributes for the character.
        rq  rs  s         r   test_nested_groupsz#ClinicParserTest.test_nested_groups  s    && "( "F
 # 	LKD%4u5 L''-  %0  ):):)J)JKL L	L 	H ' 	L Lrv  c                    t        j                         5 }| j                  t              5  | j	                  |       d d d        d d d        |j                         S # 1 sw Y   !xY w# 1 sw Y   j                         S xY wr   )r   r   r   r   r   r   )r   sr   s      r   r   z+ClinicParserTest.parse_function_should_failM  so    $$& 	'&"":. '##A&'	'   ' '	'   s!   A)AA)A&	"A))Bc                 N    d}| j                  d      }| j                  ||       y )NzpError on line 0:
Function two_top_groups_on_left has an unsupported group configuration. (Unexpected state 2.b)
z
            module foo
            foo.two_top_groups_on_left
                [
                group1 : int
                ]
                [
                group2 : int
                ]
                param: int
        rK  rL  s      r   0test_disallowed_grouping__two_top_groups_on_leftzAClinicParserTest.test_disallowed_grouping__two_top_groups_on_leftS  s5    6 	
 -- 
/ 
 	l+r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.two_top_groups_on_right
                param: int
                [
                group1 : int
                ]
                [
                group2 : int
                ]
        z_Function two_top_groups_on_right has an unsupported group configuration. (Unexpected state 6.b)r   r   r   s      r   1test_disallowed_grouping__two_top_groups_on_rightzBClinicParserTest.test_disallowed_grouping__two_top_groups_on_rightf  1    -- 
/ 
4 	 	c3r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.parameter_after_group_on_right
                param: int
                [
                [
                group1 : int
                ]
                group2 : int
                ]
        zfFunction parameter_after_group_on_right has an unsupported group configuration. (Unexpected state 6.a)r  r   s      r   8test_disallowed_grouping__parameter_after_group_on_rightzIClinicParserTest.test_disallowed_grouping__parameter_after_group_on_rightx  r  r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.group_after_parameter_on_left
                [
                group2 : int
                [
                group1 : int
                ]
                ]
                param: int
        zeFunction group_after_parameter_on_left has an unsupported group configuration. (Unexpected state 2.b)r  r   s      r   7test_disallowed_grouping__group_after_parameter_on_leftzHClinicParserTest.test_disallowed_grouping__group_after_parameter_on_left  r  r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.empty_group
                [
                [
                ]
                group2 : int
                ]
                param: int
        XFunction empty_group has an empty group.
All groups must contain at least one parameter.r  r   s      r   -test_disallowed_grouping__empty_group_on_leftz>ClinicParserTest.test_disallowed_grouping__empty_group_on_left  1    -- 	/ 	> 	 	c3r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.empty_group
                param: int
                [
                [
                ]
                group2 : int
                ]
        r  r  r   s      r   .test_disallowed_grouping__empty_group_on_rightz?ClinicParserTest.test_disallowed_grouping__empty_group_on_right  r  r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.empty_group
                param: int
                ]
                group2: int
                ]
        z2Function empty_group has a ] without a matching [.r  r   s      r   -test_disallowed_grouping__no_matching_bracketz>ClinicParserTest.test_disallowed_grouping__no_matching_bracket  s-    -- /  Cc3r   c                     | j                  d      }| j                  d|j                         | j                  dt        |j                               y )NzL
            module foo
            foo.bar

            Docstring

        zbar($module, /)
--

DocstringrO  r   r   r"  r0  r1  rT  s     r   test_no_parametersz#ClinicParserTest.test_no_parameters  sK    && (  	;X=O=OPC 3 345r   c                     | j                  ddd      }| j                  d|j                         | j                  dt        |j                               y )Nz
            module foo
            class foo.Bar "unused" "notneeded"
            foo.Bar.__init__

            Docstring

        rE  r{   )signatures_in_blockfunction_indexzBar()
--

DocstringrO  r  rT  s     r   test_init_with_no_parametersz-ClinicParserTest.test_init_with_no_parameters  sW    && ( "#1 ' 6 	183E3EFC 3 345r   c                 N    | j                  d      }d}| j                  ||       y )NzM
            module foo
            foo.bar => int
                /
        z%Illegal function name: foo.bar => intr  r   s      r   test_illegal_module_linez)ClinicParserTest.test_illegal_module_line  s,    -- / 
 6c3r   c                 N    | j                  d      }d}| j                  ||       y )NzM
            module foo
            foo.bar as 935
                /
        zIllegal C basename: 935r  r   s      r   test_illegal_c_basenamez(ClinicParserTest.test_illegal_c_basename  s,    -- / 
 (c3r   c                 J    | j                  d      }| j                  d|       y )NzX
            module foo
            foo.bar
                *
                *
        z%Function bar uses '*' more than once.r  r   r   s     r   test_single_starz!ClinicParserTest.test_single_star  s(    -- /  	=sCr   c                     d}d}|D ]@  }| j                  |      5  | j                  |      }| j                  ||       d d d        B y # 1 sw Y   MxY w)N)zmodule foo
foo.bar
  *z&module foo
foo.bar
  *
Docstring here.z"module foo
foo.bar
  this: int
  *z-module foo
foo.bar
  this: int
  *
Docstring.z=Function bar specifies '*' without any parameters afterwards.rE   )r   r   r   )r   rt  r   rE   r   s        r   #test_parameters_required_after_starz4ClinicParserTest.test_parameters_required_after_star  sf    
 N 	(EE* (55e<c3'( (	(( (   $AA	c                 N    | j                  d      }d}| j                  ||       y )NzX
            module foo
            foo.bar
                /
                /
        KFunction bar has an unsupported group configuration. (Unexpected state 0.d)r  r   s      r   test_single_slashz"ClinicParserTest.test_single_slash  1    -- / % 	 	c3r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.bar
                a: int
                /
                b: int
                /
        z%Function bar uses '/' more than once.r  r   s      r   test_double_slashz"ClinicParserTest.test_double_slash  s,    -- /  6c3r   c                 N    | j                  d      }d}| j                  ||       y )Nz
            module foo
            foo.bar
               x: int
               y: int
               *
               z: int
               /
        zUFunction bar mixes keyword-only and positional-only parameters, which is unsupported.r  r   s      r   test_mix_star_and_slashz(ClinicParserTest.test_mix_star_and_slash%  s1    -- / $ 	 	c3r   c                 N    | j                  d      }d}| j                  ||       y )Nz]
            module foo
            foo.bar
                /
                x: int
        r  r  r   s      r   1test_parameters_not_permitted_after_slash_for_nowzBClinicParserTest.test_parameters_not_permitted_after_slash_for_now5  r  r   c                 N    d}| j                  d      }| j                  ||       y )Nz#Error on line 0:
Too many var args
zt
            module foo
            foo.bar
               *vararg1: object
               *vararg2: object
        rK  rL  s      r   'test_parameters_no_more_than_one_varargz8ClinicParserTest.test_parameters_no_more_than_one_varargB  s5    " 	 -- /  	l+r   c                 J    | j                  d      }| j                  |d       y )Nz
              module foo
              foo.bar
                x: int
                  Nested docstring here, goeth.
                *
                y: str
              Not at column 0!
        z
            bar($module, /, x, *, y)
            --

            Not at column 0!

              x
                Nested docstring here, goeth.
        rS  rT  s     r   test_function_not_at_column_0z.ClinicParserTest.test_function_not_at_column_0O  rV  r   c                 N    | j                  d      }d}| j                  ||       y )Nzr
            module foo
            foo.bar
               *vararg1: object
            	*vararg2: object
        z-Tab characters are illegal in the Clinic DSL.r  r   s      r   test_indent_stack_no_tabsz*ClinicParserTest.test_indent_stack_no_tabsc  s,    -- /  >c3r   c                 J    | j                  d      }| j                  d|       y )Nzc
            module foo
            foo.bar
              a: object
             b: object
        zIllegal outdentr  r  s     r   !test_indent_stack_illegal_outdentz2ClinicParserTest.test_indent_stack_illegal_outdentm  s(    -- /  	'-r   c                     t               }t        |      d_        fdj                  d<   t	        j
                  d      }j                  |       | j                  j                         y )NFc                      t         dd      S )NflagT)setattr)r   s   r   <lambda>z1ClinicParserTest.test_directive.<locals>.<lambda>z  s    0M r   setflag)rB   r   r  
directivesr   r(  rw   r   )r   r   rE   r   s      @r   test_directivezClinicParserTest.test_directivev  sT    L1'M)$Y'U$r   c                     | j                  d      }|j                  \  }}|j                  d   j                  }| j	                  |t
        j                         y )Nz module os
os.access
   path: "s"r/  )rw   r)  r1  r3  r2  r   rG  )r   rE   rh   r*  rH  s        r   test_legacy_convertersz'ClinicParserTest.test_legacy_converters  sM    

?@ ++##F+66dF$8$89r   c                     d}d}|D ]@  }| j                  |      5  | j                  |      }| j                  ||       d d d        B y # 1 sw Y   MxY w)NRError on line 0:
Annotations must be either a name, a function call, or a string.
)zmodule os
os.access
   path: 42z"module os
os.access
   path: 42.42z module os
os.access
   path: 42jz"module os
os.access
   path: b"42"r  r   r   r   r   expected_failure_messagert  rE   r   s        r   5test_legacy_converters_non_string_constant_annotationzFClinicParserTest.test_legacy_converters_non_string_constant_annotation  su    Q 	!
  	@EE* @55e<  &>?@ @	@@ @r  c                     d}d}|D ]@  }| j                  |      5  | j                  |      }| j                  ||       d d d        B y # 1 sw Y   MxY w)Nr  )z3module os
os.access
   path: {"some": "dictionary"}z6module os
os.access
   path: ["list", "of", "strings"]z3module os
os.access
   path: (x for x in range(42))r  r  r  s        r   -test_other_bizarre_things_in_annotations_failz>ClinicParserTest.test_other_bizarre_things_in_annotations_fail  su    Q 	!

  	@EE* @55e<  &>?@ @	@@ @r  c                     d}d}|D ]@  }| j                  |      5  | j                  |      }| j                  ||       d d d        B y # 1 sw Y   MxY w)NzHError on line 0:
Cannot use a kwarg splat in a function-call annotation
)z1module fo
fo.barbaz
   o: bool(**{None: "bang!"})z.module fo
fo.barbaz -> bool(**{None: "bang!"})z+module fo
fo.barbaz -> bool(**{"bang": 42})z0module fo
fo.barbaz
   o: bool(**{"bang": None}))r   r  )r   expected_error_msgrt  r   r   s        r   9test_kwarg_splats_disallowed_in_function_call_annotationszJClinicParserTest.test_kwarg_splats_disallowed_in_function_call_annotations  sn    G 	
  	:B$ :55b9  &89: :	:: :r  c                 R    d}d}| j                  |      }| j                  ||       y )NzhError on line 0:
A 'self' parameter, if specified, must be the very first thing in the parameter block.
zz
            module foo
            foo.func
                a: int
                self: self(type="PyObject *")
        rK  r   r  rE   r   s       r   test_self_param_placementz*ClinicParserTest.test_self_param_placement  s6    ( 	
 --e401r   c                 R    d}d}| j                  |      }| j                  ||       y )Nz?Error on line 0:
A 'self' parameter cannot be marked optional.
zj
            module foo
            foo.func
                self: self(type="PyObject *") = None
        rK  r  s       r   "test_self_param_cannot_be_optionalz3ClinicParserTest.test_self_param_cannot_be_optional  s6    > 	
 --e401r   c                 R    d}d}| j                  |      }| j                  ||       y )NzError on line 0:
A 'defining_class' parameter, if specified, must either be the first thing in the parameter block, or come just after 'self'.
z
            module foo
            foo.func
                self: self(type="PyObject *")
                a: int
                cls: defining_class
        rK  r  s       r   #test_defining_class_param_placementz4ClinicParserTest.test_defining_class_param_placement  s7    O 	
 --e401r   c                 R    d}d}| j                  |      }| j                  ||       y )NzIError on line 0:
A 'defining_class' parameter cannot be marked optional.
zs
            module foo
            foo.func
                cls: defining_class(type="PyObject *") = None
        rK  r  s       r   ,test_defining_class_param_cannot_be_optionalz=ClinicParserTest.test_defining_class_param_cannot_be_optional  s7    H 	
 --e401r   c                     d}d}| j                  t        |      5  | j                  |       d d d        y # 1 sw Y   y xY w)Nz
            module foo
            class Foo "" ""
            Foo.__init__
                cls: defining_class
                a: object
        z0Slot methods cannot access their defining class.)assertRaisesRegexr   r   )r   rE   r   s      r   .test_slot_methods_cannot_access_defining_classz?ClinicParserTest.test_slot_methods_cannot_access_defining_class  sD     A##J4 	'&	' 	' 	's   6?c                 N    d}| j                  d      }| j                  ||       y )Nz1Error on line 0:
__new__ must be a class method!
zT
            module foo
            class Foo "" ""
            Foo.__new__
        rK  r   r  r   s      r   test_new_must_be_a_class_methodz0ClinicParserTest.test_new_must_be_a_class_method  s6    0 	 -- / 
 	01r   c                 N    d}| j                  d      }| j                  ||       y )NzQError on line 0:
__init__ must be a normal method, not a class or static method!
zn
            module foo
            class Foo "" ""
            @classmethod
            Foo.__init__
        rK  r  s      r   !test_init_must_be_a_normal_methodz2ClinicParserTest.test_init_must_be_a_normal_method  s7    P 	 -- /  	01r   c                    | j                  d      }|j                  d   }|j                  fd}dddddddd	dd
d	df}|D ]  }|j                         \  }}| j	                  ||      5   ||      }| j                  ||j                         |j                  d      }	|r| j                  d|	       n| j                  d|	       |j                  d	      }
| j                  d|
       d d d         y # 1 sw Y   xY w)Nz
            module foo
            foo.func
                fn: object
                k: float
                i: float(unused=True)
                /
                *
                flag: bool(unused=True) = False
        rO  c                 "    |    j                   S r   r3  )r   paramss    r   r  z4ClinicParserTest.test_unused_param.<locals>.<lambda>  s    &*.. r   r   F)r(   unusedkiTr  )	in_parser	Py_UNUSED)
rw   r)  r1  valuesr   r   r  simple_declarationr   assertNotIn)r   rE   sigrH  rt  paramr(   r  r6  declparser_declr  s              @r   test_unused_paramz"ClinicParserTest.test_unused_param  s   

 	 	 q!.U+E*D)t,	
  	;E <<>LD&47 ;J  2 ++e+<MM+t4$$[$7  22T2B  k:; ;	;; ;s   0BC==D	c                 |    t               }t        |      }t        j                  |      }|j	                  |       |S r   )rB   r   r   r(  rw   )r   textr   r   rE   s        r   rw   zClinicParserTest.parse8  s1    L1T"Ur   c                     | j                  |      }|j                  }| j                  t        |      |       t	        |d   t
        j                        sJ t	        ||   t
        j                        sJ ||   S )Nr   )rw   r)  r   r0  
isinstancer   ModuleFunction)r   r  r  r  rE   r  s         r   r   zClinicParserTest.parse_function?  sf    

4 Q!45!A$..!N+V__==  r   c                    | j                  t        t        j                        d       | j                  t        t        j                        d       d}t        j                         5 }| j                  t              5  t        j                  ddd       d d d        d d d        j                         }| j                  ||       y # 1 sw Y   4xY w# 1 sw Y   8xY w)Nz<Unspecified>z<Null>z>Error in file "clown.txt" on line 69:
The igloos are melting!
zThe igloos are melting!z	clown.txtE   )r@   line_number)r   rb   r   unspecifiedNULLr   r   r   r   failr   )r   r   r   actuals       r   test_scaffoldingz!ClinicParserTest.test_scaffoldingG  s    f001?Cfkk*H5( 	 $$& 	B&"":. B5%0bBB	B "*	B B	B 	Bs$   )C?CCC	CC N)r{   rO  )<r    r!   r"   r$  r+  r-  r7  r;  r=  rC  rI  rM  rQ  rU  rY  r[  r_  rc  rj  rm  ru  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  rw   r   r   r$   r   r   r   r     s(   3
	,,
A*
*,,
:,:(0<V	%
%(TL\!,& $ $ $ " "
 	66  D( 
    ,( .%:@ @: 222 2
'
22$;L!+r   r   c                       e Zd ZdZej
                  j                  ej                  dd      Z	dd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y)ClinicExternalTestNr   z	clinic.pyT)expect_successc                   t        j                  t        j                  d| j                  g|ddt         j
                  t         j
                        5 }|j                          |rD|j                  r8| j                  dj                  g |j                  |j                               |j                  j                         }|j                  j                         }| j                  |d       |cd d d        S # 1 sw Y   y xY w)Nz-Xutf8utf-8r   )encodingbufsizer   stderrrD   )
subprocessPopenr`   
executable	clinic_pyPIPEwait
returncoder  joinr   r  readr   )r   r  r)   procr   r  s         r   _do_testzClinicExternalTest._do_test]  s    ^^Xt~~==????
 	 IIK$//		"''">DKK">$++">?@[[%%'F[[%%'FVR(	 	 	s   BC<<Dc                       | j                   | S r   r  r   r)   s     r   r  z!ClinicExternalTest.expect_successn  s    t}}d##r   c                 &     | j                   |ddiS )Nr  Fr  r  s     r   ry   z!ClinicExternalTest.expect_failureq  s    t}}d9599r   c                    d}t        j                  |      }t        |dd      5 }|j                         }d d d        | j	                  t
        t               | j                  ddt        |      }| j                  |d       t        t        dd      5 }|j                         }d d d        | j                         y # 1 sw Y   xY w# 1 sw Y   (xY w)Nzclinic.test.cr   r  r  -f-orD   )	r   findfileopenr  
addCleanupr	   r   r  r   )r   CLINIC_TESTsourcer  orig_contentsr   new_contentss          r   test_externalz ClinicExternalTest.test_externalt  s    %!!+.&#0 	%AFFHM	% 	'!!$ff=b!&#0 	$A668L	$ 	}5	% 	%	$ 	$s   CCC
Cc                    t        d      }t        j                         5 }t        j                  j                  |d      }t        |dd      5 }|j                  |       d d d        t        j                  |      j                  }| j                  |       t        j                  |      j                  }d d d        | j                         y # 1 sw Y   sxY w# 1 sw Y   (xY w)Nz
            /*[clinic input]
            [clinic start generated code]*/
            /*[clinic end generated code: output=da39a3ee5e6b4b0d input=da39a3ee5e6b4b0d]*/
        rr   wr  r  )r
   r   temp_dirr'  r/  r  r  writestatst_mtime_nsr  r   )r   codetmp_dirr   r  	pre_mtime
post_mtimes          r   test_no_changez!ClinicExternalTest.test_no_change  s       
 ! 	1Wgx0Bb#0 A//I#00J	1 	J/ 	1 	1s$   /CC!ACC	CC(c                 ~   t        d      }t        d      }t        j                         5 }t        j                  j                  |d      }t        |dd      5 }|j                  |       d d d        | j                  |      }| j                  |j                  |             | j                  d|      }| j                  |d       d	}t        |d
d      5 }|j                         }d d d        | j                  j                  |             d d d        y # 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   y xY w)NaA  
            /*[clinic input]
            output preset block
            module test
            test.fn
                a: int
            [clinic start generated code]*/

            const char *hand_edited = "output block is overwritten";
            /*[clinic end generated code: output=bogus input=bogus]*/
        z
            Checksum mismatch!
            Expected: bogus
            Computed: 2ed19
            Suggested fix: remove all generated code including the end marker,
            or use the '-f' option.
        rr   r%  r  r  r  rD   zP/*[clinic end generated code: output=2124c291eb067d76 input=9543a8d2da235301]*/
r   )r
   r   r&  r'  r/  r  r  r'  ry   r   endswithr  r   r  )	r   invalid_inputfail_msgr+  r   r  r   checksum	generateds	            r   test_cli_forcez!ClinicExternalTest.test_cli_force  s*    
  
    ! 	:Wgx0Bb#0 'A&'
 %%b)COOCLL23%%dB/CS"%F  b#0 %AFFH	%OOI..x89'	: 	:' '% %#	: 	:s<   /D3D,A-D3D'*(D3D$	 D3'D0	,D33D<c                    t        d      }d}d}d}d }t        j                         5 } ||||        ||||       t        j                  j                  |d      }t        j                  |      5 } ||||       | j                  dd	d
|      }	d d d        |D ]O  }
| j                  |
      5  t        j                  j                  ||
      }| j                  |	       d d d        Q |D ]O  }
| j                  |
      5  t        j                  j                  ||
      }| j                  |	       d d d        Q |D ]O  }
| j                  |
      5  t        j                  j                  ||
      }| j                  |	       d d d        Q 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NzR
            /*[clinic input]
            [clinic start generated code]*/
        pass)zfile1.czfile2.c)zfile1.pyzfile2.pyc                     | D ]J  }t         j                  j                  ||      }t        |dd      5 }|j	                  |       d d d        L y # 1 sw Y   WxY w)Nr%  r  r  )r'  r/  r  r  r'  )filessrcdirr*  r   r/  r  s         r   create_filesz6ClinicExternalTest.test_cli_make.<locals>.create_files  sX     "ww||FB/$g6 "!GGDM" """ "s   AA		externals)r/  -v--make--srcdirrs   )
r
   r   r&  r'  r/  r  r  r   r   r  )r   c_codepy_codec_filespy_filesr;  r+  ext_pathr<  r   r@   r/  s               r   test_cli_makez ClinicExternalTest.test_cli_make  s      &)	" ! 	0W'627G4 ww||G[9H##2 OiWi8 ))$*gN	O $ -\\8\4 -77<<:DMM$,- -- % 0\\8\4 077<<:D$$T3/0 00
 $ 0\\8\4 077<<(;D$$T3/0 00/	0 	0O O- -0 0
0 01	0 	0sl   AG4F!G23F.%!G3F;9!G3G
G!F+	&G.F83G;G GGGGc                 b   t        j                         5 }t        j                  j	                  |d      }t        |dd      5 }|j                  d       d d d        | j                  d|      }| j                  |j                         |       d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)Nrr   r%  r  r  rD   r=  )
r   r&  r'  r/  r  r  r'  r  r   rv   )r   r+  r   r  r   s        r   test_cli_verbosez#ClinicExternalTest.test_cli_verbose  s    ! 	.Wgx0Bb#0 A%%dB/CSYY["-	. 	. 	. 	.s#   /B%B:B%B"	B%%B.c                 J    | j                  d      }| j                  d|       y )Nz-husage: clinic.py)r  r   r  s     r   test_cli_helpz ClinicExternalTest.test_cli_help  s!    !!$'(#.r   c           	      $   t        d      }d}t        d      }| j                  d      }| j                  |j                  |      |       | j                  |j	                  |      |       |j                  |      }|j                  |      }|j                  d      }t        ||      D ]W  \  }}|j                         }| j                  |      5  | j                  |j                  |      d|d|       d d d        Y y # 1 sw Y   dxY w)	Nz
            Legacy converters:
                B C D L O S U Y Z Z#
                b c d f h i l p s s# s* u u# w* y y# y* z z# z*

            Converters:
        )boolbytechardefining_classdoublefildesfloatintlong	long_longobject	Py_buffer
Py_complex
Py_ssize_t
Py_UNICODEPyByteArrayObjectPyBytesObjectr   shortsize_tslice_indexstrunicodeunsigned_charunsigned_intunsigned_longunsigned_long_longunsigned_shorta  
            Return converters:
                bool()
                double()
                float()
                init()
                int()
                long()
                Py_ssize_t()
                size_t()
                unsigned_int()
                unsigned_long()

            All converters also accept (c_default=None, py_default=None, annotation=None).
            All return converters also accept (py_default=None).
        --convertersr   r  zexpected converter z, got )r
   r  r   r   r0  removeprefixremovesuffixr   zipr   r   )r   preludeexpected_convertersfinaler   linesr3  lines           r   test_cli_convertersz&ClinicExternalTest.test_cli_converters  s     
<     !!.1
 	w/5V,c2w'v&		$"#6> 	OIt;;=D	2 OOI.))fTHE 	 s   (DD	c                 P    | j                  dd      }d}| j                  ||       y )Nrg  rr   zGUsage error: can't specify --converters and a filename at the same timer   r   s      r   %test_cli_fail_converters_and_filenamez8ClinicExternalTest.test_cli_fail_converters_and_filename@  s.    !!.(;. 	 	c3r   c                 H    | j                         }| j                  d|       y )NrI  r   r  s     r   test_cli_fail_no_filenamez,ClinicExternalTest.test_cli_fail_no_filenameH  s    !!#(#.r   c                 T    | j                  dddd      }d}| j                  ||       y )Nr  out.czinput.czmoreinput.cz1Usage error: can't use -o with multiple filenamesr   r   s      r   'test_cli_fail_output_and_multiple_filesz:ClinicExternalTest.test_cli_fail_output_and_multiple_filesL  s+    !!$MJAc3r   c                     dD ]D  }| j                  |      5   | j                  dg| }d}| j                  ||       d d d        F y # 1 sw Y   QxY w)N))r  rv  )z
filename.c)optsr>  z2Usage error: can't use -o or filenames with --make)r   ry   r   )r   ry  r   r   s       r   )test_cli_fail_filename_or_output_and_makez<ClinicExternalTest.test_cli_fail_filename_or_output_and_makeQ  sc    4 	(D4( ()d))(:T:Jc3'( (	(( (   (AA	c                 R    | j                  ddd      }d}| j                  ||       y )Nr>  r?  rD   z3Usage error: --srcdir must not be empty with --maker   r   s      r   !test_cli_fail_make_without_srcdirz4ClinicExternalTest.test_cli_fail_make_without_srcdirX  s)    !!(J;Cc3r   )r    r!   r"   r#   r'  r/  r  r   toolsdirr  r  r  ry   r#  r.  r5  rE  rG  rJ  rp  rr  rt  rw  rz  r}  r$   r   r   r  r  Y  su    GZ00(KHI-1 "$:6 0(&:P)0V./GR / 
( r   r  z_testclinic is missingc                      e Zd Z e       j	                  d  ee      D               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, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9y5)6ClinicFunctionalTestc              #   b   K   | ]'  }|j                  d       r|t        t        |      f ) yw)test_N)r   getattr	ac_tester).0r(   s     r   	<genexpr>zClinicFunctionalTest.<genexpr>e  s1      L$//'2J 79d34 Ls   -/c                 f   | j                  t              5  t        j                          d d d        | j	                  t        j                  dd      d       | j	                  t        j                  g d      g df       | j	                  t        j                  d      d       y # 1 sw Y   }xY w)NrO  r{   rO  r{   zwhatever class)rO  N)r   	TypeErrorr  objects_converterr   r9   s    r   test_objects_converterz+ClinicFunctionalTest.test_objects_converterh  s    y) 	*'')	*44Q:FC44R9IJRQaLbc44Q7C		* 	*s   B''B0c                     | j                  t              5  t        j                  d       d d d        | j	                  t        j                  d      d       y # 1 sw Y   /xY w)NrO     BytesObject)r  )r   r  r  bytes_object_converterr   r9   s    r   test_bytes_object_converterz0ClinicFunctionalTest.test_bytes_object_convertero  sO    y) 	0,,Q/	099.IK\]	0 	0   AA#c                     | j                  t              5  t        j                  d       d d d        t	        d      }| j                  t        j                  |      |f       y # 1 sw Y   ;xY w)NrO  s   ByteArrayObject)r   r  r  byte_array_object_converter	bytearrayr   )r   byte_arrs     r    test_byte_array_object_converterz5ClinicFunctionalTest.test_byte_array_object_convertert  s[    y) 	511!4	5/0>>xH8+V	5 	5s   A&&A/c                     | j                  t              5  t        j                  d       d d d        | j	                  t        j                  d      d       y # 1 sw Y   /xY w)NrO  ra  )ra  )r   r  r  unicode_converterr   r9   s    r   test_unicode_converterz+ClinicFunctionalTest.test_unicode_converterz  sN    y) 	+''*	+44Y?N	+ 	+r  c                 n   | j                  t              5  t        j                  ddd       d d d        | j	                  t        j                         d       | j	                  t        j                  dg d      d       | j	                  t        j                  ddd	id
      d       y # 1 sw Y   ~xY w)NFz	not a int)TTTrD      )FFT)z	not emptyrO  r{   r   )TTF)r   r  r  bool_converterr   r9   s    r   test_bool_converterz(ClinicFunctionalTest.test_bool_converter  s    y) 	@$$UE;?	@1135GH11"b!<>RS11.1a&!LNab		@ 	@s   B++B4c                    | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  d       d d d        g d}t	        d |D              }| j                  t        j                         |       g d}t	        d |D              }| j                  t        j                  | |       y # 1 sw Y   xY w# 1 sw Y   xY w)NrO  s   ab)   A         	   
            "   '   ?   \       c              3   2   K   | ]  }t        |        y wr   ordr  r   s     r   r  z;ClinicFunctionalTest.test_char_converter.<locals>.<genexpr>       /AQ/   )   1   2   3   4   5   6   7   8   9   0   a   b   c   dc              3   2   K   | ]  }t        |        y wr   r  r  s     r   r  z;ClinicFunctionalTest.test_char_converter.<locals>.<genexpr>  r  r  )r   r  r  char_convertertupler   )r   charsr   s      r   test_char_converterz(ClinicFunctionalTest.test_char_converter  s    y) 	($$Q'	(y) 	,$$U+	,r///113X>d///11598D	( 	(	, 	,s   C	C&C#&C/c                    ddl m} | j                  t              5  t	        j
                  d       d d d        | j                  t              5  t	        j
                  |dz          d d d        | j                  t              5  t	        j
                  d|dz          d d d        | j                  t              5  t	        j
                  g        d d d        | j                  t	        j
                         d       | j                  t	        j
                  dd|dz         d       | j                  t	        j
                  dd|dz   dz  dz         d	       y # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)
Nr   )	UCHAR_MAXr   rO     "   8   r   r   r   rE  {   r   r   r  )	_testcapir  r   OverflowErrorr  unsigned_char_converterr  r   )r   r  s     r   test_unsigned_char_converterz1ClinicFunctionalTest.test_unsigned_char_converter  sD   '}- 	2--b1	2}- 	=--i!m<	=}- 	@--aQ?	@y) 	2--b1	2::<lK::1aQOQZ[::1a)a-STATWZAZ[]hi	2 	2	= 	=	@ 	@	2 	2/   EE&E2<E>E#&E/2E;>Fc                 .   ddl m}m} | j                  t              5  t        j                  |dz
         d d d        | j                  t              5  t        j                  |dz          d d d        | j                  t              5  t        j                  g        d d d        | j                  t        j                  d      d       | j                  t        j                  d      d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   lxY w)Nr   )SHRT_MINSHRT_MAXrO  .r    )r  )	r  r  r  r   r  r  short_converterr  r   )r   r  r  s      r   test_short_converterz)ClinicFunctionalTest.test_short_converter  s    0}- 	4%%hl3	4}- 	4%%hl3	4y) 	*%%b)	*22598D2248'B	4 	4	4 	4	* 	*s#   C3C?
D3C<?DDc                    ddl m} | j                  t              5  t	        j
                  d       d d d        | j                  t              5  t	        j
                  |dz          d d d        | j                  t              5  t	        j
                  d|dz          d d d        | j                  t              5  t	        j
                  g        d d d        | j                  t	        j
                         d       | j                  t	        j
                  dd|dz         d       | j                  t	        j
                  dd|dz   dz  dz         d	       y # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)
Nr   )	USHRT_MAXr   rO  r  r  rE  r  r  )	r  r  r   r   r  unsigned_short_converterr  r  r   )r   r  s     r   test_unsigned_short_converterz2ClinicFunctionalTest.test_unsigned_short_converter  sD   'z* 	3..r2	3}- 	>..y1}=	>}- 	A..q)a-@	Ay) 	3..r2	3;;=|L;;Aq)a-PR[\;;Aq9q=TUBUX[B[\^ij	3 	3	> 	>	A 	A	3 	3r  c                    ddl m}m} | j                  t              5  t        j                  |dz
         d d d        | j                  t              5  t        j                  |dz          d d d        | j                  t              5  t        j                  ddd       d d d        | j                  t              5  t        j                  g        d d d        | j                  t        j                         d       | j                  t        j                  ddd      ddt        d      f       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   )INT_MININT_MAXrO  r{   rE  )r  r  -   3)
r  r  r  r   r  r  r4  r  r   r  )r   r  r  s      r   test_int_converterz'ClinicFunctionalTest.test_int_converter  s   .}- 	1##GaK0	1}- 	1##GaK0	1y) 	-##Aq!,	-y) 	(##B'	(002LA00As;aCH=MN	1 	1	1 	1	- 	-	( 	(s/   D5E
E?E5D>E
EE"c                    ddl m} | j                  t              5  t	        j
                  d       d d d        | j                  t              5  t	        j
                  |dz          d d d        | j                  t              5  t	        j
                  d|dz          d d d        | j                  t              5  t	        j
                  g        d d d        | j                  t	        j
                         d       | j                  t	        j
                  dd|dz         d       | j                  t	        j
                  dd|dz   dz  dz         d	       y # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)
Nr   )UINT_MAXr   rO  r  r  rE  r  r  )	r  r  r   r   r  unsigned_int_converterr  r  r   )r   r  s     r   test_unsigned_int_converterz0ClinicFunctionalTest.test_unsigned_int_converter  s?   &z* 	1,,R0	1}- 	;,,X\:	;}- 	>,,Q1=	>y) 	1,,R0	199;\J99!Q1MyY99!QAQR@RUX@XY[fg	1 	1	; 	;	> 	>	1 	1r  c                 ,   ddl m}m} | j                  t              5  t        j                  |dz
         d d d        | j                  t              5  t        j                  |dz          d d d        | j                  t              5  t        j                  g        d d d        | j                  t        j                         d       | j                  t        j                  d      d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   kxY w)Nr   )LONG_MINLONG_MAXrO  r  r  r  )	r  r  r  r   r  r  long_converterr  r   )r   r  r  s      r   test_long_converterz(ClinicFunctionalTest.test_long_converter  s    0}- 	3$$X\2	3}- 	3$$X\2	3y) 	)$$R(	)113U;11%8(C	3 	3	3 	3	) 	)#   C2C>
D
2C;>D
Dc                    ddl m} | j                  t              5  t	        j
                  d       d d d        | j                  t              5  t	        j
                  |dz          d d d        | j                  t              5  t	        j
                  d|dz          d d d        | j                  t              5  t	        j
                  g        d d d        | j                  t	        j
                         d       | j                  t	        j
                  dd|dz         d       | j                  t	        j
                  dd|dz   dz  dz         d	       y # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)
Nr   )	ULONG_MAXr   rO  r  r  rE  r  r  )	r  r  r   r   r  unsigned_long_converterr  r  r   )r   r  s     r   test_unsigned_long_converterz1ClinicFunctionalTest.test_unsigned_long_converter  sD   'z* 	2--b1	2}- 	=--i!m<	=}- 	@--aQ?	@y) 	2--b1	2::<lK::1aQOQZ[::1a)a-STATWZAZ[]hi	2 	2	= 	=	@ 	@	2 	2r  c                 ,   ddl m}m} | j                  t              5  t        j                  |dz
         d d d        | j                  t              5  t        j                  |dz          d d d        | j                  t              5  t        j                  g        d d d        | j                  t        j                         d       | j                  t        j                  d      d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   kxY w)Nr   )	LLONG_MIN	LLONG_MAXrO  r  r  r  )	r  r  r  r   r  r  long_long_converterr  r   )r   r  r  s      r   test_long_long_converterz-ClinicFunctionalTest.test_long_long_converter  s    2}- 	9)))a-8	9}- 	9)))a-8	9y) 	.))"-	.668%@66u=xH	9 	9	9 	9	. 	.r  c                    ddl m} | j                  t              5  t	        j
                  d       d d d        | j                  t              5  t	        j
                  |dz          d d d        | j                  t              5  t	        j
                  d|dz          d d d        | j                  t              5  t	        j
                  g        d d d        | j                  t	        j
                         d       | j                  t	        j
                  dd|dz         d       | j                  t	        j
                  dd|dz   dz  dz         d	       y # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)
Nr   )
ULLONG_MAXr   rO  r  r  rE  r  r  )	r  r  r   r   r  unsigned_long_long_converterr  r  r   )r   r  s     r   !test_unsigned_long_long_converterz6ClinicFunctionalTest.test_unsigned_long_long_converter  sJ   (z* 	72226	7}- 	C22:>B	C}- 	F221j1nE	Fy) 	72226	7??A<P??1jSTnUW`a??1zTU~YZFZ]`F`acno	7 	7	C 	C	F 	F	7 	7r  c                 0   ddl m}m} | j                  t              5  t        j                  |dz
         d d d        | j                  t              5  t        j                  |dz          d d d        | j                  t              5  t        j                  g        d d d        | j                  t        j                         d       | j                  t        j                  ddd       d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w)Nr   PY_SSIZE_T_MINPY_SSIZE_T_MAXrO  r  r{   rO  r{   r  )	r  r  r   r   r  r  py_ssize_t_converterr  r   r   r  r   s      r   test_py_ssize_t_converterz.ClinicFunctionalTest.test_py_ssize_t_converter  s    <}- 	?**>A+=>	?}- 	?**>A+=>	?y) 	/**2.	/779<H771dCZP	? 	?	? 	?	/ 	/s#   C4D 
D4C= D	Dc                    ddl m}m} | j                  t              5  t        j                  g        d d d        | j                  t        j                         d       | j                  t        j                  ddd       d       | j                  t        j                  ||dz   |dz         |||f       | j                  t        j                  ||dz
  |dz
        |||f       y # 1 sw Y   xY w)Nr   r  r  rO  r{   r  i  )r  r  r   r   r  r  slice_index_converterr   r  s      r   test_slice_index_converterz/ClinicFunctionalTest.test_slice_index_converter  s    <y) 	0++B/	088:LI88AtDjQ88Z[I[]knr]rs(..I	K88Z[I[]knr]rs(..I	K	0 	0s   C((C1c                 H   | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  g        d d d        | j                  t        j                         d       y # 1 sw Y   axY w# 1 sw Y   :xY w)Nr   r  )r   r   r  size_t_converterr  r   r9   s    r   test_size_t_converterz*ClinicFunctionalTest.test_size_t_converter  s}    z* 	+&&r*	+y) 	+&&r*	+335u=		+ 	+	+ 	+s   B	BBB!c                    | j                  t              5  t        j                  g        d d d        | j	                  t        j                         d       | j	                  t        j                  d      d       y # 1 sw Y   SxY wN)g      )@      ࿩r  )r   r  r  float_converterr   r9   s    r   test_float_converterz)ClinicFunctionalTest.test_float_converter#  sg    y) 	*%%b)	*224g>2248'B	* 	*   A>>Bc                    | j                  t              5  t        j                  g        d d d        | j	                  t        j                         d       | j	                  t        j                  d      d       y # 1 sw Y   SxY wr  )r   r  r  double_converterr   r9   s    r   test_double_converterz*ClinicFunctionalTest.test_double_converter)  sg    y) 	+&&r*	+335w?33D97C	+ 	+r  c                    | j                  t              5  t        j                  g        d d d        | j	                  t        j                  t        dd            t        dd      f       | j	                  t        j                  t        d            t        d      f       | j	                  t        j                  d      d       | j	                  t        j                  d      d       y # 1 sw Y   xY w)NrO  r{   z-1-2jr  r  
   )r  )r   r  r  py_complex_converterr   complexr9   s    r   test_py_complex_converterz.ClinicFunctionalTest.test_py_complex_converter/  s    y) 	/**2.	/771FQRTUHXY778HIGT[L\K^_77=wG77;UC	/ 	/s   C11C:c                 p   | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  ddd       d d d        | j                  t              5  t        j                  ddd       d d d        | j                  t        j                  ddd      d       | j                  t        j                  ddd      d       | j                  t        j                  ddd	      d
       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)NrO  r   r   r      b br  r   r  c cr   r   r  )r   r  r  rG  r   r   r9   s    r   test_str_converterz'ClinicFunctionalTest.test_str_converter7  s    y) 	'##A&	'y) 	3##Cc2	3z* 	7##C#6	700dC@/R00dDA?S00dFCEWX	' 	'	3 	3	7 	7s#   D	D >D,D D),D5c                    | j                  t              5  t        j                  d       d d d        | j	                  t        j                  ddd      d       | j                  t              5  t        j                  ddd       d d d        | j	                  t        j                  ddt        t        d      g            d       | j	                  t        j                  ddt        t        d      dt        d      g            d	       | j	                  t        j                  ddd
      d	       y # 1 sw Y   xY w# 1 sw Y   xY w)NrO  r   r   r   r   r  r  r   r  s   c c)r   r  r  str_converter_encodingr   r  r  r9   s    r   test_str_converter_encodingz0ClinicFunctionalTest.test_str_converter_encodingB  s   y) 	0,,Q/	099#sCH/Zy) 	@,,S'3?	@99#tYPSTWPXzEZ[]lm99#tYPSTWPXZ[]`ad]eOfEgh-	/99#tYOQef	0 	0	@ 	@s   D70E7EEc           	          | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  dt        g d            d       y # 1 sw Y   ;xY w)Nr   r   abcrO  r{   rE  )s   abcs   )r   r  r  py_buffer_converterr   r  r9   s    r   test_py_buffer_converterz-ClinicFunctionalTest.test_py_buffer_converterM  sX    y) 	4))#s3	466ui	>RSUno	4 	4s   A''A0c                     | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       y )NrO  r{   r  r   r   )r   r  keywordsr9   s    r   test_keywordsz"ClinicFunctionalTest.test_keywordsR  sY    ++Aq16:++A3V<++a15v>r   c                     | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  dd      d       | j	                  t        j                  dd      d       y # 1 sw Y   XxY w)NrO  r{   r(  r  r   )r   r  r  keywords_kwonlyr   r9   s    r   test_keywords_kwonlyz)ClinicFunctionalTest.test_keywords_kwonlyW  so    y) 	,%%a+	,221:FC22Q!<fE	, 	,s   BBc                 $   | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t        j                  ddd      d       | j                  t        j                  dd      d       | j                  t        j                  ddd      d       | j                  t        j                  dd	      d
       | j                  t        j                  ddd      d       y )NrO  rO  NNr{   rO  r{   NrE  r$  r(  r   r   r   rO  NrE  r   )r   r  keywords_optr9   s    r   test_keywords_optz&ClinicFunctionalTest.test_keywords_opt]  s    //2OD//15|D//1a8)D//Q7F//1:IF//!q9<H//!qA>	Jr   c                 Z   | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t              5  t        j                  ddd       d d d        | j                  t        j                  dd      d       | j                  t        j                  ddd      d       | j                  t        j                  dd	      d
       | j                  t        j                  dddd      d       y # 1 sw Y   xY w)NrO  rO  NNNr{   rO  r{   NNrE  r(  r1  rO  r{   rE  Nr2  )rO  NrE  N   r   r   r   r^   rO  r{   rE  r:  )r   r  keywords_opt_kwonlyr   r  r9   s    r   test_keywords_opt_kwonlyz-ClinicFunctionalTest.test_keywords_opt_kwonlyf  s    66q9;PQ66q!<>PQy) 	3))!Q2	366qA>@RS66q!qA?S66a@BTU66a1JLY	3 	3s   !D!!D*c                    | j                  t        j                  d      d       | j                  t              5  t        j                  dd       d d d        | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  ddd	      d
       y # 1 sw Y   xY w)NrO  r/  r{   r(  r0  rE  r2  r3  r   r$  )r   r  keywords_kwonly_optr   r  r9   s    r   test_keywords_kwonly_optz-ClinicFunctionalTest.test_keywords_kwonly_optp  s    66q9?Ky) 	0))!Q/	066qA>M66a@,O66a1EyQ		0 	0s   CCc                    | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  dd      d       | j	                  t        j                  dd      d       y # 1 sw Y   xY w# 1 sw Y   cxY w)NrO  r{   r   r  r(  )r   r  r  posonly_keywordsr   r9   s    r   test_posonly_keywordsz*ClinicFunctionalTest.test_posonly_keywordsx  s    y) 	*&&q)	*y) 	1&&a0	133Aq96B33A;VD	* 	*	1 	1s   B7	C7C Cc                    | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  dd      d       y # 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   IxY w)NrO  r{   r   r(  r  )r   r  r  posonly_kwonlyr   r9   s    r   test_posonly_kwonlyz(ClinicFunctionalTest.test_posonly_kwonly  s    y) 	($$Q'	(y) 	+$$Q*	+y) 	/$$qA.	/11!q96B	( 	(	+ 	+	/ 	/s#   C	C=CCCC&c                 (   | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  ddd       d d d        | j                  t              5  t        j                  ddd       d d d        | j	                  t        j                  ddd      d       | j	                  t        j                  ddd      d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w)NrO  r{   rE  r   r1  r$  r   r   )r   r  r  posonly_keywords_kwonlyr   r9   s    r   test_posonly_keywords_kwonlyz1ClinicFunctionalTest.test_posonly_keywords_kwonly  s    y) 	1--a0	1y) 	7--aA6	7y) 	=--Q!<	=::1a1EyQ::1QGS	1 	1	7 	7	= 	=s#   C0	C<>D0C9<DDc                    | j                  t              5  t        j                  d       d d d        | j	                  t        j                  dd      d       | j	                  t        j                  ddd      d       | j	                  t        j                  dddd      d       | j	                  t        j                  dd      d       | j	                  t        j                  ddd	      d       | j                  t              5  t        j                  dddd
       d d d        | j	                  t        j                  dddd      d       y # 1 sw Y   /xY w# 1 sw Y   @xY w)NrO  r{   r8  rE  r9  r:  r<  r(  r1  r;  r   r   r^   )r   r  r  posonly_keywords_optr   r9   s    r   test_posonly_keywords_optz.ClinicFunctionalTest.test_posonly_keywords_opt  s&   y) 	.**1-	.771=?QR771a@/R771aC\R77Q?AST771BOTy) 	?**Q!qA>	?77Q!qI<X	. 	.	? 	?s   EE&E#&E/c                    | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t        j                  ddd      d       | j                  t        j                  dddd      d       | j                  t              5  t        j                  dd	       d d d        | j                  t        j                  ddd
      d       | j                  t        j                  dddd      d       | j                  t              5  t        j                  dddd       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrO  r7  r{   r8  rE  r9  r:  r<  r(  r1  r   r^   r;  )r   r  posonly_opt_keywords_optr   r  r9   s    r   test_posonly_opt_keywords_optz2ClinicFunctionalTest.test_posonly_opt_keywords_opt  s0   ;;A>@UV;;AqACUV;;Aq!DoV;;Aq!QGVy) 	7..qA6	7;;AqAFX;;AqAK\Zy) 	C..a1B	C 	C		7 	7	C 	Cs   0E6E%E"%E.c                 x   | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  dd      d       | j	                  t        j                  ddd      d       | j	                  t        j                  dddd	      d
       | j                  t              5  t        j                  dddd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrO  r{   r(  r8  rE  rI  r9  r:  rM  r<  r;  )r   r  r  posonly_kwonly_optr   r9   s    r   test_posonly_kwonly_optz,ClinicFunctionalTest.test_posonly_kwonly_opt  s    y) 	,((+	,y) 	/((A.	/55a1=?QR55a1BOT55a1QGVy) 	=((1Q!<	= 	=	, 	,	/ 	/
	= 	=s#   D	D$5D0D!$D-0D9c                 @   | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t              5  t        j                  ddd       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t        j                  ddd      d       | j                  t        j                  dddd	
      d       y # 1 sw Y   xY w# 1 sw Y   gxY w)NrO  r7  r{   r8  rE  r(  r1  r9  r:  rQ  r<  )r   r  posonly_opt_kwonly_optr   r  r9   s    r   test_posonly_opt_kwonly_optz0ClinicFunctionalTest.test_posonly_opt_kwonly_opt  s    99!<>ST99!Q?ASTy) 	6,,Q15	6y) 	5,,Q!4	599!Q!DoV99!Q!qI<X	6 	6	5 	5s   !DDDDc           	         | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  ddd       d d d        | j                  t              5  t        j                  ddd       d d d        | j	                  t        j                  ddd      d       | j	                  t        j                  ddd      d       | j	                  t        j                  dddd	
      d       | j	                  t        j                  dddd	d      d       y # 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   3xY w# 1 sw Y   xY w# 1 sw Y   xY w)NrO  r{   r(  rE  r   r1  rO  r{   rE  NNrI  r:  rQ  rO  r{   rE  r:  Nr  r   r^   erO  r{   rE  r:  r  )r   r  r  posonly_keywords_kwonly_optr   r9   s    r    test_posonly_keywords_kwonly_optz5ClinicFunctionalTest.test_posonly_keywords_kwonly_opt  s   y) 	511!4	5y) 	811!Q7	8y) 	:11!q9	:y) 	;11!Q:	;y) 	A11Aa@	A>>q!qIK`a>>qAKMbc>>q!qANPbc>>q!qAQRSUde	5 	5	8 	8	: 	:	; 	;	A 	As;   F,	F9=G2G'G ,F69GGG G)c           	         | j                  t              5  t        j                  d       d d d        | j	                  t        j                  dd      d       | j	                  t        j                  dd      d       | j                  t              5  t        j                  dddd       d d d        | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  ddd      d	       | j	                  t        j                  ddd
      d	       | j	                  t        j                  dddd      d       | j	                  t        j                  dddd      d       | j	                  t        j                  ddddd      d       | j	                  t        j                  ddddd      d       y # 1 sw Y   xY w# 1 sw Y   CxY w# 1 sw Y   xY w)NrO  r{   )rO  r{   NNNr(  rE  r:  r   r1  r[  rI  r^   r\  rQ  r  r^   r^  r_  r]  )r   r  r  posonly_keywords_opt_kwonly_optr   r9   s    r   $test_posonly_keywords_opt_kwonly_optz9ClinicFunctionalTest.test_posonly_keywords_opt_kwonly_opt  s   y) 	955a8	9BB1aHJbcBB1JLdey) 	B55aAqA	By) 	@55Q?	@BB1a1MOdeBB1QOQfgBB1aaPRdeBB1a1PQRTfgBB1aaSTUWfgBB1a1PQUVWYhi	9 	9	B 	B	@ 	@s#   G#G0G=#G-0G:=Hc                    | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t              5  t        j                  dd       d d d        | j                  t        j                  ddd      d       | j                  t        j                  ddd      d       | j                  t        j                  dddd	
      d       | j                  t        j                  dddd	      d       | j                  t              5  t        j                  dddd	       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrO  r7  r{   r8  r(  rE  r9  r1  r:  rc  r<  rQ  )r   r  #posonly_opt_keywords_opt_kwonly_optr   r  r9   s    r   (test_posonly_opt_keywords_opt_kwonly_optz=ClinicFunctionalTest.test_posonly_opt_keywords_opt_kwonly_opt  s:   FFqIK`aFFq!LN`ay) 	B99!qA	BFFq!QOQ`aFFq!qQSbcFFq!QRSTVbcFFq!qTUVXdey) 	F99!Q1E	F 	F	B 	B	F 	Fs   !E7E%E"%E.c                 J   | j                  t              5  t        j                          d d d        | j                  t              5  t        j                  d       d d d        | j	                  t        j                  d      d       y # 1 sw Y   cxY w# 1 sw Y   <xY w)NrO  r   rO  )r   r  r  keyword_only_parameterr   r9   s    r   test_keyword_only_parameterz0ClinicFunctionalTest.test_keyword_only_parameter  s}    y) 	/,,.	/y) 	0,,Q/	099A>E		/ 	/	0 	0s   BBBB"c                 j   | j                  t              5  t        j                          d d d        | j	                  t        j                  dd      d       | j	                  t        j                  dd      d       | j	                  t        j                  dddd      d       y # 1 sw Y   xY w)NrO  r{   )rO  r{   r$   r(  rE  r:  )rO  r{   )rE  r:  )r   r  r  posonly_varargr   r9   s    r   test_posonly_varargz(ClinicFunctionalTest.test_posonly_vararg  s    y) 	'$$&	'11!Q7D11!q9:F11!Q1=~N		' 	's   B))B2c                 R   | j                  t              5  t        j                          d d d        | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  dddd      d       y # 1 sw Y   gxY w# 1 sw Y   >xY wNrO  r{   r(  rE  r:  )rO  r{   rE  r:  )r   r  r  vararg_and_posonlyr   r9   s    r   test_vararg_and_posonlyz,ClinicFunctionalTest.test_vararg_and_posonly  s    y) 	+((*	+y) 	1((a0	155aAqA>R		+ 	+	1 	1   BBBB&c                 R   | j                  t              5  t        j                          d d d        | j                  t              5  t        j                  dd       d d d        | j	                  t        j                  dddd      d       y # 1 sw Y   gxY w# 1 sw Y   >xY wrr  )r   r  r  varargr   r9   s    r   test_varargz ClinicFunctionalTest.test_vararg  s    y) 		y) 	%Q!$	%))!Q15~F		 		% 	%rv  c           	      r   | j                  t              5  t        j                          d d d        | j	                  t        j                  dd      d       | j	                  t        j                  dddd      d       | j	                  t        j                  ddddd	      d
       y # 1 sw Y   xY w)NrO  Fr(  )rO  r$   Fr{   rE  r:  )rO  rs  FT)rO  rs  T)r   r  r  vararg_with_defaultr   r9   s    r   test_vararg_with_defaultz-ClinicFunctionalTest.test_vararg_with_default  s    y) 	,))+	,66qEBNS66q!QBDYZ66q!QTJL`a		, 	,s   B--B6c           	         | j                  t        j                         d       | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t        j                  dddd      d	       | j                  t        j                  ddddd
      d       y )N)r$   Nr{   r(  )r$   r{   rO  )rk  r{   rE  r:  )r<  Nr  )r<  r  )r   r  vararg_with_only_defaultsr9   s    r   test_vararg_with_only_defaultsz3ClinicFunctionalTest.test_vararg_with_only_defaults  s    <<>
K<<qA7K<<Q!DjQ<<Q1aHJ^_<<Q1a1MO`ar   c                 :    t        j                  dddddd       y )NrO  r{   rE  r:  r     )kw1kw2)r  gh_32092_oobr9   s    r   test_gh_32092_oobz&ClinicFunctionalTest.test_gh_32092_oob  s    q!Qqa8r   c                 2    t        j                  ddd       y )NrO  r{   rE  )r  gh_32092_kw_passr9   s    r   test_gh_32092_kw_passz*ClinicFunctionalTest.test_gh_32092_kw_pass  s    ""1a+r   c                     d}t        j                  |      }t        j                  |       t        j                  |      }| j	                  ||       y )Nz5*A unique string is not referenced by anywhere else.*)r`   getrefcountr  gh_99233_refcountr   )r   argarg_refcount_originarg_refcount_afters       r   test_gh_99233_refcountz+ClinicFunctionalTest.test_gh_99233_refcount  sE    E!ooc2##C( __S1,.@Ar   c                     d}| j                  t        |      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NzVgh_99240_double_free\(\) argument 2 must be encoded string without null bytes, not strr   z b)r  r  r  gh_99240_double_free)r   expected_errors     r   test_gh_99240_double_freez.ClinicFunctionalTest.test_gh_99240_double_free#  s<    r##I~> 	7**36	7 	7 	7s	   9Ac                    d}| j                  t        d      5  t        j                  |       d d d        | j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr   clone_f1clone_f2)r  r  r  r  r  )r   incorrect_args     r   "test_cloned_func_exception_messagez7ClinicFunctionalTest.test_cloned_func_exception_message(  sr    ##Iz: 	.}-	.##Iz: 	.}-	. 	.	. 	.	. 	.s   A,A8,A58Bc                     dD ]D  }| j                  |      5  t        t        |      }| j                   |       |       d d d        F y # 1 sw Y   QxY w)N)clone_with_conv_f1clone_with_conv_f2r/   )r   r  r  r   )r   r(   funcs      r   1test_cloned_func_with_converter_exception_messagezFClinicFunctionalTest.test_cloned_func_with_converter_exception_message/  sW    > 	/D4( /y$/  ./ /	// /r{  N):r    r!   r"   localsupdatedirr  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-  r5  r>  rA  rD  rG  rK  rO  rS  rV  rY  ra  rf  ri  rm  rp  ru  ry  r|  r  r  r  r  r  r  r  r$   r   r   r  r  c  sN   
HOO L #IL LD^
WO
c
Ej	CkOh	Dj	Ip	Q	K>CDD	Y	gp
?
FKZRECT
Y
C	=Yf j 
FFOSGbb9,B7
./r   r  c                   "    e Zd ZdZd Zd Zd Zy)PermutationTestsz#Test permutation support functions.c                     d}t        t        g d            }t        t        j                  |            }| j                  ||       y )N)r$   )rE  )r{   rE  r$  r$  )r  rj  r  r   permute_left_option_groupsr   r   r   datar  s       r   test_permute_left_option_groupsz0PermutationTests.test_permute_left_option_groups9  s>    
 C	N#v88>?*r   c                     d}t        t        g d            }t        t        j                  |            }| j                  ||       y )N)r$   rk  r  r$  r$  )r  rj  r  r   permute_right_option_groupsr   r  s       r    test_permute_right_option_groupsz1PermutationTests.test_permute_right_option_groupsD  s>    
 C	N#v99$?@*r   c           	         ddddd}ddddd}dddd	d}ddd
dd}ddddd}ddddd}ddddd}ddddd}ddddd}	|||||||||	f	}
|
D ]f  } | j                   di |5  |j                         \  }}}}t        j                  |||      }t	        |      }| j                  ||       d d d        h y # 1 sw Y   sxY w)Nr$   )r$   )leftrequiredrightr   r(  r1  )r(  rI  rI  rc  )rI  rM  rd  )rI  rM  )r   r   r^   r^  r   )r(  r   )rI  r   r   )r1  rI  r   )r(  r   r   rQ  )r^  r  )rQ  rM  r;  )r   r   r   r^   r^  )r   r   r   r^   r^  r  )r   r  r   r   r  r   )r   emptynoleft1noleft2noleft3noright1noright2noright3leftandright1leftandright2rt  r  r  r  r  r   permutationsr  s                     r   test_permute_optional_groupsz-PermutationTests.test_permute_optional_groupsO  sX   B

 FV
 K&
 K*
 
 
R
 FR
 
 J	
 Wgh=	
  	3F'' 328--//hx%==dHeT|,  2	3 3	33 3s   "A
B77C 	N)r    r!   r"   __doc__r  r  r  r$   r   r   r  r  6  s    -	+	+N3r   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
FormatHelperTestsc                     d}|D ]H  \  }}| j                  ||      5  t        j                  |      }| j                  ||       d d d        J y # 1 sw Y   UxY w)N)	)a
br  )za
b
r  )za
b r  )z
a
b

r  )z

a
b

r  )z

a

b

za

b) a
br  )z a
b r  )z 
 
 a
b 
 
 r  )rn  r   )r   r   &strip_leading_and_trailing_blank_linesr   )r   rt  rn  r   r   s        r   +test_strip_leading_and_trailing_blank_linesz=FormatHelperTests.test_strip_leading_and_trailing_blank_lines  sh    
  ' 	0OE8EH= 0CCEJ  h/0 0	00 0   (AA	c                     d}d}d}d}|||d}|j                         D ]I  \  }}| j                  |      5  t        j                  ||      }| j	                  ||       d d d        K y # 1 sw Y   VxY w)Nz;
            one
            two
            three
        zone
two
threez    one
    two
    threez%        one
        two
        three)r   r:     )indent)itemsr   r   normalize_snippetr   )	r   snippetzero_indentfour_indenteight_indentexpected_outputsr  r   r  s	            r   test_normalize_snippetz(FormatHelperTests.test_normalize_snippet  s     	 	 	
  +{|L 0 6 6 8 	3FHV, 311'&I  23 3	33 3s   *A,,A5	c                 t   t        j                         }| j                  |j                         d       |j	                  d       | j                  |j                         d       | j                  |j                         d       |j	                  d       | j                  |j                         d       | j                  |j                         d       |j	                  d       |j	                  d       | j                  |j                         d       | j                  |j                         d       y )NrD   r   r   r   r^   cd)r   text_accumulatorr   r   append)r   accs     r   test_accumulatorz"FormatHelperTests.test_accumulator  s    %%'r*

3s+r*

3s+r*

3

3t,r*r   c                     d}|D ]H  \  }}| j                  ||      5  t        j                  |      }| j                  ||       d d d        J y # 1 sw Y   UxY w)N))r#  r#  )z\abcz\\abc)z\a\bcz\\a\\bc)z\a\\bcz	\\a\\\\bc)z"abc"z\"abc\")z'a'z\'a\')ro  r   )r   r   quoted_for_c_stringr   )r   rt  ro  r   r   s        r   test_quoted_for_c_stringz*FormatHelperTests.test_quoted_for_c_string  sh    
 & 	0ND(4(; 0006  h/0 0	00 0r  c                 Z    d}d}t        j                  |      }| j                  ||       y )Nza 
b
 c
 d 
z
a
b
 c
 d
)r   rstrip_linesr   r   rn  r   r   s       r   test_rstrip_linesz#FormatHelperTests.test_rstrip_lines  s8     	 	 !!%(h'r   c                 Z    d}d}t        j                  |      }| j                  ||       y )Nz{}, {a}z{{}}, {{a}})r   format_escaper   )r   ro  r   r   s       r   test_format_escapez$FormatHelperTests.test_format_escape  s,     ""4(h'r   c                    | j                  t        j                  dd      d       d}d}t        j                  |d      }| j                  ||       d}d}t        j                  |d      }| j                  ||       y )NrD   bar)prefixone
twozbarone
bartwo	
one
two
zbar
barone
bartwo
)r   r   indent_all_linesr  s       r   test_indent_all_linesz'FormatHelperTests.test_indent_all_lines	      00EBBG 	
 	 %%eE:h' 	 	 %%eE:h'r   c                    | j                  t        j                  dd      d       d}d}t        j                  |d      }| j                  ||       d}d}t        j                  |d      }| j                  ||       y )NrD   foo)suffixr  zonefoo
twofoor  zfoo
onefoo
twofoo
)r   r   suffix_all_linesr  s       r   test_suffix_all_linesz'FormatHelperTests.test_suffix_all_lines$	  r  r   N)r    r!   r"   r  r  r  r  r  r  r  r  r$   r   r   r  r    s*    0&3:+0( ((>(r   r  __main__)0testr   r   test.supportr   r   r   test.support.os_helperr   r	   textwrapr
   unittestr   rU   re  os.pathr'  r	  r`   skip_if_missingimports_under_toolr   r   r   r&   r-   r6   rm   r   rB   rp   r   r   r   r  r	  r   r  _testclinicr  ImportErrorskipIfr  r  r  r    mainr$   r   r   <module>r     s  
 % " ; 1       
  
  8 $"Z""8, ! !

G( 
G 0 0Q Q FMM362-8 -8`c + c L-*h -*`2&X 2&h # #:H :zT+{ T+nB  B J# d"$<=O/8,, O/ >O/dg3x(( g3Ta()) a(H zHMMO cI! !Z2  Is   'FF FF"!F"