o
    GXîh#¬  ã                   @   s’  d dl mZmZ d dlmZ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e d¡ e d¡ d dlZd dlmZ W d  ƒ n1 sIw   Y  G dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZejdddZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZe d"¡Z G d#d$„ d$ejƒZ!e"d%krÇe #¡  dS dS )&é    )ÚsupportÚ
test_tools)Úimport_helperÚ	os_helper)ÚTestCaseNÚclinic)Ú	DSLParserc                   @   ó   e Zd Zdd„ ZdS )ÚFakeConverterc                 C   s   || _ || _d S ©N)ÚnameÚargs©Úselfr   r   © r   ú:/opt/python-3.10.19/usr/lib/python3.10/test/test_clinic.pyÚ__init__   s   
zFakeConverter.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r
      ó    r
   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚFakeConverterFactoryc                 C   s
   || _ d S r   ©r   ©r   r   r   r   r   r      ó   
zFakeConverterFactory.__init__c                 K   s   t | j|ƒS r   )r
   r   )r   r   ÚdefaultÚkwargsr   r   r   Ú__call__   ó   zFakeConverterFactory.__call__N)r   r   r   r   r   r   r   r   r   r      ó    r   c                   @   r   )ÚFakeConvertersDictc                 C   s
   i | _ d S r   )Úused_converters©r   r   r   r   r   #   r   zFakeConvertersDict.__init__c                 C   s   | j  |t|ƒ¡S r   )r"   Ú
setdefaultr   )r   r   r   r   r   r   Úget&   s   zFakeConvertersDict.getN)r   r   r   r   r%   r   r   r   r   r!   "   r    r!   ÚCÚfile)ÚlanguageÚfilenamec                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	j
Z
dS )Ú
FakeClinicc                 C   sì   t ƒ | _t ƒ | _t d ¡| _d | _i | _t d| j¡| _	t
 ¡ | _t
 ¡ | _| t_d| _d | _| _i | _|  dd¡ |  dd¡ |  dd¡ | jj}t
 d|dƒfd|dƒfd	|dƒfd
|dƒfd|dƒfd|dƒfd|dƒff¡| _d S )NÚ r*   ÚblockÚbufferr'   ÚsuppressZdocstring_prototypeZdocstring_definitionZmethoddef_defineZimpl_prototypeZparser_prototypeZparser_definitionZimpl_definition)r!   Z
convertersZlegacy_convertersr   Ú	CLanguager(   r)   Zdestination_buffersÚBlockParserZblock_parserÚcollectionsÚOrderedDictÚmodulesZclassesr   Zline_prefixZline_suffixÚdestinationsÚadd_destinationr%   Zfield_destinations)r   Údr   r   r   r   ,   s2   








ùzFakeClinic.__init__c                 C   s&   | j  |¡}|st dt|ƒ ¡ |S )NzDestination does not exist: )r4   r%   ÚsysÚexitÚrepr)r   r   r6   r   r   r   Úget_destinationG   s   zFakeClinic.get_destinationc                 G   s<   || j v rt dt|ƒ ¡ tj||| g|¢R Ž | j |< d S )NzDestination already exists: )r4   r7   r8   r9   r   ZDestination)r   r   Útyper   r   r   r   r5   M   s   
 zFakeClinic.add_destinationc                 C   s   |dkS )NÚmoduler   r   r   r   r   Úis_directiveR   s   zFakeClinic.is_directivec                 C   s   || j |< d S r   )Zcalled_directivesr   r   r   r   Ú	directiveU   ó   zFakeClinic.directiveN)r   r   r   r   r:   r5   r=   r>   r   ÚClinicZ_module_and_classr   r   r   r   r*   +   s    r*   c                   @   r	   )ÚClinicWholeFileTestc                 C   sN   t jt  d ¡dd}d}| |¡ ¡ }|d  ¡ }|  |d¡ |  |d¡ d S )Nr'   ©r)   z/*[clinic]
foo
[clinic]*/é   z[clinic]*/[clinic]*/z
[clinic]*/)r   r@   r/   ÚparseÚ
splitlinesÚrstripZassertNotEqualÚassertEqual)r   ÚcÚrawZcookedZend_liner   r   r   Útest_eol[   s   	zClinicWholeFileTest.test_eolN)r   r   r   rJ   r   r   r   r   rA   Z   r   rA   c                   @   ó<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚClinicGroupPermuterTestc                 C   s   t  |||¡}|  ||¡ d S r   )r   Úpermute_optional_groupsrG   )r   ÚlÚmÚrÚoutputÚcomputedr   r   r   Ú_testp   s   zClinicGroupPermuterTest._testc                 C   s   |   dggdgdggd¡ d S )NÚstartÚstopÚstep))rU   )rT   rU   )rT   rU   rV   ©rS   r#   r   r   r   Ú
test_ranget   s   ÿz"ClinicGroupPermuterTest.test_rangec                 C   s    |   ddggdgdggd¡ d S )NÚxÚyÚchÚattr))r[   )r[   r\   )rY   rZ   r[   )rY   rZ   r[   r\   rW   r#   r   r   r   Útest_add_window|   ó   ÿz'ClinicGroupPermuterTest.test_add_windowc                 C   s.   |   g d¢ddggdgddgg d¢gd¡ d S )	N)Úa1Úa2Úa3Úb1Úb2Úc1Úd1Úd2)Úe1Úe2Úe3))rd   )rb   rc   rd   )rb   rc   rd   re   rf   )r_   r`   ra   rb   rc   rd   )r_   r`   ra   rb   rc   rd   re   rf   )r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rW   r#   r   r   r   Útest_ludicrous…   s   $ÿz&ClinicGroupPermuterTest.test_ludicrousc                 C   s    |   g g dgdgdggd¡ d S )NÚaÚbrH   )r   ©rk   ©rk   rl   ©rk   rl   rH   rW   r#   r   r   r   Útest_right_only   r^   z'ClinicGroupPermuterTest.test_right_onlyc                 C   s   dd„ }|   t|¡ d S )Nc                   S   s   t  dgg g ¡ d S )Nrk   )r   rM   r   r   r   r   Úfnš   s   zPClinicGroupPermuterTest.test_have_left_options_but_required_is_empty.<locals>.fn)ÚassertRaisesÚAssertionError)r   rq   r   r   r   Ú,test_have_left_options_but_required_is_empty™   s   zDClinicGroupPermuterTest.test_have_left_options_but_required_is_emptyN)	r   r   r   rS   rX   r]   rj   rp   rt   r   r   r   r   rL   o   s    		rL   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚClinicLinearFormatTestc                 K   s"   t j|fi |¤Ž}|  ||¡ d S r   )r   Zlinear_formatrG   )r   ÚinputrQ   r   rR   r   r   r   rS       s   zClinicLinearFormatTest._testc                 C   ó   |   dd¡ d S )Nr+   rW   r#   r   r   r   Útest_empty_strings¤   ó   z)ClinicLinearFormatTest.test_empty_stringsc                 C   rw   )NÚ
rW   r#   r   r   r   Útest_solo_newline§   ry   z(ClinicLinearFormatTest.test_solo_newlinec                 C   rw   )Nz
          abc
          rW   r#   r   r   r   Útest_no_substitutionª   s   þz+ClinicLinearFormatTest.test_no_substitutionc                 C   ó   | j dddd d S )Nú8
          abc
          {name}
          def
          z'
          abc
          def
          r+   r   rW   r#   r   r   r   Útest_empty_substitution±   s   
