a
    zei                     @   s   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re  dS )z	Jiwon Seozseojiwon at gmail dot com    Nc                 O   s   | t | t |  S Nsumvalues)Zpos_arg1argkwarg r   ./usr/lib/python3.9/test/test_keywordonlyarg.pyposonly_sum   s    r
   k1c                 C   s   | | S r   r   r   k2r   r   r	   keywordonly_sum
   s    r   c                 C   s   | | S r   r   r   r   r   r	   keywordonly_nodefaults_sum   s    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   s    r   c                O   s$   | | | | t | t |  S r   r   )r   r   r   r   r   kwargsr   r   r	   mixedargs_sum2   s    r   Freversec                 G   s   t t|| dS Nr   sortedlist)r   Znumsr   r   r	   sortnum   s    r   c                 O   s   t t|| dS r   r   )r   wordsr   r   r   r	   	sortwords   s    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__   s    zFoo.__init__c                C   s   || _ || _d S r   r   )r#   p1r   r   r   r   r	   set   s    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'   s    zNKeywordOnlyArgTestCase.assertRaisesSyntaxError.<locals>.shouldRaiseSyntaxError)assertRaisesSyntaxError)r#   Zcodestrr0   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
r3   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   s   | ]}d | V  qdS zi%dNr   .0ir   r   r	   	<genexpr>7       zDKeywordOnlyArgTestCase.testSyntaxForManyArguments.<locals>.<genexpr>i,  r,   r-   zdef f(*, %s):
  pass
c                 s   s   | ]}d | V  qdS r6   r   r7   r   r   r	   r:   :   r;   )joinranger.   )r#   Zfundefr   r   r	   testSyntaxForManyArguments5   s    z1KeywordOnlyArgTestCase.testSyntaxForManyArgumentsc                 C   s`   dd ddd}|  t}|ddd W d    n1 s<0    Y  d}| t|j| d S )	N)cc                S   s   d S r   r   r   r   r?   r   r   r	   f>   s    zCKeywordOnlyArgTestCase.testTooManyPositionalErrorMessage.<locals>.f         z;f() takes from 1 to 2 positional arguments but 3 were given)N)r1   	TypeErrorassertEqualstr	exception)r#   rA   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)r4   r'   r   r   r	   testSyntaxErrorForFunctionCallE   s    
z5KeywordOnlyArgTestCase.testSyntaxErrorForFunctionCallc                 C   s   |  ttd |  ttd |  ttd ztddd | d W n tyV   Y n0 ztdd | d W n ty   Y n0 d S )Nr   d      )r   Znon_existing_argzshould raise TypeErrorrC   r   )r1   rE   r   r   r!   failr'   r   r   r	   2testRaiseErrorFuncallWithUnexpectedKeywordArgumentI   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f 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 ) NrB   rD   2rC      )rC   rD   
   4   r   r   )r   r   k3)r   r   r            )rB   rC   rD   r   )r   rU   )rD   rC   rB   Tr   r@   r   r?   r   )r?   r   r   ignore)r   rY   )rB   )
rF   r
   r   r   r   r   r!   r   r   r    r'   r   r   r	   testFunctionCallX   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 n tyh   Y n0 d S )Nr   r   c                S   s   | | | | S r   r   )r%   Zp2r   r   r   r   r	   foo   s    z2KeywordOnlyArgTestCase.testKwDefaults.<locals>.foorC   r   r   rB   rR   r   z&__kwdefaults__ is not properly changed)r   )rF   __code__co_kwonlyargcount__kwdefaults__rN   rE   )r#   r[   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>.ExamplerB   rC   r   c                S   s   ||fS r   r   r"   r   r   r	   rA      s    z=KeywordOnlyArgTestCase.test_kwonly_methods.<locals>.Example.fNr(   r)   r*   rA   r   r   r   r	   Example   s   ra   rB   rC   r   )rB   rC   )rF   rA   r1   rE   )r#   ra   r   r   r	   test_kwonly_methods   s    z*KeywordOnlyArgTestCase.test_kwonly_methodsc                 C   s   t ddd d S )Nr   c                 S   s   d S r   r   r   r   r   r	   <lambda>   r;   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#   rg   r   r   r	   rA      s    z1KeywordOnlyArgTestCase.test_mangling.<locals>.X.fNr`   r   r   r   r	   X   s   rh   rf   )rF   rA   )r#   rh   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:0    Y  | t|jd |  t&}|tfttddd}W d    n1 s0    Y  | t|jd d S )Nrf   )yzc                S   s   d S r   r   vxrj   rk   r   r   r	   rA      s    z?KeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.fzname 'b' is not definedc                S   s   d S r   r   rl   r   r   r	   rc      r;   zFKeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.<lambda>)r1   	NameErrorr   r?   drF   rG   rH   )r#   r   errrA   r   r   r	   test_default_evaluation_order   s    44z4KeywordOnlyArgTestCase.test_default_evaluation_orderN)r(   r)   r*   r3   r5   r>   rJ   rK   rO   rZ   r_   rb   re   ri   rr   r   r   r   r	   r+   %   s   
(	r+   __main__)r   )r   )
__author__Z	__email__rd   r
   r   r   r   r   r   r   r    r!   ZTestCaser+   r(   mainr   r   r   r	   <module>   s   
 