U :eK@s`dZddlmZddlZddlmZGdddejZGdddejZe d kr\ej d d dS) zTest pyparse, coverage 96%.)pyparseN) namedtuplec@seZdZddZddZdS) ParseMapTestcCs`dddD}t|}||tdtd||tdtd||dtddS)NcSsi|]}t|t|qS)ord).0crrC/usr/local/python38/lib/python3.8/idlelib/idle_test/test_pyparse.py sz.ParseMapTest.test_parsemap..z  axi)rZParseMap assertEqualr)selfZ keepwhitemappingrrr test_parsemap s  zParseMapTest.test_parsemapcCs$tdd}|dtjddS)Nz a([{b}])b"c'd zxxx(((x)))x"x'x )rParserr translateZtrans)rparserrrr test_transs zParseMapTest.test_transN)__name__ __module__ __qualname__rrrrrr rsrc@seZdZeddZeddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!S)" PyParseTestcCstjddd|_dS)Nr) indentwidthtabwidth)rrrclsrrr setUpClassszPyParseTest.setUpClasscCs|`dSN)rrrrr tearDownClassszPyParseTest.tearDownClasscCs$||jjd||jjddS)Nr)rrrr)rrrr test_init"szPyParseTest.test_initc Csz|j}|j}|j}|t|dW5QRXd}|D]<}|j|d&||||j|||jdW5QRXq8dS)Nr )a stringr)rrset_code assertRaisesAssertionErrorsubTestcode study_level)reqpsetcodetestsr&rrr test_set_code&s  zPyParseTest.test_set_codec sb|j}|j}|j}|j}dd}|d|||d|d|||d|dd\}|t |W5QRX|t|dW5QRX||d d d |||||fd d d ||fd d d |||fdd d d|d|||||fdd d ||fdd d |||fdd d dS)NcSsdS)NFrindexrrr char_in_string_false=zDPyParseTest.test_find_good_parse_start..char_in_string_falsez def spam(): rzclass spam( k"""This is a module docstring""" class C: def __init__(self, a, b=True): pass )!*FcSsdS)NTrr2rrr [r5z8PyParseTest.test_find_good_parse_start..)Zis_char_in_stringcs|kSr rr2posrr r9cr5cs|kSr rr2r:rr r9fr5cs|kSr rr2r:rr r9ir5zZ"""This is a module docstring""" class C: def __init__(self, a, b=True): pass cs|kSr rr2r:rr r9sr5cs|kSr rr2r:rr r9tr5cs|kSr rr2r:rr r9wr5)rrr'Zfind_good_parse_startr( TypeError assertIsNone)rr-r.r/startr4Zpos0rr:r test_find_good_parse_start8s2  z&PyParseTest.test_find_good_parse_startc Cstd}d}|j}|||t|dW5QRX|d||j|||||j||ddS)Nr6r8r)rr'r(r)Zset_lorr+)rr+r;r.rrr test_set_loys    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} | D]X} |j| jd>|| j|||jd ||j | j ||j | j W5QRXqn| |dS) Nr@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 a = (1 + 2) - 5 *\ 0 def function1(self, a, b):  def function1(self, a,\  def function1(self, a, ()) )( {)(] r%) rrr'Z_study1rangerr*r&r,rCrDr=) rr-r.r/studyNONE BACKSLASHFIRSTNEXTBRACKETrBr0testrrr test_study1sR   zPyParseTest.test_study1c Cs|j}|j}|j}|j}td\}}}}} tdddg} | d|| d|| d|| d|| d | f} | D]6} |j| jd || j||| jW5QRXqhdS) Nr@rBr&rDr#z%"""This is a continuation docstring. z-'''This is a multiline-continued docstring. rGrJr%) rrr'Zget_continuation_typerOrr*r&rD) rr-r.r/ZgettyperQrRrSrTrUrBr0rVrrr test_get_continuation_types  z&PyParseTest.test_get_continuation_typecCs|j}|j}|j}|j}tdddddddg}|dd d ddd |d d d d dd|dd dddd|dd d ddd |dd dddd|ddd ddd|dddddd|d dd!ddd|d"dd#ddd$|d%d d&dd'd(|d)d d*d+dd,|d-d d.d/dd0|d1d d2d3dd4|d5d d*d6dd |d7d d ddd f}|D]}|j|jd8h||j|||jd9||j|j ||j |j ||j |j ||j |j||j|jW5QRXq&||dS):NrBr&r>endlastch openbracket bracketingr#rrrz0'''This is a multiline continuation docstring. 0')r^rrE)r_rz # Comment\ )r^rErE)rbrz #Comment\ rG*)r^rrE) rrHrE:)rErrE).rrJ,rk)rirjrKz3 def function1(self, a, # End of line comment. 3)rirj)rmrF)rprEz7 a = ["first item", # Comment line "next item", 7)r^)rrrE)rF)rdrE)rF)&rE)r8rF)5rErLr))r^rarFrrIrrMrI()r^rircrNr@]r^rarxrFrErrz:\a z\a r%rF)rrr'Z_study2rr*r&r,Z stmt_startr>Zstmt_endrYrZZlastopenbracketposr[Zstmt_bracketingr\r=)rr-r.r/rPrBr0rVrrr test_study2s '  zPyParseTest.test_study2c Cs|j}|j}|j}|j}tdddg}|dd|dd|dd|d d |d d|d d|d d|ddf}|d|t |W5QRX|D]6}|j|jd||j|||j W5QRXqdS)NrBr&linesz[x for x in a] rEz[x for x in a rFz[x\ for x in a\ z[x for x in a ] rIz% """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\ """ r@r#r%) rrr'Zget_num_lines_in_stmtrr( IndexErrorr*r&r)rr-r.r/getlinesrBr0rVrrr 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|ddf }|d|t |W5QRX|D]}||j|||jqdS)NrBr&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", rFz1["first item", # Comment line "next item", rEz( rz(a zdef function1(self, a, b): ) rrr'Zcompute_bracket_indentrr(r)r&r)rr-r.r/indentrBr0rVrrr test_compute_bracket_indent1s.  z'PyParseTest.test_compute_bracket_indentc Cs |j}|j}|j}|j}d}|D]@}|j|d*|||t |W5QRXW5QRXq tdd}|dd|dd|dd |d d |d d|d d|dd|dd|dd|dd |dd |dd|dd|ddf}|D]6} |j| jd|| j||| j W5QRXqdS)N)zdef function1(self, a, b\ z """ (\ za = #\ r%rB)r&rrGrza = 1 + 2 - 5 *\ z a = 1 + 2 - 5 *\ rz a = "spam"\ rrz a = \ "a"\ z a = #\ "a"\ r@za == \ rFza != \ z\ z \ z \ za\ rIz{}\ z(1 + 2) - 5 *\ ) rrr'Zcompute_backslash_indentr*r(r)rr&r) rr-r.r/rerrorsr&rBr0rVrrr test_compute_backslash_indentQs<   z)PyParseTest.test_compute_backslash_indentc Cs|j}|j}|j}|j}tdddg}|dd|dd|dd|dd |d d |d d |d d f}|D]6}|j|jd ||j|||jW5QRXqfdS)NrBr&rr# 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 baseindentrBr0rVrrr test_get_base_indent_stringxs"  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 }|D]4}|j|jd||j||W5QRXqdS)NrBr&assert_rrHz: za: z): z(: z": rK!def function1(self, a): pass z # A comment: z"""A docstring: r%) assertTrue assertFalserr'Zis_block_openerrr*r&r) ryesnor.r/openerrBr0rVrrr test_is_block_openers. 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 }|D]4}|j|jd||j||W5QRXqdS)NrBr&rzreturn z break z continue z raise z pass zpass z return # zraised z returning z # return z """break z "continue rr%) rrrr'Zis_block_closerrr*r&r) rrrr.r/ZcloserrBr0rVrrr test_is_block_closers0 z PyParseTest.test_is_block_closerc Cs|j}|j}|j}|j}tdddg}|dd|dd|dd|d d |d d |d d|dd|dd|dd|ddf }|D]6}|j|jd||j|||jW5QRXq~dS)NrBr&bracketr#r]r$z()() r|z( )() )r^raryrIrEr@rz() () )ryrrz()( ) )r^rarxr}rz(()) )r^rarErFrr~z( ()) )r^ra)rFrFrfrrNz(((()) )r^rar)rFrI)rIr)r@rI)rrrFr%)rrr'Zget_last_stmt_bracketingrr*r&r)rr-r.r/r\rBr0rVrrr test_get_last_stmt_bracketings, z)PyParseTest.test_get_last_stmt_bracketingN)rrr classmethodrr!r"r1r?rArWrXrrrrrrrrrrrr rs$  A2= 'r__main__rF) verbosity) __doc__ZidlelibrZunittest collectionsrZTestCaserrrmainrrrr s  M