ùz.ClinicLinearFormatTest.test_empty_substitutionc                 C   r}   )Nr~   z8
          abc
          GARGLE
          def
          ZGARGLEr   rW   r#   r   r   r   Útest_single_line_substitution»   s   
øz4ClinicLinearFormatTest.test_single_line_substitutionc                 C   r}   )Nr~   zJ
          abc
          bingle
          bungle

          def
          zbingle
bungle
r   rW   r#   r   r   r   Útest_multiline_substitutionÆ   s   
öz2ClinicLinearFormatTest.test_multiline_substitutionN)
r   r   r   rS   rx   r{   r|   r   r€   r   r   r   r   r   ru   Ÿ   s    
ru   c                   @   r   )ÚInertParserc                 C   ó   d S r   r   ©r   r   r   r   r   r   Ô   ó   zInertParser.__init__c                 C   rƒ   r   r   ©r   r,   r   r   r   rD   ×   r…   zInertParser.parseN©r   r   r   r   rD   r   r   r   r   r‚   Ó   r    r‚   c                   @   r   )Ú
CopyParserc                 C   rƒ   r   r   r„   r   r   r   r   Û   r…   zCopyParser.__init__c                 C   s   |j |_d S r   )rv   rQ   r†   r   r   r   rD   Þ   r   zCopyParser.parseNr‡   r   r   r   r   rˆ   Ú   r    rˆ   c                   @   rK   )ÚClinicBlockParserTestc                 C   sF   t  d ¡}tt  ||¡ƒ}t  |¡}|D ]}| |¡ q|j ¡ }d S r   )r   r/   Úlistr0   ZBlockPrinterZprint_blockÚfÚgetvalue)r   rv   rQ   r(   ZblocksÚwriterr,   r   r   r   rS   ã   s   

zClinicBlockParserTest._testc                 C   s   |   ||¡S r   rW   )r   rv   r   r   r   Ú
round_tripí   r   z ClinicBlockParserTest.round_tripc                 C   ó   |   d¡ d S )Nz(
    verbatim text here
    lah dee dah
©rŽ   r#   r   r   r   Útest_round_trip_1ð   r?   z'ClinicBlockParserTest.test_round_trip_1c                 C   r   )Nz‡
    verbatim text here
    lah dee dah
/*[inert]
abc
[inert]*/
def
/*[inert checksum: 7b18d017f89f61cf17d47f92749ea6930a3f1deb]*/
xyz
r   r#   r   r   r   Útest_round_trip_2õ   r?   z'ClinicBlockParserTest.test_round_trip_2c                 C   sN   t  d ¡}t j|dd}t|ƒ|jd< t|ƒ|jd< | |¡}|  ||¡ d S )Nr'   rB   ZinertÚcopy)r   r/   r@   r‚   Úparsersrˆ   rD   rG   )r   rv   rQ   r(   rH   rR   r   r   r   Ú_test_clinic  s   

z"ClinicBlockParserTest._test_clinicc                 C   s   |   dd¡ d S )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•   r#   r   r   r   Útest_clinic_1	  s   	÷z#ClinicBlockParserTest.test_clinic_1N)	r   r   r   rS   rŽ   r‘   r’   r•   r–   r   r   r   r   r‰   â   s    
r‰   c                   @   sf  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dZdUdV„Z,dWdX„ Z-dYS )[ÚClinicParserTestc                 C   sH   t tƒ ƒ}t d¡}| |¡ |j\}}|  d|j¡ |  d|j¡ d S )Nzmodule os
os.accessÚaccessÚos)r   r*   r   ÚBlockrD   Ú
signaturesrG   r   )r   Úparserr,   r<   Úfunctionr   r   r   Útest_trivial   s   



zClinicParserTest.test_trivialc                 C   s4   |   d¡}|j\}}|  d|j¡ |  d|j¡ d S )Nz#
module os
os.accessr˜   r™   )rD   r›   rG   r   ©r   r,   r<   r   r   r   r   Útest_ignore_line(  s   

z!ClinicParserTest.test_ignore_linec                 C   sV   |   d¡}|  d|j¡ |  dt|jƒ¡ |jd }|  d|j¡ |  |jtj¡ d S )Nz module os
os.access
   path: intr˜   rC   Úpath)	Úparse_functionrG   r   ÚlenÚ
parametersÚassertIsInstanceÚ	converterr   Úint_converter©r   r   Úpr   r   r   Ú
test_param.  s   

zClinicParserTest.test_paramc                 C   ó&   |   d¡}|jd }|  d|j¡ d S )Nz4module os
os.access
    follow_symlinks: bool = TrueÚfollow_symlinksT©r¢   r¤   rG   r   r¨   r   r   r   Útest_param_default6  ó   

z#ClinicParserTest.test_param_defaultc                 C   r«   )NzCmodule os
os.access
    follow_symlinks: \
   bool \
   =\
    Truer¬   Tr­   r¨   r   r   r   Útest_param_with_continuations;  r¯   z.ClinicParserTest.test_param_with_continuationsc                 C   sN   |   d¡}|jd }|  tj|j¡ |  d|jj¡ |  d¡}|  |d¡ d S )NzOmodule os
os.access
    follow_symlinks: int(c_default='MAXSIZE') = sys.maxsizer¬   ZMAXSIZEz:module os
os.access
    follow_symlinks: int = sys.maxsizez~Error on line 0:
