o
    HXh                     @   s   d Z dZdZddlZdd Zdddd	Zd
d Zdd ZdddddZdddddZ	ddddZ
ddddZG dd dZG dd dejZedkrUe  dS dS )z?Unit tests for the keyword only argument specified in PEP 3102.z	Jiwon Seozseojiwon at gmail dot com    Nc                 O   s   | t | t |  S Nsumvalues)Zpos_arg1argkwarg r   B/opt/python-3.10.19/usr/lib/python3.10/test/test_keywordonlyarg.pyposonly_sum      r
   k1c                 C      | | S r   r   r   k2r   r   r	   keywordonly_sum
      r   c                 C   r   r   r   r   r   r   r	   keywordonly_nodefaults_sum   r   r   c                 K   s   | | t |  S r   r   )r   r   r   r   r   r	   keywordonly_and_kwarg_sum   s   r   r   c                G   s   | | | | t | S r   )r   )abr   r   r   r   r   r	   mixedargs_sum   r   r   c                O   s$   | | | | t | t |  S r   r   )r   r   r   r   r   kwargsr   r   r	   mixedargs_sum2   s   $r   Freversec                 G      t t|| dS Nr   sortedlist)r   Znumsr   r   r	   sortnum      r"   c                 O   r   r   r   )r   wordsr   r   r   r	   	sortwords   r#   r%   c                   @   s*   e Zd ZddddZdd Zdd Zd	S )
Foor   r   c                C   s   || _ || _d S r   r   selfr   r   r   r   r	   __init__      
zFoo.__init__c                C   s   || _ || _d S r   r   )r(   p1r   r   r   r   r	   set   r*   zFoo.setc                 C   s   | j | j S r   r   r(   r   r   r	   r   "   s   zFoo.sumN)__name__
__module____qualname__r)   r,   r   r   r   r   r	   r&      s    r&   c                   @   sl   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S )KeywordOnlyArgTestCasec                 C   s   dd }|  t|| d S )Nc                 S   s   t | dd d S )N<test>single)compile)sr   r   r	   shouldRaiseSyntaxError'   r#   zNKeywordOnlyArgTestCase.assertRaisesSyntaxError.<locals>.shouldRaiseSyntaxError)assertRaisesSyntaxError)r(   Zcodestrr6   r   r   r	   assertRaisesSyntaxError&   s   z.KeywordOnlyArgTestCase.assertRaisesSyntaxErrorc                 C   sT   |  d |  d |  d |  d |  d |  d |  d |  d d S )	Nzdef f(p, *):
  pass
zdef f(p1, *, p1=100):
  pass
zdef f(p1, *k1, k1=100):
  pass
z!def f(p1, *, k1, k1=100):
  pass
zdef f(p1, *, **k1):
  pass
zdef f(p1, *, k1, **k1):
  pass
z!def f(p1, *, None, **k1):
  pass
z$def f(p, *, (k1, k2), **kw):
  pass
r9   r-   r   r   r	   $testSyntaxErrorForFunctionDefinition+   s   






z;KeywordOnlyArgTestCase.testSyntaxErrorForFunctionDefinitionc                 C   sT   dd dd tdD  }t|dd dd d	d tdD  }t|dd d S )
Nzdef f(%s):
  pass
z, c                 s       | ]}d | V  qdS zi%dNr   .0ir   r   r	   	<genexpr>7       zDKeywordOnlyArgTestCase.testSyntaxForManyArguments.<locals>.<genexpr>i,  r2   r3   zdef f(*, %s):
  pass
