<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    YI~dK                 @   s\   d dl mZ d dlZd dlmZ G dd dejZG dd dejZedkrXej	d	d
 dS )    )pyparseN)
namedtuplec               @   s   e Zd Zdd Zdd ZdS )ParseMapTestc             C   s`   dd dD }t |}| |td td | |td td | |d td d S )Nc             S   s   i | ]}t |t |qS  )ord).0cr   r   C/opt/alt/python37/lib64/python3.7/idlelib/idle_test/test_pyparse.py
<dictcomp>   s    z.ParseMapTest.test_parsemap.<locals>.<dictcomp>z 	
	axi  )r   ZParseMapassertEqualr   )selfZ	keepwhitemappingr   r   r	   test_parsemap
   s
    
zParseMapTest.test_parsemapc             C   s$   t dd}| dt jd d S )N   z	 a([{b}])b"c'd
zxxx(((x)))x"x'x
)r   Parserr   	translateZtrans)r   parserr   r   r	   
test_trans   s    zParseMapTest.test_transN)__name__
__module____qualname__r   r   r   r   r   r	   r      s   r   c               @   s   e Zd Zedd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"PyParseTestc             C   s   t jddd| _d S )Nr   )indentwidthtabwidth)r   r   r   )clsr   r   r	   
setUpClass   s    zPyParseTest.setUpClassc             C   s   | ` d S )N)r   )r   r   r   r	   tearDownClass   s    zPyParseTest.tearDownClassc             C   s$   |  | jjd |  | jjd d S )Nr   )r   r   r   r   )r   r   r   r	   	test_init"   s    zPyParseTest.test_initc          
   C   s~   | j }| j}|j}| t |d W d Q R X d}xD|D ]<}| j|d& || ||j| ||jd W d Q R X q:W d S )Nr   ) za
)stringr   )r   r   set_codeassertRaisesAssertionErrorsubTestcodestudy_level)r   eqpsetcodetestsr"   r   r   r	   test_set_code&   s    
zPyParseTest.test_set_codec          	   C   sB  | j }| j}|j}|j}dd }|d |||d |d |||d |d | t |  W d Q R X | t |d W d Q R X | |dd	 d
 |||d ||dd	 d
d ||dd	 d
d ||dd	 d
d  |d |||d ||dd	 d
d ||dd	 d
d ||dd	 d
d d S )Nc             S   s   dS )NFr   )indexr   r   r	   char_in_string_false=       zDPyParseTest.test_find_good_parse_start.<locals>.char_in_string_falsezdef spam():
r   zclass spam(  
zm"""This is a module docstring"""
class C():
    def __init__(self, a,
                 b=True):
        pass
Fc             S   s   dS )NTr   )r.   r   r   r	   <lambda>Z   r0   z8PyParseTest.test_find_good_parse_start.<locals>.<lambda>)Zis_char_in_string,   c             S   s   | dkS )Nr2   r   )r.   r   r   r	   r1   b   r0   c             S   s   | dkS )Nr2   r   )r.   r   r   r	   r1   e   r0   !   c             S   s   | dk S )Nr2   r   )r.   r   r   r	   r1   h   r0   z\"""This is a module docstring"""
class C():
    def __init__(self, a, b=True):
        pass
c             S   s   | dkS )Nr2   r   )r.   r   r   r	   r1   r   r0   c             S   s   | dkS )Nr2   r   )r.   r   r   r	   r1   s   r0   c             S   s   | dk S )Nr2   r   )r.   r   r   r	   r1   v   r0   )r   r   r#   Zfind_good_parse_startr$   	TypeErrorassertIsNone)r   r)   r*   r+   startr/   r   r   r	   test_find_good_parse_start8   s0    z&PyParseTest.test_find_good_parse_startc          	   C   sp   d}| j }|| | t |d W d Q R X |d | |j| |d | |j|dd   d S )Nzm"""This is a module docstring"""
class C():
    def __init__(self, a,
                 b=True):
        pass
   r   r2   )r   r#   r$   r%   Zset_lor   r'   )r   r'   r*   r   r   r	   test_set_lox   s    


