B
    u9ai                 @   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re  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   )/usr/lib/python3.7/test_keywordonlyarg.pyposonly_sum   s    r   )k1c             C   s   | | S )Nr   )r	   k2r   r   r   keywordonly_sum
   s    r   c             C   s   | | S )Nr   )r	   r
   r   r   r   keywordonly_nodefaults_sum   s    r   c             K   s   | | t |  S )N)r   r   )r	   r
   r   r   r   r   keywordonly_and_kwarg_sum   s    r   )r
   c            G   s   | | | | t | S )N)r   )abr	   r
   r   r   r   r   mixedargs_sum   s    r   c            O   s$   | | | | t | t |  S )N)r   r   )r   r   r	   r
   r   kwargsr   r   r   mixedargs_sum2   s    r   F)reversec             G   s   t t|| dS )N)r   )sortedlist)r   Znumsr   r   r   sortnum   s    r   c             O   s   t t|| dS )N)r   )r   r   )r   Z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 )N)r	   r
   )selfr	   r
   r   r   r   __init__   s    zFoo.__init__c            C   s   || _ || _d S )N)r	   r
   )r   p1r	   r
   r   r   r   set   s    zFoo.setc             C   s   | j | j S )N)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 )Nz<test>single)compile)sr   r   r   shouldRaiseSyntaxError'   s    zNKeywordOnlyArgTestCase.assertRaisesSyntaxError.<locals>.shouldRaiseSyntaxError)assertRaisesSyntaxError)r   Zcodestrr$   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
)r'   )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   s    zDKeywordOnlyArgTestCase.testSyntaxForManyArguments.<locals>.<genexpr>i,  z<test>r!   zdef f(*, %s):
  pass
c             s   s   | ]}d | V  qdS )zi%dNr   )r)   r*   r   r   r   r+   :   s    )joinranger"   )r   Zfundefr   r   r   testSyntaxForManyArguments5   s    z1KeywordOnlyArgTestCase.testSyntaxForManyArgumentsc          	   C   sL   dd ddd}|  t}|ddd W d Q R X d}| t|j| d S )	N)cc            S   s   d S )Nr   )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)r%   	TypeErrorassertEqualstr	exception)r   r0   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   testSyntaxErrorForFunctionCallE   s    
z5KeywordOnlyArgTestCase.testSyntaxErrorForFunctionCallc             C   s   |  ttd |  ttd |  ttd ytddd | d W n tk
rX   Y nX ytdd | d W n tk
r   Y nX d S )Nr   d      )r
   Znon_existing_argzshould raise TypeErrorr2   )r
   )r%   r4   r   r   r   fail)r   r   r   r   2testRaiseErrorFuncallWithUnexpectedKeywordArgumentI   s    
zIKeywordOnlyArgTestCase.testRaiseErrorFuncallWithUnexpectedKeywordArgumentc             C   s|  |  dtd |  dtdddi |  dtdd  |  dtdd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  |  dddgtddd |  dddgtddddd |  dddgt	ddd |  dddgt	ddddd |  dddgt	dddddd d S )Nr1   r3   2r2      )r2   r3   
   4   )r
   )r	   r
   )r	   r
   k3)r   r   )r	            r	   )r
   rD   T)r   r   r   r/   ignore)r   rH   )r1   )r1   )r1   )r1   r2   r3   )
r5   r   r   r   r   r   r   r   r   r   )r   r   r   r   testFunctionCallX   s>    z'KeywordOnlyArgTestCase.testFunctionCallc             C   sp   ddddd}|  d|jj |  ddi|j ddi|_y|dd	d
 | d W n tk
rj   Y nX d S )Nr   )r
   c            S   s   | | | | S )Nr   )r   Zp2r	   r
   r   r   r   foo   s    z2KeywordOnlyArgTestCase.testKwDefaults.<locals>.foor2   r
   r	   r1   rA   )r	   z&__kwdefaults__ is not properly changed)r   )r5   __code__co_kwonlyargcount__kwdefaults__r=   r4   )r   rJ   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>.Exampler1   r2   )r	   r
   c            S   s   ||fS )Nr   )r   r	   r
   r   r   r   r0      s    z=KeywordOnlyArgTestCase.test_kwonly_methods.<locals>.Example.fN)r   r   r   r0   r   r   r   r   Example   s   rO   r1   r2   )r	   r
   )r1   r2   )r5   r0   r%   r4   )r   rO   r   r   r   test_kwonly_methods   s    z*KeywordOnlyArgTestCase.test_kwonly_methodsc             C   s   t ddd d S )N)r	   c             S   s   d S )Nr   )r	   r   r   r   <lambda>       z8KeywordOnlyArgTestCase.test_issue13343.<locals>.<lambda>)unittest)r   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 )Nr   )r   rV   r   r   r   r0      s    z1KeywordOnlyArgTestCase.test_mangling.<locals>.X.fN)r   r   r   r0   r   r   r   r   X   s   rW   rU   )r5   r0   )r   rW   r   r   r   test_mangling   s    z$KeywordOnlyArgTestCase.test_manglingc          	   C   s   d}|  t}|tfttddd}W d Q R X | t|jd |  t}|tfttddd}W d Q R X | t|jd d S )NrU   )yzc            S   s   d S )Nr   )vxrY   rZ   r   r   r   r0      s    z?KeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.fzname 'b' is not definedc            S   s   d S )Nr   )r[   r\   rY   rZ   r   r   r   rQ      rR   zFKeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.<lambda>)r%   	NameErrorr   r/   dr5   r6   r7   )r   r   errr0   r   r   r   test_default_evaluation_order   s      z4KeywordOnlyArgTestCase.test_default_evaluation_orderN)r   r   r   r'   r(   r.   r9   r:   r>   rI   rN   rP   rT   rX   r`   r   r   r   r   r    %   s   
(	r    __main__)r   )r   )__doc__
__author__Z	__email__rS   r   r   r   r   r   r   r   r   r   ZTestCaser    r   mainr   r   r   r   <module>   s    
 