
    <e                         d Z dZdZddlZd ZdddZd Zd	 Zddd
dZddd
dZ	dddZ
dddZ G d d          Z G d dej                  Zedk    r ej                     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                 j    | t          |          z   t          |                                          z   S Nsumvalues)pos_arg1argkwargs      //usr/lib/python3.11/test/test_keywordonlyarg.pyposonly_sumr      s(    c#hhU\\^^!4!444    k1c                     | |z   S r    r   k2s     r   keywordonly_sumr   
       7Nr   c                     | |z   S r   r   r   s     r   keywordonly_nodefaults_sumr      r   r   c                 P    | |z   t          |                                          z   S r   r   )r   r   r
   s      r   keywordonly_and_kwarg_sumr      s!    7S((((r   r   c                8    | |z   |z   |z   t          |          z   S r   )r   )abr   r   r	   s        r   mixedargs_sumr      s    q52:?SXX%%r   c                |    | |z   |z   |z   t          |          z   t          |                                          z   S r   r   )r   r   r   r   r	   kwargss         r   mixedargs_sum2r!      s4    q52:?SXX%FMMOO(<(<<<r   Freversec                 >    t          t          |          |           S Nr"   sortedlist)r#   numss     r   sortnumr*      s    $t**g....r   c                 >    t          t          |          |           S r%   r&   )r#   wordsr    s      r   	sortwordsr-      s    $u++w////r   c                   &    e Zd ZdddZd Zd ZdS )Foor   r   c                "    || _         || _        d S r   r   selfr   r   s      r   __init__zFoo.__init__       r   c                "    || _         || _        d S r   r   )r2   p1r   r   s       r   setzFoo.set   r4   r   c                      | j         | j        z   S r   r   r2   s    r   r   zFoo.sum"   s    w  r   N)__name__
__module____qualname__r3   r7   r   r   r   r   r/   r/      sN        !"       ! ! ! ! !r   r/   c                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )KeywordOnlyArgTestCasec                 D    d }|                      t          ||           d S )Nc                 (    t          | dd           d S )N<test>single)compile)ss    r   shouldRaiseSyntaxErrorzNKeywordOnlyArgTestCase.assertRaisesSyntaxError.<locals>.shouldRaiseSyntaxError'   s    Ax*****r   )assertRaisesSyntaxError)r2   codestrrE   s      r   assertRaisesSyntaxErrorz.KeywordOnlyArgTestCase.assertRaisesSyntaxError&   s0    	+ 	+ 	++'=wGGGGGr   c                 V   |                      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
rI   r9   s    r   $testSyntaxErrorForFunctionDefinitionz;KeywordOnlyArgTestCase.testSyntaxErrorForFunctionDefinition+   s    $$%=>>>$$%FGGG$$%HIII$$%JKKK$$%DEEE$$%HIII$$%JKKK$$%MNNNNNr   c                    dd                     d t          d          D                       z  }t          |dd           dd                     d t          d          D                       z  }t          |dd           d S )	Nzdef f(%s):
  pass
z, c              3       K   | ]	}d |z  V  
dS zi%dNr   .0is     r   	<genexpr>zDKeywordOnlyArgTestCase.testSyntaxForManyArguments.<locals>.<genexpr>7   s&      3R3R!EAI3R3R3R3R3R3Rr   i,  rA   rB   zdef f(*, %s):
  pass
c              3       K   | ]	}d |z  V  
dS rO   r   rP   s     r   rS   zDKeywordOnlyArgTestCase.testSyntaxForManyArguments.<locals>.<genexpr>:   s&      6U6UQuqy6U6U6U6U6U6Ur   )joinrangerC   )r2   fundefs     r   testSyntaxForManyArgumentsz1KeywordOnlyArgTestCase.testSyntaxForManyArguments5   s    '$))3R3RuSzz3R3R3R*R*RR(+++*TYY6U6U%PS**6U6U6U-U-UU(+++++r   c                     dd dd}|                      t                    5 } |ddd           d d d            n# 1 swxY w Y   |j         d}|                     t	          |j                  |           d S )N)cc                    d S r   r   r   r   rZ   s      r   fzCKeywordOnlyArgTestCase.testTooManyPositionalErrorMessage.<locals>.f>   s    Dr            z:() takes from 1 to 2 positional arguments but 3 were givenr   )rF   	TypeErrorr<   assertEqualstr	exception)r2   r]   excexpecteds       r   !testTooManyPositionalErrorMessagez8KeywordOnlyArgTestCase.testTooManyPositionalErrorMessage=   s    	d 	 	 	 	 	y)) 	SAaAJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~ < < <S]++X66666s   <A A c                 Z    |                      d           |                      d           d S )Nzf(p, k=1, p2)zf(p, k1=50, *(1,2), k1=100)rK   r9   s    r   testSyntaxErrorForFunctionCallz5KeywordOnlyArgTestCase.testSyntaxErrorForFunctionCallF   s1    $$_555$$%BCCCCCr   c                    |                      t          t          d           |                      t          t          d           |                      t          t          d           	 t          dd           |                     d           n# t          $ r Y nw xY w	 t          d           |                     d           d S # t          $ r Y d S w xY w)Nr   d      )r   non_existing_argzshould raise TypeErrorr_   r   )rF   ra   r   r   r/   failr9   s    r   2testRaiseErrorFuncallWithUnexpectedKeywordArgumentzIKeywordOnlyArgTestCase.testRaiseErrorFuncallWithUnexpectedKeywordArgumentJ   s    )_b999)%?DDD)S"---	sS9999II.//// 	 	 	D		&!,,,,II.///// 	 	 	DD	s$   %&B 
BB%C 
CCc                    |                      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t          dd                     |                      dt          dd                     |                      dt          ddd                     |                      dt          d ddddd	d           |                      dt	          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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	iddd           |                      dt          d                                                     |                      dt          dd                                                     |                      g dt          ddd                     |                      g dt          dddd                     |                      g dt          ddd                     |                      g dt          dddd                     |                      g dt          ddddd                     d S )!Nr^   r`   2r_      )r_   r`   
   4   r   r   )r   r   k3)r   r   r            )r^   r_   r`   r   )r   rv   )r`   r_   r^   Tr"   r\   r   rZ   r   )rZ   r   r   ignore)r#   rz   )r^   r   )
