<!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>
3
2aH                 @   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 j|}| j|td td | j|td td | j|d td d S )Nc             S   s   i | ]}t |t |qS  )ord).0cr   r   1/opt/alt/python36/lib64/python3.6/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 jdd}| jdj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jd | j | 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}| 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    a
)stringr   )r!   r"   )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   s   | j }| j}|j}|j}|d | j|  | j|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 S )Nzm"""This is a module docstring"""
class C():
    def __init__(self, a,
                 b=True):
        pass
c             S   s   dS )NTr   )indexr   r   r	   <lambda>K   s    z8PyParseTest.test_find_good_parse_start.<locals>.<lambda>)Zis_char_in_stringc             S   s   dS )NFr   )r/   r   r   r	   r0   O   s    ,   c             S   s   | dkS )Nr1   r   )r/   r   r   r	   r0   S   s    c             S   s   | dkS )Nr1   r   )r/   r   r   r	   r0   V   s    !   c             S   s   | dk S )Nr1   r   )r/   r   r   r	   r0   Y   s    z\"""This is a module docstring"""
class C():
    def __init__(self, a, b=True):
        pass
c             S   s   dS )NFr   )r/   r   r   r	   r0   b   s    c             S   s   | dkS )Nr1   r   )r/   r   r   r	   r0   c   s    c             S   s   | dkS )Nr1   r   )r/   r   r   r	   r0   d   s    c             S   s   | dk S )Nr1   r   )r/   r   r   r	   r0   g   s    )r   r   r$   Zfind_good_parse_startassertIsNone)r   r*   r+   r,   startr   r   r	   test_find_good_parse_start8   s     z&PyParseTest.test_find_good_parse_startc             C   sp   d}| j }|j| | jt |jd W d Q R X |jd | j|j| |jd | j|j|dd   d S )Nzm"""This is a module docstring"""
class C():
    def __init__(self, a,
                 b=True):
        pass
   r   r1   )r   r$   r%   r&   Zset_lor   r(   )r   r(   r+   r   r   r	   test_set_loi   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 | j|  d S ) Nr6   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)   r9   r:   r3   )r   r*   r+   r,   studyNONE	BACKSLASHFIRSTNEXTBRACKETr8   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 )Nr6   r8   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gettyper@   rA   rB   rC   rD   r8   r-   rE   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 d8|d
