o
    noi"                      @   sh   d dl mZ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 G dd deZdS )	    )castTupleN)parse_moduleparse_statement)CSTNodeTest)	CodeRangeMetadataWrapperPositionProvider)data_providerc                   @   s  e Zd Zeeee ffdfejee ffdddfejee ffeje	ddfeje	ddfdd	fejee ffd
ddfejdd
ddfejdeje	ddfddffdejde
ddfddZeede dfejddde dfejdd
de dffdejdejde
ddfddZedejg d
dddejg ddd
dd ejg eje	d!dgdddeee ggdd"ejeje gejed#e	d$d%d&geje	ddgeje	ddgddd'dd(d)e
dejd*eddfd+d,Zeded-d-dded-d.dd/ed-d.dded-d.dd"ed-d0dd1d)e
deddfd2d3Zd4ed5eeef d6eeef ddfd7d8ZdAd9d:ZdAd;d<ZdAd=d>ZdAd?d@ZdS )B
ModuleTestzpass
)default_newlinepassz# header)commentz# footer)headerfooterz# header
pass
# footer
F)has_trailing_newlinepass  z# nothing to see here)r   z# nothing to see here
moduleexpectedreturnNc                 C   s&   |  |j| |  |j|d d S )Nzutf-8)assertEqualcodebytesencode)selfr   r   r   r   S/home/ubuntu/.local/lib/python3.10/site-packages/libcst/_nodes/tests/test_module.pytest_code_and_bytes_properties   s   ,z)ModuleTest.test_code_and_bytes_properties
z
nodec                 C   s   |  ||| d S N)r   code_for_node)r   r   r!   r   r   r   r   test_code_for_node@   s   zModuleTest.test_code_for_node)r   r   T)r   r   enabled_for_nativez# some comment
z# some commentz"# header
pass # trailing
# footer
 z
# trailing)
whitespacer   )trailing_whitespace)empty_programempty_program_with_newlineempty_program_with_commentssimple_passsimple_pass_with_header_footer)r%   r   r%   c                C   s"   |s|  d | t|| d S )NzDisabled for native parser)skipTestr   r   )r   r   r   r%   r   r   r   test_parserN   s   *
zModuleTest.test_parser   r   )   r   z# 2345   r   )emptyempty_with_newliner+   r,   r-   c                C   s,   t t|}|t}| ||j | d S r"   )r   r   resolver	   r   r   )r   r   r   wrapper	positionsr   r   r   test_module_position|   s   
zModuleTest.test_module_positionactualstartendc                 C   s   |  |t|| d S r"   )r   r   )r   r;   r<   r=   r   r   r   cmp_position   s   zModuleTest.cmp_positionc                 C   s|   t td}|j}|t}ttj|jd }ttj	|jjd }ttj
|jd }| || dd | || dd d S )Nzdef foo():
    passr   r2   r4   )r2      )r   r   r   r7   r	   r   cstFunctionDefbodySimpleStatementLinePassr>   )r   r8   r   r9   fnstmt	pass_stmtr   r   r   test_function_position   s   
z!ModuleTest.test_function_positionc           	      C   s   t td}|j}|t}ttj|jd }ttj|jjd }ttj	|jjd jd }ttj
|j}ttj	|jjd jd }| || dd | || dd | || dd | || dd | || d	d d S )
Nz5if True:
    if False:
        x = 1
else:
    returnr   r0   )   
   r?   )      )rL   r@   r3   )rJ   r4   )r   r   r   r7   r	   r   rA   IfrC   rD   Elseorelser>   )	r   r8   r   r9   outer_ifinner_ifassign
outer_elsereturn_stmtr   r   r   test_nested_indent_position   s   
z&ModuleTest.test_nested_indent_positionc                 C   s   t td}|j}|t}ttj|jd }ttj	|jd }|j
}| || dd | || dd | || dd d S )Nz"abc"\
"def"r   r0   )r2   rJ   )r   r   r   r7   r	   r   rA   rD   rC   Exprvaluer>   )r   r8   r   r9   rG   exprstringr   r   r   test_multiline_string_position   s   
z)ModuleTest.test_multiline_string_positionc                 C   sb   t d}td|jd}| |tjtjddtjtjt	 gdgtj
tjd dddd	 d S )
Nr   zif True:    pass)configTrue)rX   )rC   )newline)rC   r   )testrC   )r   r   config_for_parsingr   rA   rN   NameIndentedBlockrD   rE   TrailingWhitespaceNewline)r   r   	statementr   r   r   test_module_config_for_parsing   s$   
z)ModuleTest.test_module_config_for_parsing)r   N)__name__
__module____qualname__r
   rA   ModulerD   rE   	EmptyLineCommentstrr   rd   CSTNoder$   rc   SimpleWhitespaceboolr/   r   r:   r   intr>   rI   rV   r[   rf   r   r   r   r   r      s    
+		(





r   )typingr   r   libcstrA   r   r   libcst._nodes.tests.baser   libcst.metadatar   r   r	   libcst.testing.utilsr
   r   r   r   r   r   <module>   s   