rb   r   r   r   r   r!   r/   r   r*   r-   r9   s    r   testFunctionCallz'KeywordOnlyArgTestCase.testFunctionCallY   sP   KNN+++k66s1g66777A 5u 5 5 5666+a"A"A"A"A#a"A"ABBBOq111222oq999:::71CCCDDD 9Q1 K K KLLL2 EaA E E;<mmE E	F 	F 	F 	mA!444555aq 9 9 9:::-1q"A"A"ABBBM!QaA$F$F$FGGGnQ1555666q! : : :;;;.A!"B"B"BCCCN1aqQ$G$G$GHHH'1aA!BBB	D 	D 	D'JJAJqq9I9IJJ	L 	L 	L 	C1IIIMMOO,,,cQ!nnn0022333'!Aa..111'!Aa">">">???	#c#(>(>???	#c#t(L(L(LMMM"3s3XNNN	P 	P 	P 	P 	Pr   c                    dddd}|                      d|j        j                   |                      ddi|j                   ddi|_        	  |dd	           |                     d
           d S # t
          $ r Y d S w xY w)Nr   r   c                    | |z   |z   |z   S r   r   )r6   p2r   r   s       r   fooz2KeywordOnlyArgTestCase.testKwDefaults.<locals>.foo   s    7R<"$$r   r_   r   r   r^   rs   r   z&__kwdefaults__ is not properly changedr   )rb   __code__co_kwonlyargcount__kwdefaults__rn   ra   )r2   r   s     r   testKwDefaultsz%KeywordOnlyArgTestCase.testKwDefaults   s    	%1 	% 	% 	% 	% 	% 	CL:;;;$q3#5666"1X	CRLLLLII>????? 	 	 	DD	s   "A3 3
B Bc                 4    G d d          }|                       |                                dd          d           |                      |                     |            dd          d           |                     t          |j        dd           d S )Nc                       e Zd ZddddZdS );KeywordOnlyArgTestCase.test_kwonly_methods.<locals>.Exampler^   r_   r   c                
    ||fS r   r   r1   s      r   r]   z=KeywordOnlyArgTestCase.test_kwonly_methods.<locals>.Example.f   s    2vr   Nr:   r;   r<   r]   r   r   r   Exampler      s2        A       r   r   r^   r_   r   )r^   r_   )rb   r]   rF   ra   )r2   r   s     r   test_kwonly_methodsz*KeywordOnlyArgTestCase.test_kwonly_methods   s    	 	 	 	 	 	 	 	 	a00&9997799q996BBB)WY1;;;;;r   c                     t           dd d S )Nr   c                     d S r   r   r   s    r   <lambda>z8KeywordOnlyArgTestCase.test_issue13343.<locals>.<lambda>   s    t r   )unittestr9   s    r   test_issue13343z&KeywordOnlyArgTestCase.test_issue13343   s     #######r   c                      G d d          }|                       |                                            d           d S )Nc                       e Zd ZdddZdS )/KeywordOnlyArgTestCase.test_mangling.<locals>.X*   )_X__ac                    |S r   r   )r2   r   s     r   r]   z1KeywordOnlyArgTestCase.test_mangling.<locals>.X.f   s    
r   Nr   r   r   r   Xr      s0        !       r   r   r   )rb   r]   )r2   r   s     r   test_manglingz$KeywordOnlyArgTestCase.test_mangling   sV    	 	 	 	 	 	 	 	 	"%%%%%r   c                    d}|                      t                    5 }|t          ft          t          dd}d d d            n# 1 swxY w Y   |                     t          |j                  d           |                      t                    5 }|t          ft          t          dd}d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr   )yzc                    d S r   r   vxr   r   s       r   r]   z?KeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.f   s    r   zname 'b' is not definedc                    d S r   r   r   s       r   r   zFKeywordOnlyArgTestCase.test_default_evaluation_order.<locals>.<lambda>   s    d r   )rF   	NameErrorr   rZ   drb   rc   rd   )r2   r   errr]   s       r   test_default_evaluation_orderz4KeywordOnlyArgTestCase.test_default_evaluation_order   s^   y)) 	S a     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	S]++-FGGGy)) 	3Sa2a12222A	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3S]++-FGGGGGs#   AA
AB66B:=B:N)r:   r;   r<   rI   rL   rX   rg   ri   ro   r{   r   r   r   r   r   r   r   r   r>   r>   %   s        H H H
O O O, , ,7 7 7D D D  &P &P &PP  < < <$ $ $& & &	H 	H 	H 	H 	Hr   r>   __main__r   )__doc__
__author__	__email__r   r   r   r   r   r   r!   r*   r-   r/   TestCaser>   r:   mainr   r   r   <module>r      so   E E
'	 5 5 5       ) ) )&q & & & & &= = = = = = ! / / / / / $ 0 0 0 0 0! ! ! ! ! ! ! !IH IH IH IH IHX. IH IH IHX zHMOOOOO r   