When you specify a named constant ('sys.maxsize') as your default value,
you MUST specify a valid c_default.
)	r¢   r¤   rG   r7   Úmaxsizer   r¦   Z	c_defaultÚparse_function_should_fail)r   r   r©   Úsr   r   r   Útest_param_default_expression@  s   


z.ClinicParserTest.test_param_default_expressionc                 C   s@   |   d¡}|jd }|  dt|jƒ¡ |  |jd jtj¡ d S )NzR
module os
os.access
    follow_symlinks: bool = True
    something_else: str = ''r¬   é   Zsomething_else)r¢   r¤   rG   r£   r¥   r¦   r   Ústr_converterr¨   r   r   r   Útest_param_no_docstringI  s   

z(ClinicParserTest.test_param_no_docstringc                 C   ó   |   d¡}|  |d¡ d S )NzM
module os
os.access
    follow_symlinks: bool = True
    something_else: strzoError on line 0:
Can't have a parameter without a default ('something_else')
after a parameter with a default!
©r²   rG   ©r   r³   r   r   r   Ú*test_param_default_parameters_out_of_orderS  s   
z;ClinicParserTest.test_param_default_parameters_out_of_orderc                 C   s,   |   d¡}|jd }|  d|jjd ¡ d S )Nz0module os
os.access
    path: path_t(allow_fd=1)r¡   é   Zallow_fd)r¢   r¤   rG   r¦   r   r¨   r   r   r   Ú!disabled_test_converter_arguments^  s   

z2ClinicParserTest.disabled_test_converter_argumentsc                 C   ó    |   d¡}|  d ¡ |j¡ d S )Nzx
module os
os.stat as os_stat_fn

   path: str
       Path to be examined

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

Perform a stat system call on the given path.

  path
    Path to be examined
©r¢   rG   ÚstripÚ	docstring©r   r   r   r   r   Útest_function_docstringc  s   
øz(ClinicParserTest.test_function_docstringc                 C   r¾   )Nz|
module foo
foo.bar
  x: int
     Documentation for x.
  y: int

This is the documentation for foo.

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

This is the documentation for foo.

  x
    Documentation for x.

Okay, we're done here.
r¿   rÂ   r   r   r   Ú%test_explicit_parameters_in_docstringv  s   

öz6ClinicParserTest.test_explicit_parameters_in_docstringc                 C   ó   |   d¡}|  d|j¡ d S )Nz<
module os
os.stat
    path: str
This/used to break Clinic!
z5stat($module, /, path)
--

This/used to break Clinic!)r¢   rG   rÁ   rÂ   r   r   r   ÚTtest_parser_regression_special_character_in_parameter_column_of_docstring_first_lineŽ  s   
zeClinicParserTest.test_parser_regression_special_character_in_parameter_column_of_docstring_first_linec                 C   rÅ   )Nzmodule os
os.stat as os_stat_fnZ
os_stat_fn)r¢   rG   Z
c_basenamerÂ   r   r   r   Útest_c_name—  s   
zClinicParserTest.test_c_namec                 C   s   |   d¡}|  |jtj¡ d S )Nzmodule os
os.stat -> int)r¢   r¥   Zreturn_converterr   Zint_return_converterrÂ   r   r   r   Útest_return_converter›  s   
z&ClinicParserTest.test_return_converterc                 C   s8   |   d¡}|jd }|  tjj|j¡ |  d|j¡ d S )Nz:module os
os.access
    *
    follow_symlinks: bool = Truer¬   r   )r¢   r¤   rG   ÚinspectÚ	ParameterZKEYWORD_ONLYÚkindÚgroupr¨   r   r   r   Ú	test_starŸ  s   

zClinicParserTest.test_starc                 C   r«   )Nz/module window
window.border
 [
 ls : int
 ]
 /
Zlsr¼   )r¢   r¤   rG   rÌ   r¨   r   r   r   Ú
test_group¥  r¯   zClinicParserTest.test_groupc                 C   ó\   |   d¡}dD ]\}}|j| }|  |j|¡ |  |jtjj¡ q|  |j 	¡ d 	¡ ¡ d S )NzÃ
module curses
curses.addch
   [
   y: int
     Y-coordinate.
   x: int
     X-coordinate.
   ]
   ch: char
     Character to add.
   [
   attr: long
     Attributes for the character.
   ]
   /
))rZ   éÿÿÿÿ)rY   rÐ   ©r[   r   )r\   r¼   z™
addch([y, x,] ch, [attr])


  y
    Y-coordinate.
  x
    X-coordinate.
  ch
    Character to add.
  attr
    Attributes for the character.
            ©
r¢   r¤   rG   rÌ   rË   rÉ   rÊ   ZPOSITIONAL_ONLYrÁ   rÀ   ©r   r   r   rÌ   r©   r   r   r   Útest_left_groupª  s   

ôz ClinicParserTest.test_left_groupc                 C   rÏ   )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.
   ]
   ]
   /
))Zy1éþÿÿÿ)Zy2rÕ   )Zx1rÐ   )Zx2rÐ   rÑ   )Zattr1r¼   )Zattr2r¼   )Zattr3r¼   )Zattr4rC   )Zattr5rC   )Zattr6rC   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.
                rÒ   rÓ   r   r   r   Útest_nested_groupsÒ  s   
#
åz#ClinicParserTest.test_nested_groupsc              	   C   s~   t  ¡ /}|  t¡ |  |¡ W d   ƒ n1 sw   Y  W d   ƒ | ¡ S W d   ƒ | ¡ S 1 s6w   Y  | ¡ S r   )r   Úcaptured_stdoutrr   Ú
SystemExitr¢   rŒ   )r   r³   Ústdoutr   r   r   r²     s   
ÿ
ÿþ
ÿýz+ClinicParserTest.parse_function_should_failc                 C   r¸   )Nz|
module foo
foo.two_top_groups_on_left
    [
    group1 : int
    ]
    [
    group2 : int
    ]
    param: int
            zpError on line 0:
Function two_top_groups_on_left has an unsupported group configuration. (Unexpected state 2.b)
r¹   rº   r   r   r   Ú0test_disallowed_grouping__two_top_groups_on_left$  s   
ÿzAClinicParserTest.test_disallowed_grouping__two_top_groups_on_leftc                 C   r   )Nz}
module foo
foo.two_top_groups_on_right
    param: int
    [
    group1 : int
    ]
    [
    group2 : int
    ]
            ©r²   r#   r   r   r   Ú1test_disallowed_grouping__two_top_groups_on_right4  r?   zBClinicParserTest.test_disallowed_grouping__two_top_groups_on_rightc                 C   r   )Nz„