c                 s   r<   r=   r   r>   r   r   r	   rA   :   rB   )joinranger4   )r(   Zfundefr   r   r	   testSyntaxForManyArguments5   s   z1KeywordOnlyArgTestCase.testSyntaxForManyArgumentsc                 C   sh   dd ddd}|  t}|ddd W d    n1 sw   Y  |j d}| t|j| d S )	N)cc                S      d S r   r   r   r   rF   r   r   r	   f>      zCKeywordOnlyArgTestCase.testTooManyPositionalErrorMessage.<locals>.f         z:() takes from 1 to 2 positional arguments but 3 were givenr   )r7   	TypeErrorr0   assertEqualstr	exception)r(   rI   excZexpectedr   r   r	   !testTooManyPositionalErrorMessage=   s   z8KeywordOnlyArgTestCase.testTooManyPositionalErrorMessagec                 C   s   |  d |  d d S )Nzf(p, k=1, p2)zf(p, k1=50, *(1,2), k1=100)r:   r-   r   r   r	   testSyntaxErrorForFunctionCallF   s   
z5KeywordOnlyArgTestCase.testSyntaxErrorForFunctionCallc                 C   s   |  ttd |  ttd |  ttd ztddd | d W n	 ty+   Y nw ztdd | d W d S  tyC   Y d S w )Nr   d      )r   Znon_existing_argzshould raise TypeErrorrL   r   )r7   rN   r   r   r&   failr-   r   r   r	   2testRaiseErrorFuncallWithUnexpectedKeywordArgumentJ   s   
zIKeywordOnlyArgTestCase.testRaiseErrorFuncallWithUnexpectedKeywordArgumentc                 C   s  |  dtd |  dtdi ddi |  dtdgdR   |  dtdgdR i dd	i |  dtdd
 |  dtddd |  dtddd |  dtdddd |  dtd ddddd	d |  dtddd |  dtdddd |  dtdddd	d |  dtdddd	dd |  dtddd |  dtdddd |  dtdddd	d |  dtdddd	dd |  dtdddd	ddd |  dtddd	iddd |  dtdd  |  dtddd  |  g dtddd |  g dtddddd |  g dt	ddd |  g dt	ddddd |  g dt	dddddd d S )!NrK   rM   2rL      )rL   rM   
   4   r   r   )r   r   k3)r   r   r            )rK   rL   rM   r   )r   r^   )rM   rL   rK   Tr   rH   r   rF   r   )rF   r   r   ignore)r   rb   )rK   r   )
rO   r
   r   r   r   r   r&   r   r"   r%   r-   r   r   r	   testFunctionCallY   sH   "
z'KeywordOnlyArgTestCase.testFunctionCallc                 C   sn   ddddd}|  d|jj |  ddi|j ddi|_z|dd	d
 | d W d S  ty6   Y d S w )Nr   r   c                S   s   | | | | S r   r   )r+   Zp2r   r   r   r   r	   foo   r#   z2KeywordOnlyArgTestCase.testKwDefaults.<locals>.foorL   r   r   rK   r[   r   z&__kwdefaults__ is not properly changedr   )rO   __code__co_kwonlyargcount__kwdefaults__rW   rN   )r(   rd   r   r   r	   testKwDefaults   s   
z%KeywordOnlyArgTestCase.testKwDefaultsc                 C   sX   G dd d}|  | jdddd |  |j| dddd | jt|jddd d S )Nc                   @   s   e Zd ZdddddZdS )z;KeywordOnlyArgTestCase.test_kwonly_methods.<locals>.ExamplerK   rL   r   c                S   s   ||fS r   r   r'   r   r   r	   rI      r   z=KeywordOnlyArgTestCase.test_kwonly_methods.<locals>.Example.fNr.   r/   r0   rI   r   r   r   r	   Example   s    rk   rK   rL   r   )rK   rL   )rO   rI   r7   rN   )r(   rk   r   r   r	   test_kwonly_methods   s   z*KeywordOnlyArgTestCase.test_kwonly_methodsc                 C   s   t ddd d S )Nr   c                 S   rG   r   r   r   r   r   r	   <lambda>       z8KeywordOnlyArgTestCase.test_issue13343.<locals>.<lambda>)unittestr-   r   r   r	   test_issue13343   s   z&KeywordOnlyArgTestCase.test_issue13343c                 C   s$   G dd d}|  |  d d S )Nc                   @   s   e Zd ZddddZdS )z/KeywordOnlyArgTestCase.test_mangling.<locals>.X*   )_X__ac                S   s   |S r   r   )r(   rr   r   r   r	   rI      rJ   z1KeywordOnlyArgTestCase.test_mangling.<locals>.X.fNrj   r   r   r   r	   X   s    rs   rq   )rO   rI   )r(   rs   r   r   r	   test_mangling   s   z$KeywordOnlyArgTestCase.test_manglingc                 C   s   d}|  t}|tfttddd}W d    n1 sw   Y  | t|jd |  t}|tfttddd}W d    n1 sFw   Y  | t|jd d S )Nrq   )yzc                S   rG   r   r   vxru   rv   r   r   r	   rI      rJ   z?KeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.fzname 'b' is not definedc                S   rG   r   r   rw   r   r   r	   rm      rn   zFKeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.<lambda>)r7   	NameErrorr   rF   drO   rP   rQ   )r(   r   errrI   r   r   r	   test_default_evaluation_order   s   z4KeywordOnlyArgTestCase.test_default_evaluation_orderN)r.   r/   r0   r9   r;   rE   rS   rT   rX   rc   ri   rl   rp   rt   r}   r   r   r   r	   r1   %   s    
	(	r1   __main__re   )__doc__
__author__Z	__email__ro   r
   r   r   r   r   r   r"   r%   r&   ZTestCaser1   r.   mainr   r   r   r	   <module>   s$    
 