a ze@sddlZddlZddlZGdddejjZGdddeZGdddeZGdd d ej Z Gd d d e Z Gd d d e Z e dkredS)Nc@sleZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS)EventCollectorcOs0g|_|jj|_tjjj|g|Ri|dSN)eventsappendhtmlparser HTMLParser__init__)selfargskwr H/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_htmlparser.pyr s zEventCollector.__init__cCsjg}d}|jD]P}|d}||kr.dkrPnnd|dd|df|d<n |||}q||_|S)Nrdata)rr)r LZprevtypeeventtyper r r get_eventss  zEventCollector.get_eventscCs|d||fdS)Nstarttagrr tagattrsr r rhandle_starttag szEventCollector.handle_starttagcCs|d||fdS)N startendtagrrr r rhandle_startendtag#sz!EventCollector.handle_startendtagcCs|d|fdS)Nendtagr)r rr r r handle_endtag&szEventCollector.handle_endtagcCs|d|fdS)Ncommentrr rr r rhandle_comment+szEventCollector.handle_commentcCs|d|fdS)Ncharrefrr!r r rhandle_charref.szEventCollector.handle_charrefcCs|d|fdS)Nrrr!r r r handle_data1szEventCollector.handle_datacCs|d|fdS)Ndeclrr!r r r handle_decl4szEventCollector.handle_declcCs|d|fdS)N entityrefrr!r r rhandle_entityref7szEventCollector.handle_entityrefcCs|d|fdS)Npirr!r r r handle_pi:szEventCollector.handle_picCs|d|fdS)N unknown declr)r r&r r r unknown_decl=szEventCollector.unknown_declN)__name__ __module__ __qualname__r rrrrr"r$r%r'r)r+r-r r r rrsrc@seZdZddZdS)EventCollectorExtracCs$t||||d|fdS)N starttag_text)rrrZget_starttag_textrr r rrCsz#EventCollectorExtra.handle_starttagN)r.r/r0rr r r rr1Asr1c@seZdZddZddZdS)EventCollectorCharrefscCs|ddSNz6This should never be called with convert_charrefs=Truefailr!r r rr$Jsz%EventCollectorCharrefs.handle_charrefcCs|ddSr4r5r!r r rr)Msz'EventCollectorCharrefs.handle_entityrefN)r.r/r0r$r)r r r rr3Hsr3c@s&eZdZddZdddZddZdS) TestCaseBasecCs tddSNFconvert_charrefs)rr r r r get_collectorSszTestCaseBase.get_collectorNcCsr|dur|}|}|D]}||q||}||krn|dt|dt|dt|dS)Nz6received events did not match expected events Source: z Expected: z Received: )r<feedcloserr6reprpprintZpformat)r sourceZexpected_events collectorrsrr r r _run_checkVs& zTestCaseBase._run_checkcCs|||tdddSr8)rDr1)r rArr r r_run_check_extradszTestCaseBase._run_check_extra)N)r.r/r0r<rDrEr r r rr7Qs r7c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;S)<HTMLParserTestCasecCs |ddg|ddgdS)Nz)r*zprocessing instructionz)r*zprocessing instruction ?rDr;r r r test_processing_instruction_onlyks z3HTMLParserTestCase.test_processing_instruction_onlycCsB|ddddddgfddddddd d d gfd d dddddgdS)Nz &entity; sample text “ )r )r&zDOCTYPE html PUBLIC 'foo'rr)r(entity)r#Z32)r z4comment1a -><&#bad;

