o
    noi"                     @   s   d dl mZmZmZ d dlZd dlmZ d dl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G d
d deZdS )    )AnyCallableOptionalN)parse_statement)CSTNodeTestparse_statement_as)ensure_type)	CodeRange)data_providerc                   @   s"  e Zd Zee dfeeddfeeeeddfeje	 fe
de fddfejejde	 fe fded	d
deddfeejejede	 fe fded	ddfejej	eddfe
dedejeddfddfejej	eddfejeededdedejeddfddeddfeje
dedddeddff		d1dejdedee d dfd!d"Zed#d$ d%fd&d$ d'fd(d$ d)fd*d$ d)fd+d$ d,ffd-eg ejf d.ed dfd/d0ZdS )2YieldConstructionTestyieldayield ayield from a()5)lparvaluerpar	(yield 5)r   r    whitespace_after_yieldyield(a))   r   )r      whitespace_after_fromyield from(a()) whitespace_after  whitespace_beforer   r   r   r   ( yield  5 )bla( yield  from  bla() ))r      )r      zfrom 5)r      Nnodecodepositionreturnc                 C   s   | j |||d d S )N)expected_positionvalidate_nodeselfr,   r-   r.    r5   R/home/ubuntu/.local/lib/python3.10/site-packages/libcst/_nodes/tests/test_yield.py
test_valid   s   Kz YieldConstructionTest.test_validc                   C      t jt  fdS )N)r   )cstYield	LeftParenr5   r5   r5   r6   <lambda>b       zYieldConstructionTest.<lambda>zleft paren without right parenc                   C   r8   )N)r   )r9   r:   
RightParenr5   r5   r5   r6   r<   f   r=   zright paren without left parenc                   C   s   t jt dt ddS Nr   r   r   )r9   r:   NameSimpleWhitespacer5   r5   r5   r6   r<   k   s    z2Must have at least one space after 'yield' keywordc                   C   s&   t jt t t dt ddS r?   r9   r:   FromCallr@   rA   r5   r5   r5   r6   r<   q   s    c                   C   s&   t t jt t dt ddS )Nr   r   r   rB   r5   r5   r5   r6   r<   y   s    z1Must have at least one space after 'from' keywordget_nodeexpected_rec                 C   s   |  || d S N)assert_invalid)r4   rE   rF   r5   r5   r6   test_invalid^   s   (z"YieldConstructionTest.test_invalidrG   )__name__
__module____qualname__r
   r9   r:   r@   rC   rD   r;   Integerr>   rA   r	   CSTNodestrr   r7   r   rI   r5   r5   r5   r6   r      s    

	

	I	%r   c                   @   s  e Zd Zee dfejededddfejeje	ededdedddfeje
 fedede fd	d
fejejde
 fe fdedddfejejej	ede
 fe fdeddedddfejej
eddfededejeddfddfejej
eddfeje	ededdedejeddfddff	d'dejdedee ddfddZededdd d!ded"dd#d!fd$eddfd%d&ZdS )(YieldParsingTestr   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r    r"   r#   r%   r&   r'   r(   Nr,   r-   r.   r/   c                 C   s   |  ||dd  d S )Nc                 S   s    t t t| tjjd tjjS )Nr   )r   r   r9   SimpleStatementLinebodyExprr   )r-   r5   r5   r6   r<      s
    z-YieldParsingTest.test_valid.<locals>.<lambda>r1   r3   r5   r5   r6   r7      s
   QzYieldParsingTest.test_validzyield from xz3.3)python_versionT)r-   parserexpect_successz3.1Fkwargsc                 K   s*   | dds| d | jdi | d S )NrV   Tz+parse errors are disabled for native parserr5   )getskipTestassert_parses)r4   rW   r5   r5   r6   test_versions   s   
zYieldParsingTest.test_versionsrG   )rJ   rK   rL   r
   r9   r:   r@   rA   rC   rD   r;   rM   r>   rN   rO   r   r	   r7   r   r   r[   r5   r5   r5   r6   rP      s    

	OrP   )typingr   r   r   libcstr9   r   libcst._nodes.tests.baser   r   libcst.helpersr   libcst.metadatar	   libcst.testing.utilsr
   r   rP   r5   r5   r5   r6   <module>   s   y