module foo
foo.parameter_after_group_on_right
    param: int
    [
    [
    group1 : int
    ]
    group2 : int
    ]
            rÛ   r#   r   r   r   Ú8test_disallowed_grouping__parameter_after_group_on_rightA  r?   zIClinicParserTest.test_disallowed_grouping__parameter_after_group_on_rightc                 C   r   )Nzƒ
module foo
foo.group_after_parameter_on_left
    [
    group2 : int
    [
    group1 : int
    ]
    ]
    param: int
            rÛ   r#   r   r   r   Ú7test_disallowed_grouping__group_after_parameter_on_leftN  r?   zHClinicParserTest.test_disallowed_grouping__group_after_parameter_on_leftc                 C   r   )Nz`
module foo
foo.empty_group
    [
    [
    ]
    group2 : int
    ]
    param: int
            rÛ   r#   r   r   r   Ú-test_disallowed_grouping__empty_group_on_left[  r?   z>ClinicParserTest.test_disallowed_grouping__empty_group_on_leftc                 C   r   )Nz`
module foo
foo.empty_group
    param: int
    [
    [
    ]
    group2 : int
    ]
            rÛ   r#   r   r   r   Ú.test_disallowed_grouping__empty_group_on_rightg  r?   z?ClinicParserTest.test_disallowed_grouping__empty_group_on_rightc                 C   s.   |   d¡}|  d|j¡ |  dt|jƒ¡ d S )Nz 
module foo
foo.bar

Docstring

zbar($module, /)
--

Docstringr¼   ©r¢   rG   rÁ   r£   r¤   rÂ   r   r   r   Útest_no_parameterss  s   
z#ClinicParserTest.test_no_parametersc                 C   s4   | j dddd}|  d|j¡ |  dt|jƒ¡ d S )NzL
module foo
class foo.Bar "unused" "notneeded"
foo.Bar.__init__

Docstring

rµ   rC   )Úsignatures_in_blockÚfunction_indexzBar()
--

Docstringr¼   rá   rÂ   r   r   r   Útest_init_with_no_parameters~  s
   ù	z-ClinicParserTest.test_init_with_no_parametersc                 C   r   )Nz!
module foo
foo.bar => int
    /
rÛ   r#   r   r   r   Útest_illegal_module_lineŒ  r?   z)ClinicParserTest.test_illegal_module_linec                 C   r   )Nz!
module foo
foo.bar as 935
    /
rÛ   r#   r   r   r   Útest_illegal_c_basename“  r?   z(ClinicParserTest.test_illegal_c_basenamec                 C   r   )Nz 
module foo
foo.bar
    *
    *
rÛ   r#   r   r   r   Útest_single_starš  r?   z!ClinicParserTest.test_single_starc                 C   r   )Nz
module foo
foo.bar
    *
rÛ   r#   r   r   r   ÚKtest_parameters_required_after_star_without_initial_parameters_or_docstring¢  r?   z\ClinicParserTest.test_parameters_required_after_star_without_initial_parameters_or_docstringc                 C   r   )Nz*
module foo
foo.bar
    *
Docstring here.
rÛ   r#   r   r   r   ÚMtest_parameters_required_after_star_without_initial_parameters_with_docstring©  r?   z^ClinicParserTest.test_parameters_required_after_star_without_initial_parameters_with_docstringc                 C   r   )Nz(
module foo
foo.bar
    this: int
    *
rÛ   r#   r   r   r   ÚMtest_parameters_required_after_star_with_initial_parameters_without_docstring±  r?   z^ClinicParserTest.test_parameters_required_after_star_with_initial_parameters_without_docstringc                 C   r   )Nz3
module foo
foo.bar
    this: int
    *
Docstring.
rÛ   r#   r   r   r   ÚItest_parameters_required_after_star_with_initial_parameters_and_docstring¹  r?   zZClinicParserTest.test_parameters_required_after_star_with_initial_parameters_and_docstringc                 C   r   )Nz 
module foo
foo.bar
    /
    /
rÛ   r#   r   r   r   Útest_single_slashÂ  r?   z"ClinicParserTest.test_single_slashc                 C   r   )Nz<
module foo
foo.bar
   x: int
   y: int
   *
   z: int
   /
rÛ   r#   r   r   r   Útest_mix_star_and_slashÊ  r?   z(ClinicParserTest.test_mix_star_and_slashc                 C   r   )Nz%
module foo
foo.bar
    /
    x: int
rÛ   r#   r   r   r   Ú1test_parameters_not_permitted_after_slash_for_nowÕ  r?   zBClinicParserTest.test_parameters_not_permitted_after_slash_for_nowc                 C   r¾   )Nzk
  module foo
  foo.bar
    x: int
      Nested docstring here, goeth.
    *
    y: str
  Not at column 0!
zV
bar($module, /, x, *, y)
--

Not at column 0!

  x
    Nested docstring here, goeth.
r¿   rÂ   r   r   r   Útest_function_not_at_column_0Ý  s   
	øz.ClinicParserTest.test_function_not_at_column_0c                    sJ   t ƒ }t|ƒ‰ dˆ _‡ fdd„ˆ jd< t d¡}ˆ  |¡ |  ˆ j¡ d S )NFc                      s   t ˆ ddƒS )NÚflagT)Úsetattrr   ©rœ   r   r   Ú<lambda>õ  s    z1ClinicParserTest.test_directive.<locals>.<lambda>Zsetflag)r*   r   rñ   Z
directivesr   rš   rD   Z
assertTrue)r   rH   r,   r   ró   r   Útest_directiveñ  s   

zClinicParserTest.test_directivec                 C   s.   |   d¡}|j\}}|  |jd jtj¡ d S )Nz module os
os.access
   path: "s"r¡   )rD   r›   r¥   r¤   r¦   r   r¶   rŸ   r   r   r   Útest_legacy_convertersú  s   

z'ClinicParserTest.test_legacy_convertersc                 C   s&   t ƒ }t|ƒ}t |¡}| |¡ |S r   )r*   r   r   rš   rD   )r   ÚtextrH   rœ   r,   r   r   r   rD   ÿ  s
   

