3 § fœHã@s`dZddlmZddlZddlmZGdd„dejƒZGdd„dejƒZe d kr\ej d d �dS) zTest pyparse, coverage 96%.é)ÚpyparseN)Ú namedtuplec@seZdZdd„Zdd„ZdS)Ú ParseMapTestcCs`dd„dDƒ}tj|ƒ}|j|tdƒtdƒƒ|j|tdƒtdƒƒ|j|dtdƒƒdS)NcSsi|]}t|ƒt|ƒ“qS©)Úord)Ú.0ÚcrrúC/opt/alt/python36/lib64/python3.6/idlelib/idle_test/test_pyparse.pyú sz.ParseMapTest.test_parsemap..z ú ÚaÚxiè)rZParseMapÚ assertEqualr)ÚselfZ keepwhiteÚmappingrrr Ú test_parsemap s  zParseMapTest.test_parsemapcCs$tjddƒ}|jdjtjƒdƒdS)Néz a([{b}])b"c'd zxxx(((x)))x"x'x )rÚParserrÚ translateZtrans)rÚparserrrr Ú test_transs zParseMapTest.test_transN)Ú__name__Ú __module__Ú __qualname__rrrrrr rsrc@s”eZdZedd„ƒZedd„ƒZdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!S)"Ú PyParseTestcCstjddd�|_dS)Nr)Ú indentwidthÚtabwidth)rrr)Úclsrrr Ú setUpClassszPyParseTest.setUpClasscCs|`dS)N)r)rrrr Ú tearDownClassszPyParseTest.tearDownClasscCs$|j|jjdƒ|j|jjdƒdS)Nr)rrrr)rrrr Ú test_init"szPyParseTest.test_initcCs~|j}|j}|j}|jtƒ�|dƒWdQRXd}xD|D]<}|j|d��&||ƒ||j|ƒ||jdƒWdQRXq:WdS)Nr Úúa )Ústringr)r!r")rrÚset_codeÚ assertRaisesÚAssertionErrorÚsubTestÚcodeÚ study_level)rÚeqÚpÚsetcodeÚtestsr#rrr Ú test_set_code&s   zPyParseTest.test_set_codecCsì|j}|j}|j}|j}|dƒ|j|ƒƒ|j|dd„d�ƒ||dd„d�dƒ||dd„d�dƒ||dd„d�d ƒ||d d„d�dƒ|d ƒ||d d„d�dƒ||d d„d�dƒ||dd„d�d ƒ||dd„d�dƒdS)Nzm"""This is a module docstring""" class C(): def __init__(self, a, b=True): pass cSsdS)NTr)Úindexrrr ÚKsz8PyParseTest.test_find_good_parse_start..)Zis_char_in_stringcSsdS)NFr)r/rrr r0Osé,cSs|dkS)Nr1r)r/rrr r0SscSs|dkS)Nr1r)r/rrr r0Vsé!cSs|dkS)Nr1r)r/rrr r0Ysz\"""This is a module docstring""" class C(): def __init__(self, a, b=True): pass cSsdS)NFr)r/rrr r0bscSs|dkS)Nr1r)r/rrr r0cscSs|dkS)Nr1r)r/rrr r0dscSs|dkS)Nr1r)r/rrr r0gs)rrr$Zfind_good_parse_startÚ assertIsNone)rr*r+r,Ústartrrr Útest_find_good_parse_start8s  z&PyParseTest.test_find_good_parse_startc Cspd}|j}|j|ƒ|jtƒ�|jdƒWdQRX|jdƒ|j|j|ƒ|jdƒ|j|j|dd…ƒdS)Nzm"""This is a module docstring""" class C(): def __init__(self, a, b=True): pass érr1)rr$r%r&Zset_lorr()rr(r+rrr Ú test_set_lois    zPyParseTest.test_set_loc CsÜ|j}|j}|j}|j}tdƒ\}}}}} tddddgƒ} | ddg|ƒ| ddd g|ƒ| d dd g|ƒ| d dd g|ƒ| d dd g|ƒ| d dd g|ƒ| ddd g|ƒ| dddg|ƒ| ddd g|ƒ| ddd g|ƒ| ddd dg|ƒ| ddd g|ƒ| ddd g| ƒ| ddd g|ƒ| ddd g|ƒ| ddd dg|ƒ| ddd dg| ƒ| ddd dg| ƒ| ddd g|ƒ| ddd g| ƒ| ddd g|ƒf} x`| D]X} |j| jd��>|| jƒ|ƒ||jd ƒ||j | j ƒ||j | j ƒWdQRX�qpW|j |ƒƒdS) Nr6ÚTestInfor#Ú goodlinesÚ continuationr!rz$"""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 za = (1 + 2) - 5 *\ z0 def function1(self, a, b): éz def function1(self, a,\ z def function1(self, a, z()) z)( z{)(] )r#) rrr$Z_study1Úrangerr'r#r)r9r:r3) rr*r+r,ÚstudyÚNONEÚ BACKSLASHÚFIRSTÚNEXTÚBRACKETr8r-Útestrrr Ú test_study1€sJ     zPyParseTest.test_study1c Cs¨|j}|j}|j}|j}tdƒ\}}}}} tdddgƒ} | d|ƒ| d|ƒ| d|ƒ| d|ƒ| d | ƒf} x>| D]6} |j| jd ��|| jƒ||ƒ| jƒWdQRXqjWdS) Nr6r8r#r:r!z%"""This is a continuation docstring. z-'''This is a multiline-continued docstring. za = (1 + 2) - 5 *\ z def function1(self, a,\ )r#) rrr$Zget_continuation_typer>rr'r#r:) rr*r+r,Zgettyper@rArBrCrDr8r-rErrr Útest_get_continuation_type²s   z&PyParseTest.test_get_continuation_typecCs¾|j}|j}|j}|j}tdddddddgƒ}|dd d ddd8ƒ|d d d d dd<ƒ|dd dddd@ƒ|dd d dddBƒ|dd ddddFƒ|dd ddddJƒ|dd ddddMƒ|dd ddddPƒ|d d d!dddUƒ|d#d d$dd%d^ƒ|d+d dd,ddcƒ|d.d d-d/d dgƒ|d0d d1d2ddmƒ|d3d dd4ddoƒ|d5d d dddqƒf}xŠ|D]‚}|j|jd6��h||jƒ|ƒ||jd"ƒ||j|j ƒ||j |j ƒ||j |j ƒ||j |jƒ||j|jƒWdQRX�q(W|j|ƒƒdS)rNr8r#r4ÚendÚlastchÚ openbracketÚ bracketingr!rz1'''This is a multiline continutation docstring. é1ú'r;z # Comment\ é z #Comment\ za = (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. é3r<z7 a = ["first item", # Comment line "next item", é7éééé&é*é5z()) ú)r=z)( ú(z{)(] r6ú]z:\a z\aÚ )r#©rr)re©rr©rr;©rLr)rfrgrh©rr©r;r;©rNr)rirjrk©rr)rl©rr©rr;©rQr)rmrnro©r;r©rTr;©rUr)rprqrr©r;r©rTr;)rsrt©r;r©rTr;)rurv©r;r©rTr;©rVr<©rYr;)rwrxryrz©rr©r[r;©r\r<©rOr;©r]r<©r^r;©r_r<©r`r;)r{r|r}r~rr€r�r‚©rr©rr;©r<r©r=r)rƒr„r…r†©rr©r;r©r;r;)r‡rˆr‰©rr©rr;©r<r©r<r;©rr)rŠr‹rŒr�rŽ©rr)r�©rr)r�)rrr$Z_study2rr'r#r)Z stmt_startr4Zstmt_endrHrIZlastopenbracketposrJZstmt_bracketingrKr3)rr*r+r,r?r8r-rErrr Ú test_study2ÇsX               zPyParseTest.test_study2cCsÒ|j}|j}|j}|j}tdddgƒ}|ddƒ|ddƒ|ddƒ|d d ƒ|d dƒ|d dƒ|d dƒ|ddƒf}|dƒ|jtƒ� |ƒWdQRXx>|D]6}|j|jd��||jƒ||ƒ|j ƒWdQRXq”WdS)Nr8r#Ú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\ rz+ """Docstring comment L1\ L2\ L3\ L4\ """ r6r!)r#) rrr$Zget_num_lines_in_stmtrr%Ú IndexErrorr'r#r’)rr*r+r,Úgetlinesr8r-rErrr Útest_get_num_lines_in_stmts(    z&PyParseTest.test_get_num_lines_in_stmtc CsÐ|j}|j}|j}|j}tdddgƒ}|ddƒ|ddƒ|ddƒ|d d ƒ|d d ƒ|d d ƒ|d dƒ|ddƒ|ddƒ|ddƒ|ddƒf }|dƒ|jtƒ� |ƒWdQRXx$|D]}||jƒ||ƒ|jƒq¬WdS)Nr8r#Úspaceszdef 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", rz4[ "first item", # Comment line "next item", r<z1["first item", # Comment line "next item", r;z( rz(a zdef function1(self, a, b): ) rrr$Zcompute_bracket_indentrr%r&r#r–)rr*r+r,Úindentr8r-rErrr Útest_compute_bracket_indent s,    z'PyParseTest.test_compute_bracket_indentc Cs(|j}|j}|j}|j}d}xH|D]@}|j|d��*||ƒ|jtƒ� |ƒWdQRXWdQRXq"Wtddƒ}|dd ƒ|d d ƒ|d d ƒ|d dƒ|dd ƒ|ddƒ|ddƒ|ddƒ|ddƒ|ddƒ|ddƒ|ddƒ|dd ƒ|ddƒf}x>|D]6} |j| jd��|| jƒ||ƒ| j ƒWdQRXqêWdS)Núdef function1(self, a, b\ ú """ (\ úa = #\ )r#r8r#r–za = (1 + 2) - 5 *\ rza = 1 + 2 - 5 *\ z a = 1 + 2 - 5 *\ r™z a = "spam"\ r[z a = \ "a"\ z a = #\ "a"\ r6za == \ r<za != \ z\ z \ z \ za\ r=z{}\ z(1 + 2) - 5 *\ )rœr�rž)r#r–) rrr$Zcompute_backslash_indentr'r%r&rr#r–) rr*r+r,ršÚerrorsr#r8r-rErrr Útest_compute_backslash_indent@s>      z)PyParseTest.test_compute_backslash_indentc Cs¦|j}|j}|j}|j}tdddgƒ}|ddƒ|ddƒ|ddƒ|dd ƒ|d d ƒ|d d ƒ|d d ƒf}x>|D]6}|j|jd ��||jƒ||ƒ|jƒWdQRXqhWdS)Nr8r#ršr!z def a(): z def a(): r z def a(): z z def a( z def a( z # Comment. )r#)rrr$Zget_base_indent_stringrr'r#rš)rr*r+r,Z baseindentr8r-rErrr Útest_get_base_indent_stringgs    z'PyParseTest.test_get_base_indent_stringc CsÒ|j}|j}|j}|j}|j}tdddgƒ}|d|ƒ|d|ƒ|d|ƒ|d|ƒ|d|ƒ|d |ƒ|d |ƒ|d |ƒ|d |ƒ|d |ƒ|d|ƒ|d|ƒf }x<|D]4}|j|jd��||jƒ|j|ƒƒWdQRXq–WdS)Nr8r#Úassert_z def a(): z0 def function1(self, a, b): z: za: z): z(: z": z def function1(self, a, z!def function1(self, a): pass z # A comment: z"""A docstring: )r#) Ú assertTrueÚ assertFalserr$Zis_block_openerrr'r#r¢) rÚyesÚnor+r,Úopenerr8r-rErrr Útest_is_block_opener|s,   z PyParseTest.test_is_block_openerc CsÚ|j}|j}|j}|j}|j}tdddgƒ}|d|ƒ|d|ƒ|d|ƒ|d|ƒ|d|ƒ|d |ƒ|d |ƒ|d |ƒ|d |ƒ|d |ƒ|d|ƒ|d|ƒ|d|ƒf }x<|D]4}|j|jd��||jƒ|j|ƒƒWdQRXqžWdS)Nr8r#r¢zreturn z break z continue z raise z pass zpass z return # zraised z returning z # return z """break z "continue z!def function1(self, a): pass )r#) r£r¤rr$Zis_block_closerrr'r#r¢) rr¥r¦r+r,Zcloserr8r-rErrr Útest_is_block_closer˜s.   z PyParseTest.test_is_block_closercCsÀ|j}|j}|j}|j}tdddgƒ}|ddƒ|ddƒ|ddƒ|d d%ƒ|dd)ƒ|dd/ƒ|dd5ƒ|dd;ƒ|ddAƒ|ddIƒf }x@|D]8}|j|jd��||jƒ||ƒ|jƒWdQRX�q€WdS)JNr8r#Úbracketr!rza z()() r;r<rz( )() r=r6z() () z()( ) z(()) z( ()) z{)(] z(((()) r[)r#©rr)r«©rr)r¬©rr©rr;©r<r©r<r;©rr)r­r®r¯r°r±©rr©rr;©r=r©r=r;©r6r)r²r³r´rµr¶©r=r©r=r;©r6r)r·r¸r¹©rr©rr;©r<r©r<r;©r6r)rºr»r¼r½r¾©rr©rr;©r;r<©r=r;©rr)r¿rÀrÁrÂrérr©rr;©r<r<©rr;©r6r)rÄrÅrÆrÇrÈ©rr©rr;©r<r©r<r;©rr)rÉrÊrËrÌrÍ©rr©rr;©r;r<©r<r=©r=r©r6r=©r[r<)rÎrÏrÐrÑrÒrÓrÔ)rrr$Zget_last_stmt_bracketingrr'r#rª)rr*r+r,rKr8r-rErrr Útest_get_last_stmt_bracketingµs(  z)PyParseTest.test_get_last_stmt_bracketingN)rrrÚ classmethodrrr r.r5r7rFrGr‘r•r›r r¡r¨r©rÕrrrr rs   12= 'rÚ__main__r<)Ú verbosity) Ú__doc__ZidlelibrZunittestÚ collectionsrZTestCaserrrÚmainrrrr Ús  <