o
    DDi6                     @   s|   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ G d	d
 d
e	ZdS )    )AnyNparse_statementPartialParserConfig)MaybeSentinel)CSTNodeTestDummyIndentedBlockparse_statement_as)	is_native)	CodeRange)data_providerc                   @   sr  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e rdne fe rdne fd-fee fe re nej e re nej 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 rWend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   V/var/www/Datamplify/venv/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)r6   r7   r2   zwith(context_mgr()): pass
)r      )value)
whitespacer0   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selfrC   r   r   r   
test_valid   s    _zWithTest.test_validc                	   C   s    t dt t t  ffS rF   )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&   )
rK   rL   WithItemCallNameCommaSimpleWhitespacerM   rN   rO   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)   )r2   )rK   rL   rR   rS   rT   SimpleStatementSuiterO   rV   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)   )r2   r6   )	rK   rL   rR   rS   rT   rW   rO   rV   	LeftParenr   r   r   r   r         z;Do not mix concrete LeftParen/RightParen with MaybeSentinelc                   C   rX   )Nr   r)   )r2   r7   )	rK   rL   rR   rS   rT   rW   rO   rV   
RightParenr   r   r   r   r     rZ   c                 K   rE   rF   )assert_invalidrH   r   r   r   test_invalid   s   4zWithTest.test_invalidzwith a, b: passz3.1r   )r   r   expect_successz3.0Fc                 K   s0   t  r|dds| d | jdi | d S )Nr^   Tz+parse errors are disabled for native parserr   )r
   getskipTestassert_parsesrH   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@   r5   zwith ( foo(),
bar(), ): pass
)rK   rL   rR   rS   rT   rU   ParenthesizedWhitespacerW   rO   rY   rV   r[   ModuleassertEqualcode_for_node)rI   r   moduler   r   r   test_adding_parens=  s"   	

zWithTest.test_adding_parens)rD   N)*__name__
__module____qualname__r   int__annotations__r   rK   rL   rR   rS   rT   rW   rO   r   r   AsynchronousFunctionDef
ParametersrM   rU   rV   AsNameTupler   rN   	EmptyLineCommentr
   rY   r[   r   DEFAULTrc   TrailingWhitespaceNewliner   rJ   r]   r	   rb   rh   r   r   r   r   r      s  
 	
	

		  ^		3r   )typingr   libcstrK   r   r   libcst._maybe_sentinelr   libcst._nodes.tests.baser   r   r	   libcst._parser.entrypointsr
   libcst.metadatar   libcst.testing.utilsr   r   r   r   r   r   <module>   s   