
    /hhK                         S SK Jr  S SKrS SKJr   " S S\R
                  5      r " S S\R
                  5      r\S:X  a  \R                  " S	S
9  gg)    )pyparseN)
namedtuplec                        \ rS rSrS rS rSrg)ParseMapTest   c                 \   S Vs0 s H  n[        U5      [        U5      _M     nn[        R                  " U5      nU R                  U[        S5         [        S5      5        U R                  U[        S5         [        S5      5        U R                  US   [        S5      5        g s  snf )Nz 	
	axi  )ordr   ParseMapassertEqual)selfc	keepwhitemappings       G/opt/python-3.13.8/usr/lib/python3.13/idlelib/idle_test/test_pyparse.pytest_parsemapParseMapTest.test_parsemap
   s    -67YSVSV^Y	7""9-T+SY7S*CH5C1	 8s   B)c                     [         R                  " SS5      nU R                  SR                  [         R                  5      S5        g )N   z	 a([{b}])b"c'd
zxxx(((x)))x"x'x
)r   Parserr   	translatetrans)r   parsers     r   
test_transParseMapTest.test_trans   s5    1%.88G-	/     N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r   r   r   r   r      s    2/r   r   c                       \ rS rSr\S 5       r\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rSrg)PyParseTest   c                 8    [         R                  " SSS9U l        g )Nr   )indentwidthtabwidth)r   r   r   clss    r   
setUpClassPyParseTest.setUpClass   s    ^^A>
r   c                     U ? g N)r   r+   s    r   tearDownClassPyParseTest.tearDownClass   s    Jr   c                     U R                  U R                  R                  S5        U R                  U R                  R                  S5        g )Nr   )r   r   r)   r*   )r   s    r   	test_initPyParseTest.test_init"   s6    00!4--q1r   c                    U R                   nU R                  nUR                  nU R                  [        5         U" S5        S S S 5        SnU HI  nU R                  US9   U" U5        U" UR                  U5        U" UR                  S5        S S S 5        MK     g ! , (       d  f       N`= f! , (       d  f       Mn  = f)Nr
   ) a
stringr   )r   r   set_codeassertRaisesAssertionErrorsubTestcodestudy_level)r   eqpsetcodetestsr:   s         r   test_set_codePyParseTest.test_set_code&   s    KK** ~.CL / FV,1666"1==!$ -,  /. -,s   	B!/B.
B+.
B=	c                    ^ U R                   nU R                  nUR                  nUR                  nS nU" S5        U" U" U5      S5        U" S5        U" U" U5      S5        U" S5        Su  nmU R	                  [
        5         U" 5         S S S 5        U R	                  [
        5         U" S5        S S S 5        U R                  U" S S	95        U" U" U5      T5        U" U" U4S
 jS	9T5        U" U" U4S jS	9U5        U" U" U4S jS	9S 5        U" S5        U" U" U5      T5        U" U" U4S jS	9T5        U" U" U4S jS	9U5        U" U" U4S jS	9T5        g ! , (       d  f       N= f! , (       d  f       N= f)Nc                     g)NFr   indexs    r   char_in_string_falseDPyParseTest.test_find_good_parse_start.<locals>.char_in_string_false=   s    r   zdef spam():
r   zclass spam(  
k"""This is a module docstring"""
class C:
    def __init__(self, a,
                 b=True):
        pass
)!   *   Fc                     g)NTr   rI   s    r   <lambda>8PyParseTest.test_find_good_parse_start.<locals>.<lambda>[   s    r   )is_char_in_stringc                    > U T:  $ r0   r   rJ   poss    r   rQ   rR   c   	    r   c                    > U T:  $ r0   r   rU   s    r   rQ   rR   f   	    #r   c                    > U T:  $ r0   r   rU   s    r   rQ   rR   i   rW   r   zZ"""This is a module docstring"""
class C:
    def __init__(self, a, b=True):
        pass
c                    > U T:  $ r0   r   rU   s    r   rQ   rR   s   rW   r   c                    > U T:  $ r0   r   rU   s    r   rQ   rR   t   rY   r   c                    > U T:  $ r0   r   rU   s    r   rQ   rR   w   rW   r   )r   r   r;   find_good_parse_startr<   	TypeErrorassertIsNone)r   rA   rB   rC   startrK   pos0rV   s          @r   test_find_good_parse_start&PyParseTest.test_find_good_parse_start8   ss   KK**''5 	 
5%&* 	&'
5%&* 	 ! 	 	c y)G *y)%L *
 	%2DEF 	5%&, 	5#<=sC 	5#=>E 	5#<=tD 	 ! 	
 	5%&,