zClinicParserTest.parserC   r¼   c                 C   s(   |   |¡}|j}|  t|ƒ|¡ || S r   )rD   r›   rG   r£   )r   r÷   rã   rä   r,   r³   r   r   r   r¢     s   
zClinicParserTest.parse_functionc              	   C   sš   |   ttjƒd¡ |   ttjƒd¡ t ¡ %}|  t¡ tj	dddd W d   ƒ n1 s/w   Y  W d   ƒ n1 s>w   Y  |   | 
¡ d¡ d S )Nz<Unspecified>z<Null>zThe igloos are melting!z	clown.txtéE   )r)   Zline_numberz>Error in file "clown.txt" on line 69:
The igloos are melting!
)rG   r9   r   ÚunspecifiedZNULLr   r×   rr   rØ   ZfailrŒ   )r   rÙ   r   r   r   Útest_scaffolding  s   
ÿ€ÿz!ClinicParserTest.test_scaffoldingN)rC   r¼   ).r   r   r   rž   r    rª   r®   r°   r´   r·   r»   r½   rÃ   rÄ   rÆ   rÇ   rÈ   rÍ   rÎ   rÔ   rÖ   r²   rÚ   rÜ   rÝ   rÞ   rß   rà   râ   rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   rï   rð   rõ   rö   rD   r¢   rú   r   r   r   r   r—     sX    	
	(L		
r—   c                   @   s   e Zd ZdZdd„ ZdS )ÚClinicExternalTestNc           	   	   C   s"  t  d¡}t|ddd}| ¡ }W d   ƒ n1 sw   Y  t ¡ W}tj |d¡}t|ddd}| 	|¡ W d   ƒ n1 sCw   Y  t 
|¡j}t |¡ t|ddd}| ¡ }W d   ƒ n1 siw   Y  t 
|¡j}W d   ƒ n1 s~w   Y  |  ||¡ |  ||¡ d S )Nzclinic.testrP   zutf-8)Úencodingzclinic.test.cÚw)r   ZfindfileÚopenÚreadr   Ztemp_dirr™   r¡   ÚjoinÚwriteÚstatÚst_mtime_nsr   Z
parse_filerG   )	r   Úsourcer‹   Zorig_contentsZtmp_dirZtestfileZold_mtime_nsZnew_contentsZnew_mtime_nsr   r   r   Útest_external  s$   

ÿ
ÿ

ÿöz ClinicExternalTest.test_external)r   r   r   ZmaxDiffr  r   r   r   r   rû     s    rû   Z_testclinicc                   @   sn  e Zd Zeƒ  dd„ eeƒD ƒ¡ dd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z d7d8„ Z!d9d:„ Z"d;d<„ Z#d=d>„ Z$d?d@„ Z%dAdB„ Z&dCdD„ Z'dEdF„ Z(dGdH„ Z)dIdJ„ Z*dKdL„ Z+dMdN„ Z,dOdP„ Z-dQdR„ Z.dSdT„ Z/dUS )VÚClinicFunctionalTestc                 c   s(    | ]}|  d ¡r|tt|ƒfV  qdS )Ztest_N)Ú
startswithÚgetattrÚ	ac_tester)Ú.0r   r   r   r   Ú	<genexpr>;  s   € 
ÿzClinicFunctionalTest.<genexpr>c                 C   st   |   t¡ t ¡  W d   ƒ n1 sw   Y  |  t dd¡d¡ |  t g d¡g df¡ |  t d¡d¡ d S )Nr¼   rC   ©r¼   rC   zwhatever class)r¼   N)rr   Ú	TypeErrorr	  Zobjects_converterrG   r#   r   r   r   Útest_objects_converter>  s   
ÿz+ClinicFunctionalTest.test_objects_converterc                 C   óJ   |   t¡ t d¡ W d   ƒ n1 sw   Y  |  t d¡d¡ d S )Nr¼   ó   BytesObject)r  )rr   r  r	  Zbytes_object_converterrG   r#   r   r   r   Útest_bytes_object_converterE  ó   ÿz0ClinicFunctionalTest.test_bytes_object_converterc                 C   sT   |   t¡ t d¡ W d   ƒ n1 sw   Y  tdƒ}|  t |¡|f¡ d S )Nr¼   s   ByteArrayObject)rr   r  r	  Zbyte_array_object_converterÚ	bytearrayrG   )r   Zbyte_arrr   r   r   Ú test_byte_array_object_converterJ  s
   ÿz5ClinicFunctionalTest.test_byte_array_object_converterc                 C   r  )Nr¼   Úunicode)r  )rr   r  r	  Zunicode_converterrG   r#   r   r   r   Útest_unicode_converterP  r  z+ClinicFunctionalTest.test_unicode_converterc                 C   s|   |   t¡ t ddd¡ W d   ƒ n1 sw   Y  |  t ¡ d¡ |  t dg d¡d¡ |  t ddd	id
¡d¡ d S )NFz	not a int)TTTr+   é   )FFT)z	not emptyr¼   rC   r   )TTF)rr   r  r	  Zbool_converterrG   r#   r   r   r   Útest_bool_converterU  s   ÿz(ClinicFunctionalTest.test_bool_converterc                 C   sÂ   |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ t d¡ W d   ƒ n1 s/w   Y  g d¢}tdd„ |D ƒƒ}|  t ¡ |¡ g d¢}tdd„ |D ƒƒ}|  tj|Ž |¡ d S )Nr¼   s   ab)ó   Aó   ó   ó   	ó   
ó   ó   ó   ó   "ó   'ó   ?ó   \ó    ó   ÿc                 s   ó    | ]}t |ƒV  qd S r   ©Úord©r
  rH   r   r   r   r  b  ó   € z;ClinicFunctionalTest.test_char_converter.<locals>.<genexpr>)ó   1ó   2ó   3ó   4ó   5ó   6ó   7ó   8ó   9ó   0ó   aó   bó   có   dc                 s   r'  r   r(  r*  r   r   r   r  e  r+  )rr   r  r	  Zchar_converterÚtuplerG   )r   ÚcharsZexpectedr   r   r   Útest_char_converter\  s   ÿÿz(ClinicFunctionalTest.test_char_converterc                 C   s6  ddl m} |  t¡ t d¡ W d   ƒ n1 sw   Y  |  t¡ t |d ¡ W d   ƒ n1 s7w   Y  |  t¡ t d|d ¡ W d   ƒ n1 sTw   Y  |  t¡ t g ¡ W d   ƒ n1 snw   Y  |  t ¡ d¡ |  t dd|d ¡d¡ |  t dd|d d d ¡d	¡ d S )
