B
    18\i                 @   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   \/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/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   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   r0   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   r1   exc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 TypeErrorr3   )r
   )r&   r5   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 )Nr2   r4   2r3      )r3   r4   
   4   )r
   )r	   r
   )r	   r
   k3)r   r   )r	            r	   )r
   rF   T)r   r   r   r0   ignore)r   rJ   )r2   )r2   )r2   )r2   r3   r4   )
r6   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>.foor3   r
   r	   r2   rC   )r	   z&__kwdefaults__ is not properly changed)r   )r6   __code__co_kwonlyargcount__kwdefaults__r?   r5   )r   rL   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>.Exampler2   r3   )r	   r
   c            S   s   ||fS )Nr   )r   r	   r
   r   r   r   r1      s    z=KeywordOnlyArgTestCase.test_kwonly_methods.<locals>.Example.fN)r   r   r    r1   r   r   r   r   Example   s   rQ   r2   r3   )r	   r
   )r2   r3   )r6   r1   r&   r5   )r   rQ   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   rX   r   r   r   r1      s    z1KeywordOnlyArgTestCase.test_mangling.<locals>.X.fN)r   r   r    r1   r   r   r   r   X   s   rY   rW   )r6   r1   )r   rY   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 )NrW   )yzc            S   s   d S )Nr   )vxr[   r\   r   r   r   r1      s    z?KeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.fzname 'b' is not definedc            S   s   d S )Nr   )r]   r^   r[   r\   r   r   r   rS      rT   zFKeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.<lambda>)r&   	NameErrorr   r0   dr6   r7   r8   )r   r   errr1   r   r   r   test_default_evaluation_order   s      z4KeywordOnlyArgTestCase.test_default_evaluation_orderN)r   r   r    r(   r)   r/   r;   r<   r@   rK   rP   rR   rV   rZ   rb   r   r   r   r   r!   %   s   
(	r!   __main__)r   )r   )__doc__
__author__Z	__email__rU   r   r   r   r   r   r   r   r   r   TestCaser!   r   mainr   r   r   r   <module>   s    
 