o
    noitD  ć                   @   sl   d dl mZmZ d dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ G dd deZG d	d
 d
eZdS )é    )ŚAnyŚCallableN)Śparse_statement)ŚCSTNodeTest)Ś	CodeRange)Śdata_providerc                   @   są  e Zd Zee e d”e e ” f””de	dddeje d”e e ” f”e 
” e ” dddeje d”e e ” f”e e d	””fd
ddeje d”e e ” f”e e d””e e d””e e d””fd
ddeje d”e e ” f”eje d”e d”dfdde	dddeje d”e e ” f”ejde d”dfd
ddeje d”e e ” f”ejde d”dejde d”dejde d”dfd
ddeje d”e e ” f”ejde d”dfdddeje d”e e ” f”ejde d”dejde d”dejde d”dfdddf	ded d!fd"d#Zeeje d”e e ” f”e e eje d$”e d%”eje d&”d'd(eje d&”d'”e e e d)””eje d&”d'”e e e d*”””f”d+d,deje d”e e ” f”ejejeje d$”e d-”eje d&”eje ” fd.d/d0d(e e d&””d1e e e d2”e d3””e e d3”””fd4e d3”d5d6deje d”e e ” f”ejejeje d$”e d-”eje d&”eje ” fd.d/d0d(e e d&””d1e e e d2”e d3””e e d3”””fd4e 
” e ” e d3”d7d8dfded d!fd9d:Zed;d< d=fd>d< d=fd?d< d@ffdAeg ejf dBed d!fdCdDZd!S )EŚClassDefCreationTestŚFoośclass Foo: pass
)é   r   )r   é   ©ŚnodeŚcodeŚexpected_position©ŚlparŚrparśclass Foo(): pass
©r   r   Śobj)Śbasesśclass Foo(obj): pass
ŚBarŚBazŚobjectś"class Foo(Bar, Baz, object): pass
Ś	metaclass)ŚkeywordŚvalue)Śkeywordsś!class Foo(metaclass = Bar): pass
)r   é    Ś*Śone©Śstarr   śclass Foo(*one): pass
ŚtwoŚthreeś$class Foo(*one, *two, *three): pass
ś**śclass Foo(**one): pass
ś'class Foo(**one, **two, **three): pass
ŚkwargsŚreturnNc                 K   ó   | j di |¤ d S ©N© ©Śvalidate_node©Śselfr.   r2   r2   śU/home/ubuntu/.local/lib/python3.10/site-packages/libcst/_nodes/tests/test_classdef.pyŚ
test_valid   ó   azClassDefCreationTest.test_validŚTŚintś ©Śwhitespace_after)ŚboundŚcolonŚTsŚKW)Śtype_parametersz#class Foo[T: int, *Ts, **KW]: pass
ŚstrT)Śempty_linesŚindent)Śwhitespace_beforer>   )ŚparamŚcommaŚPSz  )Śparams)rC   Ś whitespace_after_type_parametersz'class Foo[T :

str ,**  PS  ,]  : pass
)rC   r   r   rL   z)class Foo[T :

str ,**  PS  ,]  (): pass
c                 K   r0   r1   r3   r5   r2   r2   r7   Śtest_valid_natives   r9   z&ClassDefCreationTest.test_valid_nativec                   C   ó&   t jt  d”t  t  ” f”t  ” dS )Nr	   )ŚnameŚbodyr   )ŚcstŚClassDefŚNameŚSimpleStatementSuiteŚPassŚ	LeftParenr2   r2   r2   r7   Ś<lambda>Ś   ó
    żzClassDefCreationTest.<lambda>z;Do not mix concrete LeftParen/RightParen with MaybeSentinelc                   C   rN   )Nr	   )rO   rP   r   )rQ   rR   rS   rT   rU   Ś