5#<=sC
5#=>E 	5#<=sCG *)))s   E*	E/
E,/
E=c                 ~   SnSnU R                   nUR                  U5        U R                  [        5         UR	                  S5        S S S 5        UR	                  S5        U R                  UR                  U5        UR	                  U5        U R                  UR                  XS  5        g ! , (       d  f       Nk= f)NrM   rO      r   )r   r;   r<   r=   set_lor   r?   )r   r?   rV   rB   s       r   test_set_loPyParseTest.test_set_loy   s    ! 	 KK	

4 ~.HHQK / 	
& 	
d, /.s   B..
B<c                    U R                   nU R                  nUR                  nUR                  n[	        S5      u  pVpxn	[        S/ SQ5      n
U
" SS/U5      U
" SSS/U5      U
" SSS/U5      U
" S	SS/U5      U
" S
SS/U5      U
" SSS/U5      U
" SSS/U5      U
" SSS/U5      U
" SSS/U5      U
" SSS/U5      U
" S/ SQU5      U
" SSS/U5      U
" SSS/U	5      U
" SSS/U5      U
" SSS/U5      U
" S/ SQU5      U
" S/ SQU	5      U
" S/ SQU	5      U
" SSS/U5      U
" SSS/U	5      U
" SSS/U5      4nU H  nU R                  UR                  S9   U" UR                  5        U" 5         U" UR                  S5        U" UR                  UR                  5        U" UR                  UR                  5        S S S 5        M     U R                  U" 5       5        g ! , (       d  f       M  = f)Nrf   TestInfo)r:   	goodlinescontinuationr7   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.

)r   rn   ro   z# Comment\
z"("""Complete string in bracket"""
z("""Open string in bracket
a = (1 + 2) - 5 *\
0
   def function1(self, a,
                 b):
)r   rn      
   def function1(self, a,\

   def function1(self, a,
())
)(
{)(]
r9   )r   r   r;   _study1ranger   r>   r:   r@   rl   rm   r`   )r   rA   rB   rC   studyNONE	BACKSLASHFIRSTNEXTBRACKETrk   rD   tests                r   test_study1PyParseTest.test_study1   s)   KK**		27(/%wj +; < R!d#<q!fdK<q!fdK:QFEJ:QFEJ:QFEJ2QFEB<q!fdK51vtD7!QF4iF_q!fd3:QFGL3aVUC,q!fi@J&6	7K4iIWq!fd+VaVW-X1vt,7< DT[[1$1==!$1;;/1>>4#4#45 21  	%'" 21s   A'G
G-	c                    U R                   nU R                  nUR                  nUR                  n[	        S5      u  pVpxn	[        SSS/5      n
U
" SU5      U
" SU5      U
" SU5      U
" SU5      U
" S	U	5      4nU HO  nU R                  UR                  S
9   U" UR                  5        U" U" 5       UR                  5        S S S 5        MQ     g ! , (       d  f       Mc  = f)Nrf   rk   r:   rm   r7   z%"""This is a continuation docstring.
z-'''This is a multiline-continued docstring.

rp   rs   r9   )	r   r   r;   get_continuation_typery   r   r>   r:   rm   )r   rA   rB   rC   gettyper{   r|   r}   r~   r   rk   rD   r   s                r   test_get_continuation_type&PyParseTest.test_get_continuation_type   s    KK**))27(/%wj8^*DER=uEFM,i86@ DT[[1$79d//0 21 11s   +C
C	c                    U R                   nU R                  nUR                  nUR                  n[	        S/ SQ5      nU" SSSSS S5      U" SSSSS S	5      U" S
SSSS S5      U" SSSSS S5      U" SSSSS S5      U" SSSSS S5      U" SSSSSS5      U" SSSSSS5      U" SSSSSS5      U" S SS!SS"S#5      U" S$SS%S&S S'5      U" S(SS)S*SS+5      U" S,SS-S.S S/5      U" S0SS%S1S S5      U" S2SSSS S5      4nU H  nU R                  UR                  S39   U" UR                  5        U" 5         U" UR                  S45        U" UR                  UR                  5        U" UR                  UR                  5        U" UR                  UR                  5        U" UR                  UR                  5        U" UR                  UR                   5        S S S 5        M     U R#                  U" 5       5        g ! , (       d  f       GM  = f)5Nrk   )r:   ra   endlastchopenbracket
bracketingr7   r   r   r   z0'''This is a multiline continuation docstring.

0   ')r   r   rn   )r   r   z # Comment\
   )r   rn   rn   )r   r   z #Comment\
rp      *)r   r   rn   )   r   rq   rn   :)rn   r      rn   ).   r   rs      ,r   )r   r   rt      z3
   def function1(self, a,  # End of line comment.
3   )r   r   )r   ro   )r   rn   z7  a = ["first item",
  # Comment line
    "next item",
7      )r   )r   rn   )   ro   )r   rn   )   ro   )&   rn   )rO   ro   )5   rn   ru   r   ))r   r   ro   r   rr   r   rv   rr   ()r   r   r   rw   rf   ]r   r   r   ro   rn   r   r   z:\a
z\a
r9   ro   )r   r   r;   _study2r   r>   r:   r@   
stmt_startra   stmt_endr   r   lastopenbracketposr   stmt_bracketingr   r`   )r   rA   rB   rC   rz   rk   rD   r   s           r   test_study2PyParseTest.test_study2   se   KK**		j +H I RAr43IC'@B%B&?A _2tY0 ,C'@B JC'AC 6C%68 4C%68 LC%HJ QC %IJ W3&FHVQ3+CDX3&NP Xq!UD)<T1aT95I%N DT[[1$1==!$1<<,1::txx(188T[[)1'')9)9:1$$doo6 21  	%'" 21s   B>G44
H	c                 N   U R                   nU R                  nUR                  nUR                  n[	        SSS/5      nU" SS5      U" SS5      U" SS5      U" S	S
5      U" SS5      U" SS5      U" SS5      U" SS5      4nU" S5        U R                  [        5         U" 5         S S S 5        U HO  nU R                  UR                  S9   U" UR                  5        U" U" 5       UR                  5        S S S 5        MQ     g ! , (       d  f       Nd= f! , (       d  f       Mt  = f)Nrk   r:   linesz[x for x in a]
rn   z[x
for x in a
ro   z[x\
for x in a\
z[x
for x in a
]
rr   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\
"""
rf   r7   r9   )
r   r   r;   get_num_lines_in_stmtr   r<   
IndexErrorr>   r:   r   )r   rA   rB   rC   getlinesrk   rD   r   s           r   test_get_num_lines_in_stmt&PyParseTest.test_get_num_lines_in_stmt  s   KK****j8W*=>'+'++Q/*A.A1EA1EFJMqQ	 	z*J + DT[[1$8:tzz* 21  +* 21s   D+D
D
D$	c                    U R                   nU R                  nUR                  nUR                  n[	        SSS/5      nU" SS5      U" SS5      U" SS5      U" S	S
5      U" SS
5      U" SS
5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      4nU" S5        U R                  [        5         U" 5         S S S 5        U H-  nU" UR                  5        U" U" 5       UR                  5        M/     g ! , (       d  f       NB= f)Nrk   r:   spaceszdef function1(self, a,
   z
    def function1(self, a,
   z
	def function1(self, a,
z
    def function1(
r   z
	def function1(
z
    def function1(  
z2[
"first item",
  # Comment line
    "next item",
r   z4[
  "first item",
  # Comment line
    "next item",
ro   z1["first item",
  # Comment line
    "next item",
rn   z(
r   z(a
zdef function1(self, a, b):
)	r   r   r;   compute_bracket_indentr   r<   r=   r:   r   )r   rA   rB   rC   indentrk   rD   r   s           r   test_compute_bracket_indent'PyParseTest.test_compute_bracket_indent1  s   KK**))j8X*>?/45r:3R8-q1+Q//3MqQOQRSKQOUAVQ" 	./~.H / DDKK vx%  /.s   6C::
Dc                    U R                   nU R                  nUR                  nUR                  nSnU HH  nU R	                  US9   U" U5        U R                  [        5         U" 5         S S S 5        S S S 5        MJ     [        SS5      nU" SS5      U" SS5      U" SS	5      U" S
S5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      4nU HO  n	U R	                  U	R                  S9   U" U	R                  5        U" U" 5       U	R                  5        S S S 5        MQ     g ! , (       d  f       N= f! , (       d  f       GMA  = f! , (       d  f       M  = f)N)zdef function1(self, a, b\
z    """ (\
za = #\
r9   rk   )r:   r   rp   r   za = 1 + 2 - 5 *\
z    a = 1 + 2 - 5 *\
r   z  a = "spam"\
r   z  a = \
"a"\
z  a = #\
"a"\
rf   za == \
ro   za != \
z\
z    \
z	\
za\
rr   z{}\
z(1 + 2) - 5 *\
)
r   r   r;   compute_backslash_indentr>   r<   r=   r   r:   r   )
r   rA   rB   rC   r   errorsr:   rk   rD   r   s
             r   test_compute_backslash_indent)PyParseTest.test_compute_backslash_indentQ  sx   KK**++ FV,&&~6H 7 -,  j*>?115/33Q7,a0-q1.2+q)+q)&!$*a((A&'1%(A&-q1  DT[[1$68T[[) 21 ) 76 -,. 21s0   E&%E-E&+E9
E#E&&
E6	9
F	c           
         U R                   nU R                  nUR                  nUR                  n[	        SSS/5      nU" SS5      U" SS5      U" SS5      U" SS	5      U" S
S	5      U" SS	5      U" SS	5      4nU HO  nU R                  UR                  S9   U" UR                  5        U" U" 5       UR                  5        S S S 5        MQ     g ! , (       d  f       Mc  = f)Nrk   r:   r   r7   	def a():
z
	def a():
r	   z    def a():
z    z    def a(
z	
    def a(
z	
    # Comment.
r9   )r   r   r;   get_base_indent_stringr   r>   r:   r   )r   rA   rB   rC   
baseindentrk   rD   r   s           r   test_get_base_indent_string'PyParseTest.test_get_base_indent_stringx  s    KK**--
j8X*>?"b!,+.$/*F3.&1,f50&9 DT[[1$:<- 21 11s   +C
C	c                 &   U R                   nU R                  nU R                  nUR                  nUR                  n[        SSS/5      nU" SU5      U" SU5      U" SU5      U" SU5      U" SU5      U" S	U5      U" S
U5      U" SU5      U" SU5      U" SU5      U" SU5      U" SU5      4nU HM  nU R                  UR                  S9   U" UR                  5        UR                  U" 5       5        S S S 5        MO     g ! , (       d  f       Ma  = f)Nrk   r:   assert_r   rq   z:
za:
z):
z(:
z":
rt   !def function1(self, a):
    pass
z# A comment:
z"""A docstring:
r9   )	
assertTrueassertFalser   r;   is_block_openerr   r>   r:   r   )	r   yesnorB   rC   openerrk   rD   r   s	            r   test_is_block_opener PyParseTest.test_is_block_opener  s   ooKK**""j8Y*?@\3'JCPUC VS!VS!VS!VR 4b9:B?%r*("-("- DT[[1$VX& 21 11s   )D
D	c                 6   U R                   nU R                  nU R                  nUR                  nUR                  n[        SSS/5      nU" SU5      U" SU5      U" SU5      U" SU5      U" SU5      U" S	U5      U" S
U5      U" SU5      U" SU5      U" SU5      U" SU5      U" SU5      U" SU5      4nU HM  nU R                  UR                  S9   U" UR                  5        UR                  U" 5       5        S S S 5        MO     g ! , (       d  f       Ma  = f)Nrk   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
r   r9   )	r   r   r   r;   is_block_closerr   r>   r:   r   )	r   r   r   rB   rC   closerrk   rD   r   s	            r   test_is_block_closer PyParseTest.test_is_block_closer  s   ooKK**""j8Y*?@Z%[#&^S)^S)\3'Z%\3'Z$]B'\2&\2&]B':C@  DT[[1$VX& 21 11s   )D		
D	c                    U R                   nU R                  nUR                  nUR                  n[	        SSS/5      nU" SS5      U" SS5      U" SS5      U" S	S
5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      4
nU HO  nU R                  UR                  S9   U" UR                  5        U" U" 5       UR                  5        S S S 5        MQ     g ! , (       d  f       Mc  = f)Nrk   r:   bracketr7   r   r8   z()()
r   z(
)()
)r   r   r   rr   rn   rf   r   z()
()
)r   r   r   z()(
)
)r   r   r   r   r   z(())
)r   r   rn   ro   r   r   z(
())
)r   r   )ro   ro   r   r   rw   z(((())
)r   r   r   )ro   rr   )rr   r   )rf   rr   )r   ro   r9   )r   r   r;   get_last_stmt_bracketingr   r>   r:   r   )r   rA   rB   rC   r   rk   rD   r   s           r   test_get_last_stmt_bracketing)PyParseTest.test_get_last_stmt_bracketing  s    KK**//
j8Y*?@R#UI&XGHZ!IJZ!9:Z!IJXGHZ!IJXGHZMO DT[[1$:<. 21 11s   /+C''
C6	r   N)r    r!   r"   r#   classmethodr-   r1   r4   rE   rc   rh   r   r   r   r   r   r   r   r   r   r   r$   r   r   r   r&   r&      st    ? ?  2%$?DB-00#d1*;#z+8&@%*N.*'8':/r   r&   __main__ro   )	verbosity)
idlelibr   unittestcollectionsr   TestCaser   r&   r    mainr   r   r   <module>r      sR      "/8$$ / G/(## G/T zMMA r   