Nr   )Ú	UCHAR_MAXrÐ   r¼   ©é   é"   é8   ©r   r   r   rµ   é{   ©r   r   rC  )Ú	_testcapir=  rr   ÚOverflowErrorr	  Zunsigned_char_converterr  rG   )r   r=  r   r   r   Útest_unsigned_char_converterh  ó    ÿÿÿÿ&z1ClinicFunctionalTest.test_unsigned_char_converterc                 C   sÜ   ddl m}m} |  t¡ t |d ¡ W d   ƒ n1 sw   Y  |  t¡ t |d ¡ W d   ƒ n1 s;w   Y  |  t¡ t g ¡ W d   ƒ n1 sUw   Y  |  t d¡d¡ |  t d¡d¡ d S )Nr   )ÚSHRT_MINÚSHRT_MAXr¼   é.ûÿÿ©rK  éá  )rM  )	rE  rI  rJ  rr   rF  r	  Zshort_converterr  rG   )r   rI  rJ  r   r   r   Útest_short_converterv  s   ÿÿÿz)ClinicFunctionalTest.test_short_converterc                 C   ó6  ddl m} |  t¡ t d¡ W d   ƒ n1 sw   Y  |  t¡ t |d ¡ W d   ƒ n1 s7w   Y  |  t¡ t d|d ¡ W d   ƒ n1 sTw   Y  |  t¡ t g ¡ W d   ƒ n1 snw   Y  |  t ¡ d¡ |  t dd|d ¡d¡ |  t dd|d d d ¡d	¡ d S )
Nr   )Ú	USHRT_MAXrÐ   r¼   r>  rB  rµ   rC  rD  )	rE  rP  rr   Ú
ValueErrorr	  Zunsigned_short_converterrF  r  rG   )r   rP  r   r   r   Útest_unsigned_short_converter  rH  z2ClinicFunctionalTest.test_unsigned_short_converterc                 C   s   ddl m}m} |  t¡ t |d ¡ W d   ƒ n1 sw   Y  |  t¡ t |d ¡ W d   ƒ n1 s;w   Y  |  t¡ t ddd¡ W d   ƒ n1 sWw   Y  |  t¡ t g ¡ W d   ƒ n1 sqw   Y  |  t ¡ d¡ |  t ddd¡ddt	dƒf¡ d S )Nr   )ÚINT_MINÚINT_MAXr¼   rC   rµ   )r?  r@  é-   Ú3)
rE  rS  rT  rr   rF  r	  r§   r  rG   r)  )r   rS  rT  r   r   r   Útest_int_converter  s   ÿÿÿÿ$z'ClinicFunctionalTest.test_int_converterc                 C   rO  )
Nr   )ÚUINT_MAXrÐ   r¼   r>  rB  rµ   rC  rD  )	rE  rX  rr   rQ  r	  Zunsigned_int_converterrF  r  rG   )r   rX  r   r   r   Útest_unsigned_int_converterœ  rH  z0ClinicFunctionalTest.test_unsigned_int_converterc                 C   óÚ   ddl m}m} |  t¡ t |d ¡ W d   ƒ n1 sw   Y  |  t¡ t |d ¡ W d   ƒ n1 s;w   Y  |  t¡ t g ¡ W d   ƒ n1 sUw   Y  |  t ¡ d¡ |  t d¡d¡ d S )Nr   )ÚLONG_MINÚLONG_MAXr¼   ©r?  rK  rL  )	rE  r[  r\  rr   rF  r	  Zlong_converterr  rG   )r   r[  r\  r   r   r   Útest_long_converterª  ó   ÿÿÿz(ClinicFunctionalTest.test_long_converterc                 C   rO  )
Nr   )Ú	ULONG_MAXrÐ   r¼   r>  rB  rµ   rC  rD  )	rE  r`  rr   rQ  r	  Zunsigned_long_converterrF  r  rG   )r   r`  r   r   r   Útest_unsigned_long_converterµ  rH  z1ClinicFunctionalTest.test_unsigned_long_converterc                 C   rZ  )Nr   )Ú	LLONG_MINÚ	LLONG_MAXr¼   r]  rK  rL  )	rE  rb  rc  rr   rF  r	  Zlong_long_converterr  rG   )r   rb  rc  r   r   r   Útest_long_long_converterÃ  r_  z-ClinicFunctionalTest.test_long_long_converterc                 C   rO  )
Nr   )Ú
ULLONG_MAXrÐ   r¼   r>  rB  rµ   rC  rD  )	rE  re  rr   rQ  r	  Zunsigned_long_long_converterrF  r  rG   )r   re  r   r   r   Ú!test_unsigned_long_long_converterÎ  rH  z6ClinicFunctionalTest.test_unsigned_long_long_converterc                 C   sÞ   ddl m}m} |  t¡ t |d ¡ W d   ƒ n1 sw   Y  |  t¡ t |d ¡ W d   ƒ n1 s;w   Y  |  t¡ t g ¡ W d   ƒ n1 sUw   Y  |  t ¡ d¡ |  t ddd ¡d¡ d S )Nr   ©ÚPY_SSIZE_T_MINÚPY_SSIZE_T_MAXr¼   r>  rC   ©r¼   rC   rA  )	rE  rh  ri  rr   rF  r	  Zpy_ssize_t_converterr  rG   ©r   rh  ri  r   r   r   Útest_py_ssize_t_converterÜ  s   ÿÿÿz.ClinicFunctionalTest.test_py_ssize_t_converterc                 C   s¶   ddl m}m} |  t¡ t g ¡ W d   ƒ n1 sw   Y  |  t ¡ d¡ |  t ddd ¡d¡ |  t ||d |d ¡|||f¡ |  t ||d |d ¡|||f¡ d S )Nr   rg  r>  r¼   rC   rj  iÒ  )rE  rh  ri  rr   r  r	  Zslice_index_converterrG   rk  r   r   r   Útest_slice_index_converterç  s   ÿÿÿz/ClinicFunctionalTest.test_slice_index_converterc                 C   s|   |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ t g ¡ W d   ƒ n1 s/w   Y  |  t ¡ d¡ d S )NrÐ   r]  )rr   rQ  r	  Zsize_t_converterr  rG   r#   r   r   r   Útest_size_t_converterò  s   ÿÿz*ClinicFunctionalTest.test_size_t_converterc                 C   óZ   |   t¡ t g ¡ W d   ƒ n1 sw   Y  |  t ¡ d¡ |  t d¡d¡ d S ©N)g      )@ç      à¿©rq  )rr   r  r	  Zfloat_converterrG   r#   r   r   r   Útest_float_converterù  ó
   ÿz)ClinicFunctionalTest.test_float_converterc                 C   ro  rp  )rr   r  r	  Zdouble_converterrG   r#   r   r   r   Útest_double_converterÿ  rt  z*ClinicFunctionalTest.test_double_converterc                 C   s˜   |   t¡ t g ¡ W d   ƒ n1 sw   Y  |  t tddƒ¡tddƒf¡ |  t tdƒ¡tdƒf¡ |  t d¡d¡ |  t d¡d¡ d S )Nr¼   rC   z-1-2jrq  rr  é
   )rv  )rr   r  r	  Zpy_complex_converterrG   Úcomplexr#   r   r   r   Útest_py_complex_converter  s   ÿ z.ClinicFunctionalTest.test_py_complex_converterc                 C   sê   |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ t ddd¡ W d   ƒ n1 s1w   Y  |   t¡ t ddd¡ W d   ƒ n1 sMw   Y  |  t ddd¡d¡ |  t ddd¡d¡ |  t ddd	¡d