rp)rz&#bad;rrOz
&#bad;
divrrQrGr;r r rtest_malformatted_charrefsz,HTMLParserTestCase.test_malformatted_charrefcCs|dddgdS)Nz&entityref foo)r(r()rz foorGr;r r rtest_unclosed_entityrefsz*HTMLParserTestCase.test_unclosed_entityrefcCs$|dddgfddgfddgdS)NzrabrrUrrVrGr;r r rtest_bad_nestings z#HTMLParserTestCase.test_bad_nestingcCs|ddgdS)N#this text & contains & ampersands &)rrZrGr;r r rtest_bare_ampersandssz'HTMLParserTestCase.test_bare_ampersandscCs|ddgdS)N.this < text > contains < bare>pointy< brackets)rr\rGr;r r rtest_bare_pointy_bracketssz,HTMLParserTestCase.test_bare_pointy_bracketscCs0|ddddgfg|ddddgfgdS)N rrUrV< rV>rGr;r r rtest_starttag_end_boundarysz-HTMLParserTestCase.test_starttag_end_boundarycCsdddgfg}|dg||ddg||ddg||d d g||d d g||d dg|dddgfg}|dg||ddg||ddg||d dg||dd g||ddg|dg}|ddg||ddg||ddg||ddg||dd g||d!d"g||d#d$g||d%d&g||d'd(g||d)dg||ddg|dS)*NrrUr_r^zzzzzz='>'>z'>'>z')r abcz r`z !--abc-->zzzzzz ¬-an-entity-ref;zz

zfoo = "";zfoo = "";zfoo = < /script> z*z //<\/s'+'cript>'); //]]>z zfoo = "";u )scriptstyleZSCRIPTZSTYLEZScriptZStylez <{element}>{content}elementcontentrrr)lowerformatrD)r contentselementsrurt element_lowerrCr r rtest_cdata_content sz%HTMLParserTestCase.test_cdata_contentcCsfGdddt}d}dD]H}|}dj||d}|j|d|gfd|fd |fg|d d d qdS) Nc@seZdZddZdS)zBHTMLParserTestCase.test_cdata_with_closing_tags..CollectorcSs|jSr)rr;r r rr.szMHTMLParserTestCase.test_cdata_with_closing_tags..Collector.get_eventsN)r.r/r0rr r r r Collector-sr|z ¬-an-entity-ref;