zPyParseTest.test_set_loc             C   s  | j }| j}|j}|j}td\}}}}}	tddddg}
|
ddg||
ddd	g||
d
dd	g||
ddd	g||
ddd	g||
ddd	g||
ddd	g||
dddg||
ddd	g||
ddd	g||
ddd	dg||
ddd	g||
ddd	g|	|
ddd	g||
ddd	g||
ddd	dg||
ddd	dg|	|
ddd	dg|	|
ddd	g||
ddd	g|	|
ddd	g|f}x`|D ]X}| j|jd> ||j |  ||jd	 ||j	|j	 ||j
|j
 W d Q R X qpW | |  d S ) Nr8   TestInfor"   	goodlinescontinuationr!   r   z$"""This is a complete docstring."""
   z$'''This is a complete docstring.'''
z""""This is a continued docstring.
z"'''This is a continued docstring.
z""""Closing quote does not match."
z"""Bracket in docstring [
z#'''Incomplete two line docstring.

   z"This is a complete string."
z"This is an incomplete string.
z'This is more incomplete.

z# Comment\
z"("""Complete string in bracket"""
z("""Open string in bracket
za = (1 + 2) - 5 *\
z0
   def function1(self, a,
                 b):
   z
   def function1(self, a,\
z
   def function1(self, a,
z())
z)(
z{)(]
)r"   )r   r   r#   Z_study1ranger   r&   r"   r(   r;   r<   r5   )r   r)   r*   r+   studyNONE	BACKSLASHFIRSTNEXTBRACKETr:   r,   testr   r   r	   test_study1   sJ    

zPyParseTest.test_study1c          
   C   s   | j }| j}|j}|j}td\}}}}}	tdddg}
|
d||
d||
d||
d||
d	|	f}x>|D ]6}| j|jd
 ||j || |j W d Q R X qjW d S )Nr8   r:   r"   r<   r!   z%"""This is a continuation docstring.
z-'''This is a multiline-continued docstring.

za = (1 + 2) - 5 *\
z
   def function1(self, a,\
)r"   )	r   r   r#   Zget_continuation_typer@   r   r&   r"   r<   )r   r)   r*   r+   ZgettyperB   rC   rD   rE   rF   r:   r,   rG   r   r   r	   test_get_continuation_type   s    

z&PyParseTest.test_get_continuation_typec             C   s  | j }| j}|j}|j}tdddddddg}|dd	d	dd d
|dd	ddd d|dd	ddd d|dd	d	dd d
|dd	ddd d|ddddd d|dddddd|d dd!ddd|d"dd#ddd$|d%d	d&dd'd(|d)d	d*d+d d,|d-d	d.d/dd0|d1d	d2d3d d4|d5d	d*d6d d
|d7d	d	dd d
f}x|D ]}| j|jd8h ||j |  ||jd9 ||j|j	 ||j
|j ||j|j ||j|j ||j|j W d Q R X q(W | |  d S ):Nr:   r"   r6   endlastchopenbracket
bracketingr!   r   ))r   r   z0'''This is a multiline continuation docstring.

0   '))r   r   )r   r=   )rN   r   z # Comment\
   ))r   r   )r=   r=   )rP   r   z #Comment\
za = (1 + 2) - 5 *\
   *))r   r   )r   r=   )   r   z0
   def function1(self, a,
                 b):
r=   :))r=   r   )   r=   ).   r   z
   def function1(self, a,\
   ,rU   ))r=   r   )rU   r=   z
   def function1(self, a,
   z3
   def function1(self, a,  # End of line comment.
3   ))r=   r   )rU   r=   )rW   r>   )rZ   r=   z7  a = ["first item",
  # Comment line
    "next item",
7      ))r   r   )r\   r=   )   r>   )rQ   r=   )   r>   )&   r=   )*   r>   )5   r=   z())
r   )))r   r   )r   r=   )r>   r   )r?   r   z)(
r?   ())r   r   )r=   r   )r=   r=   z{)(]
r8   ]))r   r   )r   r=   )r>   r   )r>   r=   )r   r   z:\a
z\a
)r"   r>   )r   r   r#   Z_study2r   r&   r"   r(   Z
stmt_startr6   Zstmt_endrJ   rK   ZlastopenbracketposrL   Zstmt_bracketingrM   r5   )r   r)   r*   r+   rA   r:   r,   rG   r   r   r	   test_study2   sV    


zPyParseTest.test_study2c          
   C   s   | j }| j}|j}|j}tdddg}|dd|dd|dd|d	d
|dd|dd|dd|ddf}|d | t |  W d Q R X x>|D ]6}| j|jd ||j || |j	 W d Q R X qW d S )Nr:   r"   linesz[x for x in a]
r=   z[x
for x in a
r>   z[x\
for x in a\
z[x
for x in a
]
r?   z%
"""Docstring comment L1"""
L2
L3
L4
z%
"""Docstring comment L1
L2"""
L3
L4
z&
"""Docstring comment L1\
L2\
L3\
L4\
r   z+

"""Docstring comment L1\
L2\
L3\
L4\
"""
r8   r!   )r"   )
r   r   r#   Zget_num_lines_in_stmtr   r$   
IndexErrorr&   r"   rg   )r   r)   r*   r+   getlinesr:   r,   rG   r   r   r	   test_get_num_lines_in_stmt  s(    

z&PyParseTest.test_get_num_lines_in_stmtc             C   s   | j }| j}|j}|j}tdddg}|dd|dd|dd|d	d
|dd
|dd
|dd|dd|dd|dd|ddf}|d | t |  W d Q R X x$|D ]}||j || |j qW d S )Nr:   r"   spaceszdef function1(self, a,
   z
    def function1(self, a,
   z
	def function1(self, a,
z
    def function1(
   z
	def function1(
z
    def function1(  
z2[
"first item",
  # Comment line
    "next item",
r   z4[
  "first item",
  # Comment line
    "next item",
r>   z1["first item",
  # Comment line
    "next item",
r=   z(
r   z(a
zdef function1(self, a, b):
)	r   r   r#   Zcompute_bracket_indentr   r$   r%   r"   rk   )r   r)   r*   r+   indentr:   r,   rG   r   r   r	   test_compute_bracket_indent/  s,    

z'PyParseTest.test_compute_bracket_indentc       
      C   s(  | j }| j}|j}|j}d}xH|D ]@}| j|d* || | t |  W d Q R X W d Q R X q"W tdd}|dd|dd|dd	|d
d|dd|dd|dd|dd|dd|dd|dd|dd|dd|ddf}x>|D ]6}	| j|	jd ||	j || |	j	 W d Q R X qW d S )N)zdef function1(self, a, b\
z    """ (\
za = #\
)r"   r:   )r"   rk   za = (1 + 2) - 5 *\
r   za = 1 + 2 - 5 *\
z    a = 1 + 2 - 5 *\
rn   z  a = "spam"\
r\   z  a = \
"a"\
z  a = #\
"a"\
r8   za == \
r>   za != \
z\
z    \
z	\
za\
r?   z{}\
z(1 + 2) - 5 *\
)
r   r   r#   Zcompute_backslash_indentr&   r$   r%   r   r"   rk   )
r   r)   r*   r+   ro   errorsr"   r:   r,   rG   r   r   r	   test_compute_backslash_indentO  s:    



z)PyParseTest.test_compute_backslash_indentc          
   C   s   | j }| j}|j}|j}tdddg}|dd|dd|dd|dd	|d
d	|dd	|dd	f}x>|D ]6}| j|jd ||j || |j W d Q R X qhW d S )Nr:   r"   ro   r!   z	def a():
z
	def a():
r   z    def a():
z    z    def a(
z	
    def a(
z	
    # Comment.
)r"   )r   r   r#   Zget_base_indent_stringr   r&   r"   ro   )r   r)   r*   r+   Z
baseindentr:   r,   rG   r   r   r	   test_get_base_indent_stringv  s     

z'PyParseTest.test_get_base_indent_stringc       	      C   s   | j }| j}| j}|j}|j}tdddg}|d||d||d||d||d||d	||d
||d||d||d||d||d|f}x<|D ]4}| j|jd ||j ||  W d Q R X qW d S )Nr:   r"   assert_z	def a():
z0
   def function1(self, a,
                 b):
z:
za:
z):
z(:
z":
z
   def function1(self, a,
z!def function1(self, a):
    pass
z# A comment:
z"""A docstring:
)r"   )	
assertTrueassertFalser   r#   Zis_block_openerr   r&   r"   rt   )	r   yesnor*   r+   openerr:   r,   rG   r   r   r	   test_is_block_opener  s,    

z PyParseTest.test_is_block_openerc       	      C   s   | j }| j}| j}|j}|j}tdddg}|d||d||d||d||d||d	||d
||d||d||d||d||d||d|f}x<|D ]4}| j|jd ||j ||  W d Q R X qW d S )Nr:   r"   rt   zreturn
z	break
z  continue
z     raise
z	pass    
zpass	
z	return #
zraised
z
returning
z	# return
z	"""break
z
"continue
z!def function1(self, a):
    pass
)r"   )	ru   rv   r   r#   Zis_block_closerr   r&   r"   rt   )	r   rw   rx   r*   r+   Zcloserr:   r,   rG   r   r   r	   test_is_block_closer  s.    

z PyParseTest.test_is_block_closerc             C   s   | j }| j}|j}|j}tdddg}|dd|dd|dd|d	d
|dd|dd|dd|dd|dd|ddf
}x>|D ]6}| j|jd ||j || |j W d Q R X qW d S )Nr:   r"   bracketr!   ))r   r   za
z()()
))r   r   )r   r=   )r>   r   )r>   r=   )r   r   z(
)()
))r   r   )r   r=   )r?   r   )r?   r=   )r8   r   z()
()
))r?   r   )r?   r=   )r8   r   z()(
)
))r   r   )r   r=   )r>   r   )r>   r=   )r8   r   z(())
))r   r   )r   r=   )r=   r>   )r?   r=   )r   r   z(
())
))r   r   )r   r=   )r>   r>   )r   r=   )r8   r   z{)(]
z(((())
))r   r   )r   r=   )r=   r>   )r>   r?   )r?   r   )r8   r?   )r\   r>   )r"   )r   r   r#   Zget_last_stmt_bracketingr   r&   r"   r|   )r   r)   r*   r+   rM   r:   r,   rG   r   r   r	   test_get_last_stmt_bracketing  s(    

z)PyParseTest.test_get_last_stmt_bracketingN)r   r   r   classmethodr   r   r    r-   r7   r9   rH   rI   rf   rj   rp   rr   rs   rz   r{   r}   r   r   r   r	   r      s    @2= 'r   __main__r>   )	verbosity)
Zidlelibr   Zunittestcollectionsr   ZTestCaser   r   r   mainr   r   r   r	   <module>   s      K