o
    noi4                     @   sd   d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZ G dd deZdS )	    )AnyNparse_statementPartialParserConfig)CSTNodeTestDummyIndentedBlockparse_statement_as)	CodeRange)data_providerc                   @   s&  e Zd ZU dZeed< eee	e
edfee fdeedddeje	e
edfee fe dd	d
d dejede eeje	e
edfee fe dfe dddd dee	e
ede	e
edfee fdddeej	e
edejeddde	e
edfee fdedee	e
edeedfee fdedee	e
edejedededdfee fdededee	e
edfee fddedddedee	e
edfeee ffd dedd!deje	e
edfee fejed"d#fd$d%eed&d'deje	e
edejeded(ed(d)fee fed(ed(d*d+eedd,deje	ej
edddd-fee fe e edd.d/eedd0dejej	e
edejejejejdd1dej dd1d2g d3ejd4d1d5ddej	e
ede dfee fejeddejedd6d-d7eedd8dfd9e!d:dfd;d<Z"ed=d d>d?d@d dAd?dBd dCd?dDd dEd?dFd dEd?fd9e!d:dfdGdHZ#edIe$dJdKd3dLdIe$dMdKdNdLfd9e!d:dfdOdPZ%dSdQdRZ&dS )TWithTesti  maxDiffcontext_mgrzwith context_mgr(): pass
)   r   )r      )nodecodeparserexpected_position)asynchronouszasync with context_mgr(): pass
c                 C      t | tdddS )Nz3.7python_versionconfigr   r    r   Q/home/ubuntu/.local/lib/python3.10/site-packages/libcst/_nodes/tests/test_with.py<lambda>&       
zWithTest.<lambda>)r   r   r   fooz4async def foo():
    async with context_mgr(): pass
c                 C   r   )Nz3.6r   r   r   r   r   r   r   r   ;   r   barzwith foo(), bar(): pass
N whitespace_aftercommactxz with context_mgr() as ctx: pass
r    )whitespace_after_aswhitespace_before_aszwith context_mgr()as(): pass
z    z    with context_mgr(): pass
)r      )r      z%    with context_mgr():
        pass
)      z# leading comment)comment)leading_linesz+# leading comment
with context_mgr(): pass
)r,   r   )r,   r   z  )r)   r(   )whitespace_after_withwhitespace_before_colonz%with  context_mgr()  as  ctx  : pass
)r   $   lparrpar)r4   r5   r0   zwith(context_mgr()): pass
)r      )value)
whitespacer.   newlineTz       )
first_lineempty_linesindent	last_linewhitespace_beforez$with ( foo(),
       bar(), ): pass
)r,      kwargsreturnc                 K      | j di | d S Nr   )validate_nodeselfrA   r   r   r   
test_valid   s    _zWithTest.test_validc                	   C   s    t dt t t  ffS rD   )cstWithIndentedBlockSimpleStatementLinePassr   r   r   r   r      s    z0A With statement must have at least one WithItem)get_nodeexpected_rec                	   C   sF   t t jt t dt jt dddft t t 	 ffS )Nr   r!   r"   r$   )
rI   rJ   WithItemCallNameCommaSimpleWhitespacerK   rL   rM   r   r   r   r   r      s    zJThe last WithItem in an unparenthesized With cannot have a trailing comma.c                   C   s6   t jt t t dft t  ft ddS )Nr   r'   )r0   )rI   rJ   rP   rQ   rR   SimpleStatementSuiterM   rT   r   r   r   r   r     s
    z/Must have at least one space after with keywordc                   C   <   t jt t t dft t  ft dt  dS )Nr   r'   )r0   r4   )	rI   rJ   rP   rQ   rR   rU   rM   rT   	LeftParenr   r   r   r   r         z;Do not mix concrete LeftParen/RightParen with MaybeSentinelc                   C   rV   )Nr   r'   )r0   r5   )	rI   rJ   rP   rQ   rR   rU   rM   rT   
RightParenr   r   r   r   r     rX   c                 K   rC   rD   )assert_invalidrF   r   r   r   test_invalid   s   4zWithTest.test_invalidzwith a, b: passz3.1r   )r   r   expect_successz3.0Fc                 K   s*   | dds| d | jdi | d S )Nr\   Tz+parse errors are disabled for native parserr   )getskipTestassert_parsesrF   r   r   r   test_versions(  s   
zWithTest.test_versionsc                 C   s   t jt jt t dt jt  ddt jt t dt  dft t  ft j	t 
ddt jt 
ddd}t g }| ||d d S )	Nr   r"   r$   r    r!   r>   r3   zwith ( foo(),
bar(), ): pass
)rI   rJ   rP   rQ   rR   rS   ParenthesizedWhitespacerU   rM   rW   rT   rY   ModuleassertEqualcode_for_node)rG   r   moduler   r   r   test_adding_parens;  s"   	

zWithTest.test_adding_parens)rB   N)'__name__
__module____qualname__r   int__annotations__r
   rI   rJ   rP   rQ   rR   rU   rM   r   r	   AsynchronousFunctionDef
ParametersrK   rS   rT   AsNameTupler   rL   	EmptyLineCommentrW   rY   ra   TrailingWhitespaceNewliner   rH   r[   r   r`   rf   r   r   r   r   r      s  
 	
	

		  ^		3r   )typingr   libcstrI   r   r   libcst._nodes.tests.baser   r   r   libcst.metadatar	   libcst.testing.utilsr
   r   r   r   r   r   <module>   s   