'')z scriptzscript z script z scriptzscript z script z{1}{1}z &quo &# &#xrno charrefs here)rr)Z assertTruer:rDrwjoinrangelen)r rBZcharrefsrr#textrrr r rtest_convert_charrefsXsR    z(HTMLParserTestCase.test_convert_charrefsc Cs2|ddddgfdddddd gfd d d d g dS)NzFte>>xt&a< )r z/img)rzhtmlz)r $ra)rrrg)rrg')rr broken condcomfoo)r,zif !(IE))rzbroken condcom)r,Zendif)r,zif ! IErlink)rz favicon.tiff)r,zif !IE 6rK)rLz firefox.png)r,zif !ie 6rrV)rrlrX)r,zif (!IE)|(lt IE 9))rLz mammoth.bmprGrr r rtest_broken_condcoms,s(    z'HTMLParserTestCase.test_broken_condcomscCs8tdd}|d||dddgfddd gdS) NTr9zfoo link bar & baz)rzfoo rrU)rrrW)rz bar & baz)rr=Z assertEqualr)r rr r r"test_convert_charrefs_dropped_textMs   z5HTMLParserTestCase.test_convert_charrefs_dropped_textN) r.r/r0rHrNrSrTrYr[r]rdrjrkrmrpr{rrrrrrrrrrrrrrrrr r r rrFis:    )  !!rFc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#S)$AttributesTestCasecCsDddgdfg}|d||d||d||d|dS)NrrU))rVv)cr)dr)eNzzzzrGrhr r rtest_attr_syntax\s     z#AttributesTestCase.test_attr_syntaxcCs`|dddgdfg|dddddgfg|ddd d gfg|d ddd gfgdS) Nz'rrU))rVzxxx xxx)rzyyy yyy)rz xyz z )rVrf)rrfzr)rUz rgb(1,2,3)z)rzmailto:xyz@example.comrGr;r r rtest_attr_valueses  z#AttributesTestCase.test_attr_valuescCsL|dddddgfg|ddddd gfg|d dddd gfgdS) Nu!中文rrK)rLz /foo/bar.png)Zaltu中文u+rU)titleu テスト)ruテスト.htmlu+rGr;r r rtest_attr_nonasciits$z%AttributesTestCase.test_attr_nonasciicCs|ddddgfgdS)Nz!rrU)rVz&><"'rGr;r r rtest_attr_entity_replacements z/AttributesTestCase.test_attr_entity_replacementcCs|dddgdfgdS)NzrrU))za.br)zc:dr)ze-frrGr;r r rtest_attr_funky_namessz(AttributesTestCase.test_attr_funky_namescCs|ddddgfgdS)Nz0rr)rlu€&aa&unsupported;rGr;r r rtest_entityrefs_in_attributess z0AttributesTestCase.test_entityrefs_in_attributescCs.|ddddgfdddgfdddgfgdS) NzrrU)rNrV)r%r)\/rGr;r r rtest_attr_funky_names2s   z)AttributesTestCase.test_attr_funky_names2cCs\dD]R}|d|dddgfg|d|dddgfg|d|dddgfgqdS)N)&z&z&z&z rrU)rrz z rG)r rJr r r test_entities_in_attribute_values      z3AttributesTestCase.test_entities_in_attribute_valuec CsPd}dddgfdddddgfddddd gfd dddd gfd dg }|||dS) Nztest - bad1test - bad2test - bad3test - bad4rrU)rztest'style='color:red;bad1')rz test - bad1rW)rztest'+style='color:red;ba2')rz test - bad2)rutest' style='color:red;bad3')rz test - bad3)rutest' style='color:red;bad4')rz test - bad4rGrr r rtest_malformed_attributess     z,AttributesTestCase.test_malformed_attributescCsH|dddgfddddgfdg|d ddgfdddd gfdgdS) Nzrrrr)rrf)zo""N)rrz)z""NrGr;r r r"test_malformed_adjacent_attributess  z5AttributesTestCase.test_malformed_adjacent_attributescCs4|dddddgfg|dddddgfgdS) NzrrUrz100%Z cellspacing0z)idrlclassrrGr;r r rtest_adjacent_attributessz+AttributesTestCase.test_adjacent_attributescCs|ddddgfgdS)NzrrU)rrfrGr;r r rtest_missing_attribute_values z/AttributesTestCase.test_missing_attribute_valuecCs|ddddgfgdS)Nz-rrU)rz$javascript:popup('/popup/help.html')rGr;r r rtest_javascript_attribute_values z2AttributesTestCase.test_javascript_attribute_valuecCs|ddddgfddgdS)Nz-spamrrU)rzhttp://www.example.org/">;)rZspamrWrGr;r r rtest_end_tag_in_attribute_valuesz2AttributesTestCase.test_end_tag_in_attribute_valuecCsd}ddgfddddgfddgdfdd gfdd d gfdd d gfddddgfdddgfdddddddgfdddgfddddg}|||dS)Nz
- software-and-i- library
rrbody)ZbgcolorZd0ca90)rZ181008table)r)Z cellpaddingrnrtrZtd)ZalignleftZfont)sizez-1)rz- rU)rz/rabota/r)ren)rz software-and-irrW)rz/1/)rz library)rrrGrr r rtest_with_unquoted_attributess"       z0AttributesTestCase.test_with_unquoted_attributesc Csd}dddgfddddgfddddgfddgd fdddd gfddd d gfddd dgfddddgfddddgfg }|||dS)Nz

rrQ)rz bar,baz=asdr)z,bazasd)rzbar,)bazzasd,)rr)rrrr)rz,bar)rz,asd)rz,"bar")rz,"asd")z,classr)zclass,r)zbaz,rrGrr r rtest_comma_between_attributess          z0AttributesTestCase.test_comma_between_attributescCs|ddddgfgdS)Nz
rZform)actionzbogus|&#()valuerGr;r r r-test_weird_chars_in_unquoted_attribute_valuess z@AttributesTestCase.test_weird_chars_in_unquoted_attribute_valuesN)r.r/r0rrrrrrrrrrrrrrrrrr r r rrZs"    r__main__)Z html.parserrr@Zunittestrrrr1r3ZTestCaser7rFrr.mainr r r rs9 t=