d	ddd d<|dd	ddd d@|dd	d	dd dB|dd	ddd dF|ddddd dJ|ddddddM|ddddddP|d dd!dddU|d#d	d$dd%d^|d+d	dd,d dc|d.d	d-d/ddg|d0d	d1d2d dm|d3d	dd4d do|d5d	d	dd dqf}x|D ]}| j|jd6h ||j |  ||jd" ||j|j	 ||j
|j ||j|j ||j|j ||j|j W d Q R X q(W | j|  d S )rNr8   r#   r4   endlastchopenbracket
bracketingr!   r   z1'''This is a multiline continutation docstring.

1   'r;   z # Comment\
   z #Comment\
za = (1 + 2) - 5 *\
   *r      z0
   def function1(self, a,
                 b):
0   :   .   z
   def function1(self, a,\
   ,z
   def function1(self, a,
   z3
   def function1(self, a,  # End of line comment.
3   r<   z7  a = ["first item",
  # Comment line
    "next item",
7            &   *   5   z())
)r=   z)(
(z{)(]
r6   ]z:\a
z\a
)r#   r   r   )re   r   r   r   r;   rL   r   )rf   rg   rh   r   r   r;   r;   rN   r   )ri   rj   rk   r   r   )rl   r   r   r   r;   rQ   r   )rm   rn   ro   r;   r   rT   r;   rU   r   )rp   rq   rr   r;   r   rT   r;   )rs   rt   r;   r   rT   r;   )ru   rv   r;   r   rT   r;   rV   r<   rY   r;   )rw   rx   ry   rz   r   r   r[   r;   r\   r<   rO   r;   r]   r<   r^   r;   r_   r<   r`   r;   )r{   r|   r}   r~   r   r   r   r   r   r   r   r;   r<   r   r=   r   )r   r   r   r   r   r   r;   r   r;   r;   )r   r   r   r   r   r   r;   r<   r   r<   r;   r   r   )r   r   r   r   r   r   r   )r   r   r   )r   )r   r   r$   Z_study2r   r'   r#   r)   Z
stmt_startr4   Zstmt_endrH   rI   ZlastopenbracketposrJ   Zstmt_bracketingrK   r3   )r   r*   r+   r,   r?   r8   r-   rE   r   r   r	   test_study2   sX    


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 | jt |  W d Q R X x>|D ]6}| j|jd ||j || |j	 W d Q R X qW d S )Nr8   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\
"""
r6   r!   )r#   )
r   r   r$   Zget_num_lines_in_stmtr   r%   
IndexErrorr'   r#   r   )r   r*   r+   r,   getlinesr8   r-   rE   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 | jt |  W d Q R X x$|D ]}||j || |j qW d S )Nr8   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#   r   )r   r*   r+   r,   indentr8   r-   rE   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* || | j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def function1(self, a, b\
    """ (\
a = #\
)r#   r8   r#   r   za = (1 + 2) - 5 *\
r   za = 1 + 2 - 5 *\
z    a = 1 + 2 - 5 *\
r   z  a = "spam"\
r[   z  a = \
"a"\
z  a = #\
"a"\
r6   za == \
r<   za != \
z\
z    \
z	\
za\
r=   z{}\
z(1 + 2) - 5 *\
)r   r   r   )r#   r   )
r   r   r$   Zcompute_backslash_indentr'   r%   r&   r   r#   r   )
r   r*   r+   r,   r   errorsr#   r8   r-   rE   r   r   r	   test_compute_backslash_indent@  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 )Nr8   r#   r   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#   r   )r   r*   r+   r,   Z
baseindentr8   r-   rE   r   r   r	   test_get_base_indent_stringg  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 |j|  W d Q R X qW d S )Nr8   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#   r   )	r   yesnor+   r,   openerr8   r-   rE   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 |j|  W d Q R X qW d S )Nr8   r#   r   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#   )	r   r   r   r$   Zis_block_closerr   r'   r#   r   )	r   r   r   r+   r,   Zcloserr8   r-   rE   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d5|dd;|ddA|ddIf
}x@|D ]8}| j|jd ||j || |j W d Q R X  qW d S )JNr8   r#   bracketr!   r   za
z()()
r;   r<   r   z(
)()
r=   r6   z()
()
z()(
)
z(())
z(
())
z{)(]
z(((())
r[   )r#   r   r   )r   r   r   )r   r   r   r   r;   r<   r   r<   r;   r   r   )r   r   r   r   r   r   r   r   r;   r=   r   r=   r;   r6   r   )r   r   r   r   r   r=   r   r=   r;   r6   r   )r   r   r   r   r   r   r;   r<   r   r<   r;   r6   r   )r   r   r   r   r   r   r   r   r;   r;   r<   r=   r;   r   r   )r   r   r   r   r   r   r   r   r;   r<   r<   r   r;   r6   r   )r   r   r   r   r   r   r   r   r;   r<   r   r<   r;   r   r   )r   r   r   r   r   r   r   r   r;   r;   r<   r<   r=   r=   r   r6   r=   r[   r<   )r   r   r   r   r   r   r   )r   r   r$   Zget_last_stmt_bracketingr   r'   r#   r   )r   r*   r+   r,   rK   r8   r-   rE   r   r   r	   test_get_last_stmt_bracketing  s(    

z)PyParseTest.test_get_last_stmt_bracketingN)r   r   r   classmethodr   r   r    r.   r5   r7   rF   rG   r   r   r   r   r   r   r   r   r   r   r   r	   r      s    12= 'r   __main__r<   )	verbosity)
Zidlelibr   Zunittestcollectionsr   ZTestCaser   r   r   mainr   r   r   r	   <module>   s      <