¡ d S )Nr¼   rk   rl   rH   ó   b br7  ro   r8  úc c©rk   rl   rz  )rr   r  r	  r¶   rQ  rG   r#   r   r   r   Útest_str_converter  s   ÿÿÿz'ClinicFunctionalTest.test_str_converterc                 C   sä   |   t¡ t d¡ W d   ƒ n1 sw   Y  |  t ddd¡d¡ |   t¡ t ddd¡ W d   ƒ n1 s<w   Y  |  t ddttdƒgƒ¡d¡ |  t ddttdƒdtdƒgƒ¡d	¡ |  t ddd
¡d	¡ d S )Nr¼   rk   rl   rH   ro   ry  r7  r   r{  s   c c)rr   r  r	  Zstr_converter_encodingrG   r  r)  r#   r   r   r   Útest_str_converter_encoding  s   ÿÿ "ÿz0ClinicFunctionalTest.test_str_converter_encodingc                 C   sV   |   t¡ t dd¡ W d   ƒ n1 sw   Y  |  t dtg d¢ƒ¡d¡ d S )Nrk   rl   Úabc©r¼   rC   rµ   )s   abcs   )rr   r  r	  Zpy_buffer_converterrG   r  r#   r   r   r   Útest_py_buffer_converter#  s   ÿ z-ClinicFunctionalTest.test_py_buffer_converterc                 C   sD   |   t dd¡d¡ |   tjdddd¡ |   tjdddd¡ d S )Nr¼   rC   r  ©rl   rn   )rG   r	  Úkeywordsr#   r   r   r   Útest_keywords(  s   z"ClinicFunctionalTest.test_keywordsc                 C   sf   |   t¡ t dd¡ W d   ƒ n1 sw   Y  |  tjdddd¡ |  tjdddd¡ d S )Nr¼   rC   r  r  rn   )rr   r  r	  Zkeywords_kwonlyrG   r#   r   r   r   Útest_keywords_kwonly-  s
   ÿz)ClinicFunctionalTest.test_keywords_kwonlyc                 C   sœ   |   t d¡d¡ |   t dd¡d¡ |   t ddd¡d¡ |   tjdddd¡ |   tjddddd¡ |   tjddd	d
¡ |   tjddddd¡ d S )Nr¼   ©r¼   NNrC   ©r¼   rC   Nrµ   r  r  ©rH   ©rk   rH   ©r¼   Nrµ   ro   )rG   r	  Zkeywords_optr#   r   r   r   Útest_keywords_opt3  s   z&ClinicFunctionalTest.test_keywords_optc                 C   sÀ   |   t d¡d¡ |   t dd¡d¡ |  t¡ t ddd¡ W d   ƒ n1 s*w   Y  |   tjdddd¡ |   tjddddd¡ |   tjddd	d
¡ |   tjdddddd¡ d S )Nr¼   ©r¼   NNNrC   ©r¼   rC   NNrµ   r  r‡  ©r¼   rC   rµ   Nrˆ  )r¼   Nrµ   Né   ©rk   rl   rH   r6   ©r¼   rC   rµ   rŽ  )rG   r	  Zkeywords_opt_kwonlyrr   r  r#   r   r   r   Útest_keywords_opt_kwonly<  s   ÿz-ClinicFunctionalTest.test_keywords_opt_kwonlyc                 C   s   |   t d¡d¡ |  t¡ t dd¡ W d   ƒ n1 sw   Y  |   tjdddd¡ |   tjdddd¡ |   tjdddd	d
¡ d S )Nr¼   r…  rC   r  r†  rµ   rˆ  r‰  ro   r  )rG   r	  Zkeywords_kwonly_optrr   r  r#   r   r   r   Útest_keywords_kwonly_optF  s   ÿz-ClinicFunctionalTest.test_keywords_kwonly_optc                 C   sš   |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ tjddd W d   ƒ n1 s1w   Y  |  t dd¡d¡ |  tjdddd¡ d S )Nr¼   rC   rn   r  r  )rr   r  r	  Zposonly_keywordsrG   r#   r   r   r   Útest_posonly_keywordsN  s   ÿÿz*ClinicFunctionalTest.test_posonly_keywordsc                 C   s¼   |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ t dd¡ W d   ƒ n1 s0w   Y  |   t¡ tjddd W d   ƒ n1 sLw   Y  |  tjdddd¡ d S )Nr¼   rC   rn   r  r  )rr   r  r	  Zposonly_kwonlyrG   r#   r   r   r   Útest_posonly_kwonlyV  s   ÿÿÿz(ClinicFunctionalTest.test_posonly_kwonlyc                 C   sÚ   |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ t ddd¡ W d   ƒ n1 s1w   Y  |   t¡ tjdddd W d   ƒ n1 sNw   Y  |  tjddddd¡ |  tjddddd¡ d S )Nr¼   rC   rµ   ro   r‡  r  ©rl   rH   )rr   r  r	  Zposonly_keywords_kwonlyrG   r#   r   r   r   Útest_posonly_keywords_kwonly_  s   ÿÿÿz1ClinicFunctionalTest.test_posonly_keywords_kwonlyc                 C   sþ   |   t¡ t d¡ W d   ƒ n1 sw   Y  |  t dd¡d¡ |  t ddd¡d¡ |  t dddd¡d¡ |  tjdddd¡ |  tjdddd	d¡ |   t¡ tjddddd
 W d   ƒ n1 skw   Y  |  tjdddddd¡ d S )Nr¼   rC   rŒ  rµ   r  rŽ  r  r  r‡  r  ©rl   rH   r6   )rr   r  r	  Zposonly_keywords_optrG   r#   r   r   r   Útest_posonly_keywords_opti  s   ÿÿz.ClinicFunctionalTest.test_posonly_keywords_optc                 C   s   |   t d¡d¡ |   t dd¡d¡ |   t ddd¡d¡ |   t dddd¡d¡ |  t¡ tjddd	 W d   ƒ n1 sAw   Y  |   tjdddd