RightParenr2   r2   r2   r7   rW   ā   rX   c                   C   s(   t jt  d”t  t  ” f”t  d”dS )Nr	   Ś )rO   rP   Śwhitespace_after_class)rQ   rR   rS   rT   rU   ŚSimpleWhitespacer2   r2   r2   r7   rW   ė   s
    żz+at least one space between 'class' and nameŚget_nodeŚexpected_rec                 C   s   |   ||” d S )N)Śassert_invalid)r6   r]   r^   r2   r2   r7   Śtest_invalidÖ   s   !z!ClassDefCreationTest.test_invalid)Ś__name__Ś
__module__Ś__qualname__r   rQ   rR   rS   rT   rU   r   rV   rY   ŚArgr   r8   ŚTypeParametersŚ	TypeParamŚTypeVarŚColonr\   ŚCommaŚTypeVarTupleŚ	ParamSpecŚParenthesizedWhitespaceŚ	EmptyLinerM   r   ŚCSTNoderD   r`   r2   r2   r2   r7   r      sx   ’ūüłżś	żż	ö’ż÷żś	żż	öżś	żż	öÆ’`’żų
žń’żčžžżō’üń’åā!žžżō’üń’ćąÅ’`ś	ś
śķ’’’žr   c                   @   s"  e Zd Zee e d”e e ” f””ddeje d”e e ” f”e 	” e 
” dddeje d”e e ” f”e 	” e e d””fe 
” dddeje d”e e ” f”e 	” eje d	”eje d
”ddeje d”eje d
”dde e d””fe 
” dddeje d”e e ” f”e 	” eje d”e ” e d	”dfe 
” dddeje d”e e ” f”e 	” ejde d”dfe 
” dddeje d”e e ” f”e 	” ejde d”eje d
”ddejde d”eje d
”ddejde d”dfe 
” dddeje d”e e ” f”e 	” ejde d”dfe 
” dddeje d”e e ” f”e 	” ejde d”eje d
”ddejde d”eje d
”ddejde d”dfe 
” dddeje d”e e ” f”e e d””fe 	” e 
” d d!ed"d#d$eje ” eje d%”d&feje d”d'd(eje d)”eje d*”d&fd(eje d+”eje d,”d&fd(feje d-”d&fe d”e e ” f”e 	” e 
” d.d/ed0d1d$fd2ed3d4fd5d6Zd4S )7ŚClassDefParserTestr	   r
   r   r   r   r   )r   r   r   r   r   r<   r=   )rI   r   r   r   r   )r   Śequalr   )r   r    r   r!   r#   r$   r%   r'   )r&   r   rI   r(   r)   r*   r+   r,   r-   Śfoo)Ś
decoratorsr   r   z@foo
class Foo(): pass
)é   r   )rs   é   r   z# leading comment 1)Ścommentr2   )Śleading_linesŚbarz# leading comment 2Śbazz# leading comment 3z# class comment)rv   rr   Ślines_after_decoratorsrO   rP   r   r   zn
# leading comment 1
@foo
# leading comment 2
@bar
# leading comment 3
@baz
# class comment
class Foo(): pass
)é	   r   )rz   rt   r.   r/   Nc                 K   s   | j di |¤dti¤ d S )NŚparserr2   )r4   r   r5   r2   r2   r7   r8   ū   s    8zClassDefParserTest.test_valid)ra   rb   rc   r   rQ   rR   rS   rT   rU   rV   rY   rd   ri   r\   ŚAssignEqualŚ	Decoratorr   rm   ŚCommentr   r8   r2   r2   r2   r7   ro   ś   s>   ’üüłūųžž÷ńīż’õņūųżżõļģūųżżõļģū÷ž’’ž’’žö’ā Ž š’ 7ro   )Śtypingr   r   ŚlibcstrQ   r   Ślibcst._nodes.tests.baser   Ślibcst.metadatar   Ślibcst.testing.utilsr   r   ro   r2   r2   r2   r7   Ś<module>   s    l