d¡ |   tjdddddd¡ |  t¡ tjddddd W d   ƒ d S 1 syw   Y  d S )Nr¼   r‹  rC   rŒ  rµ   r  rŽ  r  r  r‡  ©rH   r6   r  )rG   r	  Zposonly_opt_keywords_optrr   r  r#   r   r   r   Útest_posonly_opt_keywords_optu  s   ÿ"ÿz2ClinicFunctionalTest.test_posonly_opt_keywords_optc                 C   sô   |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ t dd¡ W d   ƒ n1 s0w   Y  |  tjdddd¡ |  tjddddd¡ |  tjddddd	d
¡ |   t¡ tjddddd W d   ƒ d S 1 ssw   Y  d S )Nr¼   rC   r  rŒ  rµ   r•  r  rŽ  r—  r  r  )rr   r  r	  Zposonly_kwonly_optrG   r#   r   r   r   Útest_posonly_kwonly_opt  s   ÿÿ"ÿz,ClinicFunctionalTest.test_posonly_kwonly_optc                 C   sÌ   |   t d¡d¡ |   t dd¡d¡ |  t¡ t ddd¡ W d   ƒ n1 s*w   Y  |  t¡ tjddd W d   ƒ n1 sFw   Y  |   tjddddd¡ |   tjdddd	d
d¡ d S )Nr¼   r‹  rC   rŒ  rµ   r  r‡  r  rŽ  r™  r  )rG   r	  Zposonly_opt_kwonly_optrr   r  r#   r   r   r   Útest_posonly_opt_kwonly_optŒ  s   ÿÿz0ClinicFunctionalTest.test_posonly_opt_kwonly_optc              	   C   s~  |   t¡ t d¡ W d   ƒ n1 sw   Y  |   t¡ t dd¡ W d   ƒ n1 s0w   Y  |   t¡ tjddd W d   ƒ n1 sLw   Y  |   t¡ t ddd¡ W d   ƒ n1 shw   Y  |   t¡ tjdddd W d   ƒ n1 s…w   Y  |  tjddddd¡ |  tjddddd¡ |  tjdddd	d
d¡ |  tjdddd	ddd¡ d S )Nr¼   rC   r  rµ   ro   r‡  ©r¼   rC   rµ   NNr•  rŽ  r™  ©r¼   rC   rµ   rŽ  Nr  ©rH   r6   Úe©r¼   rC   rµ   rŽ  r  )rr   r  r	  Zposonly_keywords_kwonly_optrG   r#   r   r   r   Ú test_posonly_keywords_kwonly_opt–  s&   ÿÿÿÿÿ z5ClinicFunctionalTest.test_posonly_keywords_kwonly_optc              	   C   sp  |   t¡ t d¡ W d   ƒ n1 sw   Y  |  t dd¡d¡ |  tjdddd¡ |   t¡ t dddd¡ W d   ƒ n1 sGw   Y  |   t¡ tjddd W d   ƒ n1 scw   Y  |  tjddddd	¡ |  tjdddd
d	¡ |  tjdddddd¡ |  tjdddddd¡ |  tjddddddd¡ |  tjddddddd¡ d S )Nr¼   rC   )r¼   rC   NNNr  rµ   rŽ  rn   r‡  r  r•  ©r6   rž  r™  r  )r6   r   r¡  rŸ  )rr   r  r	  Zposonly_keywords_opt_kwonly_optrG   r#   r   r   r   Ú$test_posonly_keywords_opt_kwonly_opt¦  s"   ÿÿÿ z9ClinicFunctionalTest.test_posonly_keywords_opt_kwonly_optc                 C   s   |   t d¡d¡ |   t dd¡d¡ |  t¡ tjddd W d   ƒ n1 s*w   Y  |   t ddd¡d¡ |   tjddddd¡ |   tjdddd	d
d¡ |   tjdddd	dd¡ |  t¡ t dddd	¡ W d   ƒ d S 1 syw   Y  d S )Nr¼   r‹  rC   rŒ  r  rµ   r  r‡  rŽ  r£  r  r™  )rG   r	  Z#posonly_opt_keywords_opt_kwonly_optrr   r  r#   r   r   r   Ú(test_posonly_opt_keywords_opt_kwonly_opt¶  s   ÿ"ÿz=ClinicFunctionalTest.test_posonly_opt_keywords_opt_kwonly_optc                 C   s~   |   t¡ t ¡  W d   ƒ n1 sw   Y  |   t¡ t d¡ W d   ƒ n1 s.w   Y  |  tjddd¡ d S )Nr¼   rm   )r¼   )rr   r  r	  Zkeyword_only_parameterrG   r#   r   r   r   Útest_keyword_only_parameterÂ  s   
ÿÿz0ClinicFunctionalTest.test_keyword_only_parameterc                 C   sB   d}|   t|¡ t dd¡ W d   ƒ d S 1 sw   Y  d S )NzVgh_99240_double_free\(\) argument 2 must be encoded string without null bytes, not strrk   z b)ZassertRaisesRegexr  r	  Zgh_99240_double_free)r   Zexpected_errorr   r   r   Útest_gh_99240_double_freeÉ  s   "ÿz.ClinicFunctionalTest.test_gh_99240_double_freeN)0r   r   r   ÚlocalsÚupdateÚdirr	  r  r  r  r  r  r<  rG  rN  rR  rW  rY  r^  ra  rd  rf  rl  rm  rn  rs  ru  rx  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  :  sZ    ÿ	
	

r  Ú__main__)$Útestr   r   Ztest.supportr   r   Zunittestr   r1   rÉ   Zos.pathr™   r7   Zskip_if_missingZimports_under_toolr   r   r
   r   r!   r@   rH   r*   rA   rL   ru   r‚   rˆ   r‰   r—   rû   Úimport_moduler	  r  r   Úmainr   r   r   r   Ú<module>   sJ   
þ/04=   ~
   ÿ