
    0hh                     d   S SK rS SKrS SKrS SKJr  S SKJr   " S S\R                  R                  5      r
 " S S\
5      r " S S	\
5      r " S
 S\
5      r " S S\R                  5      r " S S\5      r " S S\5      r " S S\R                  5      r\S:X  a  \R(                  " 5         gg)    N)patch)supportc                   d    \ rS rSrSS.S j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)EventCollector   F	autocdatac                    Xl         / U l        U R                  R                  U l        [        R                  R
                  R                  " U /UQ70 UD6  U(       a  U R                  S5        g g )NF)r	   eventsappendhtmlparser
HTMLParser__init___set_support_cdata)selfr	   argskws       =/opt/python-3.13.8/usr/lib/python3.13/test/test_htmlparser.pyr   EventCollector.__init__   sW    "kk(('':t:r:##E*     c                     / nS nU R                    H>  nUS   nXBs=:X  a  S:X  a  O  OSUS   S   US   -   4US'   OUR                  U5        UnM@     Xl         U$ )Nr   data   )r   r   )r   Lprevtypeeventtypes        r   
get_eventsEventCollector.get_events   sk     [[E8D)6)2qE!H!45"H ! r   c                 ~    U R                  SX45        U R                  (       a  US:X  a  U R                  S5        g g g )NstarttagsvgTr   r	   r   r   tagattrss      r   handle_starttagEventCollector.handle_starttag&   s5    Z,->>cUl##D) +>r   c                 *    U R                  SX45        g )Nstartendtagr   r&   s      r   handle_startendtag!EventCollector.handle_startendtag+   s    ]C/0r   c                 ~    U R                  SU45        U R                  (       a  US:X  a  U R                  S5        g g g )Nendtagr$   Fr%   )r   r'   s     r   handle_endtagEventCollector.handle_endtag.   s4    XsO$>>cUl##E* +>r   c                 *    U R                  SU45        g )Ncommentr-   r   r   s     r   handle_commentEventCollector.handle_comment5       Y%&r   c                 *    U R                  SU45        g )Ncharrefr-   r6   s     r   handle_charrefEventCollector.handle_charref8   r9   r   c                 *    U R                  SU45        g )Nr   r-   r6   s     r   handle_dataEventCollector.handle_data;       VTN#r   c                 *    U R                  SU45        g )Ndeclr-   r6   s     r   handle_declEventCollector.handle_decl>   rA   r   c                 *    U R                  SU45        g )N	entityrefr-   r6   s     r   handle_entityrefEventCollector.handle_entityrefA   s    [$'(r   c                 *    U R                  SU45        g )Npir-   r6   s     r   	handle_piEventCollector.handle_piD   s    T4L!r   c                 *    U R                  SU45        g )Nunknown declr-   )r   rC   s     r   unknown_declEventCollector.unknown_declG   s    ^T*+r   )r   r	   r   N)__name__
__module____qualname____firstlineno__r   r    r)   r.   r2   r7   r<   r?   rD   rH   rL   rP   __static_attributes__ r   r   r   r      sA    (- +"*
1+''$$)",r   r   c                       \ rS rSrS rSrg)EventCollectorExtraK   c                 r    [         R                  XU5        U R                  SU R                  5       45        g )Nstarttag_text)r   r)   r   get_starttag_textr&   s      r   r)   #EventCollectorExtra.handle_starttagM   s,    &&t%8_d&<&<&>?@r   rW   N)rR   rS   rT   rU   r)   rV   rW   r   r   rY   rY   K   s    Ar   rY   c                        \ rS rSrS rS rSrg)EventCollectorCharrefsR   c                 &    U R                  S5        g Nz6This should never be called with convert_charrefs=Truefailr6   s     r   r<   %EventCollectorCharrefs.handle_charrefT       		JKr   c                 &    U R                  S5        g rc   rd   r6   s     r   rH   'EventCollectorCharrefs.handle_entityrefW   rg   r   rW   N)rR   rS   rT   rU   r<   rH   rV   rW   r   r   r`   r`   R   s    LLr   r`   c                       \ rS rSrS rSrg)EventCollectorNoNormalize]   c                     U R                   $ N)r   r   s    r   r    $EventCollectorNoNormalize.get_events^   s    {{r   rW   N)rR   rS   rT   rU   r    rV   rW   r   r   rk   rk   ]   s    r   rk   c                   *    \ rS rSrS rSS jrS rSrg)TestCaseBaseb   c                     [        SS9$ NFconvert_charrefs)r   ro   s    r   get_collectorTestCaseBase.get_collectord   s    u55r   Nc                 P   Uc  U R                  5       nUnU H  nUR                  U5        M     UR                  5         UR                  5       nXb:w  aR  U R	                  S[        U5      -   S-   [        R                  " U5      -   S-   [        R                  " U5      -   5        g g )Nz6received events did not match expected events
Source:
z
Expected:
z
Received:
)rx   feedcloser    re   reprpprintpformat)r   sourceexpected_events	collectorr   sr   s          r   
_run_checkTestCaseBase._run_checkg   s    **,IAKKN ""$$II $&*6l3%&(.(GH && )/v(>? @ %r   c                 6    U R                  X[        SS95        g ru   )r   rY   )r   r   r   s      r   _run_check_extraTestCaseBase._run_check_extrau   s    +UC	Er   rW   rn   )rR   rS   rT   rU   rx   r   r   rV   rW   r   r   rr   rr   b   s    6@Er   rr   c                      \ 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\R"                  " S/ SQ5      S 5       r\R"                  " S/ SQ5      S 5       r\R"                  " S/ SQ5      S 5       r\R"                  " S/ SQ5      S 5       r\R"                  " S/ SQ5      S 5       r\R"                  " S/ SQ5      S 5       r\R"                  " S/ SQ5      S 5       r\R"                  " S/ SQ5      S 5       r\R"                  " S / S!Q5      S" 5       r\R"                  " S / S#Q5      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&S0 r'S1 r(S2 r)S3 r*S4 r+\R"                  " S/ S5Q5      S6 5       r,S7 r-S8 r.\R"                  " S/ S9Q5      S: 5       r/S; r0S< r1\Rd                  " S=5      S> 5       r3S?r4g@)AHTMLParserTestCasez   c                 P    U R                  SS/5        U R                  SS/5        g )Nz<?processing instruction>)rK   zprocessing instructionz<?processing instruction ?>)rK   zprocessing instruction ?r   ro   s    r    test_processing_instruction_only3HTMLParserTestCase.test_processing_instruction_only|   s2    3,6 	 	5.8 	r   c                 Z    U R                  SSSSSS/ 4SSSSSSS	S
S/4SSSSSSS/5        g )Nz
<!DOCTYPE html PUBLIC 'foo'>
<HTML>&entity;&#32;
<!--comment1a
-></foo><bar>&lt;<?pi?></foo<bar
comment1b-->
<Img sRc='Bar' isMAP>sample
text
&#x201C;
<!--comment2a-- --comment2b-->
</Html>
r   
)rC   zDOCTYPE html PUBLIC 'foo'r#   r   )rG   entity)r;   32)r5   z4comment1a
-></foo><bar>&lt;<?pi?></foo<bar
comment1bimg)srcBar)ismapN)r   zsample
text
)r;   x201C)r5   zcomment2a-- --comment2br1   r   r   ro   s    r   test_simple_html#HTMLParserTestCase.test_simple_html   s`      )I9:*#	r   c                 f    U R                  SSS/ 4SS/5        U R                  S/SS/ 4SS/5        g )	Nz<p>&#bad;</p>r#   p)r   z&#bad;r1   r   z<div>&#bad;</div>divr1   r   r   ro   s    r   test_malformatted_charref,HTMLParserTestCase.test_malformatted_charref   sN    b!*
 	 	,-#0
 	r   c                 ,    U R                  SSS/5        g )Nz&entityref foo)rG   rG   )r   z foor   ro   s    r   test_unclosed_entityref*HTMLParserTestCase.test_unclosed_entityref   s    (&+ 	r   c                 <    U R                  SSS/ 4SS/ 4SS/5        g )Nz<a><b></a></b>r#   abr1   r   r1   r   r   ro   s    r   test_bad_nesting#HTMLParserTestCase.test_bad_nesting   s2     	(b!b!	+ 	r   c                 *    U R                  SS/5        g )N#this text & contains & ampersands &)r   r   r   ro   s    r   test_bare_ampersands'HTMLParserTestCase.test_bare_ampersands   s    =;@ 	r   c                 *    U R                  SS/5        g )N.this < text > contains < bare>pointy< brackets)r   r   r   ro   s    r   test_bare_pointy_brackets,HTMLParserTestCase.test_bare_pointy_brackets   s    HFK 	r   c                 `    U R                  SSSS/4/5        U R                  SSSS/4/5        g )N	<a b='<'>r#   r   r   <	<a b='>'>r   >r   ro   s    r   test_starttag_end_boundary-HTMLParserTestCase.test_starttag_end_boundary   s6    :sZL*I)JK:sZL*I)JKr   c                    SSS/4/nU R                  S/U5        U R                  SS/U5        U R                  SS/U5        U R                  S	S
/U5        U R                  SS/U5        U R                  SS/U5        SSS/4/nU R                  S/U5        U R                  SS/U5        U R                  SS/U5        U R                  S	S/U5        U R                  SS/U5        U R                  SS/U5        S/nU R                  SS/U5        U R                  SS/U5        U R                  SS/U5        U R                  SS/U5        U R                  SS /U5        U R                  S!S"/U5        U R                  S#S$/U5        U R                  S%S&/U5        U R                  S'S(/U5        U R                  S)S/U5        U R                  SS/U5        g )*Nr#   r   r   r   <a zb='<'>z<a bz='<'>z<a b=z'<'>z<a b='<z'>z<a b='<'r   r   r   zb='>'>z='>'>z'>'>z<a b='>z<a b='>')r5   abc z
<!--abc-->r   z	!--abc--><!z--abc--><!-z-abc--><!--zabc-->z<!--azbc-->z<!--abzc-->z<!--abcz-->z<!--abc-z->z	<!--abc--r   r   outputs     r   test_buffer_artefacts(HTMLParserTestCase.test_buffer_artefacts   s   sZL12v.)62)62&)62D)62S)62sZL12v.)62)62&)62D)62S)62$%\*F3k*F3z*F3	*F3*F3'*F36*F3E*F3T*F3c*F3r*F3r   c                 T    / SQnU H  nU R                  SU-  SSU-   4/5        M      g )N)
HTMLzOHTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"z[HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"zbhtml PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"zfhtml PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"zYmath PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"zhtml PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"zWsvg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"z'html PUBLIC "-//IETF//DTD HTML 2.0//EN"z,html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"z<!DOCTYPE %s>rC   DOCTYPE r   )r   dtdsdtds      r   test_valid_doctypes&HTMLParserTestCase.test_valid_doctypes   s9    @$ COOOc1$j3&678: r   c                     U R                  SSS/ 4/5        U R                  SSS/ 4S/5        U R                  SSS/ 4SSS	/4S/5        g )
Nz<p/>r,   r   z<p></p>r#   r   z<p><img src='foo' /></p>r   )r   foor   ro   s    r   test_startendtag#HTMLParserTestCase.test_startendtag  sq    C$! 	 		b!$ 	 	2b!EN#345 	r   c                 >    SnU R                  USSSS/4SU4/5        g )Nz <foo:bar   
   one="1"	two=2   >r#   zfoo:bar)one1)two2r\   )r   )r   r   s     r   test_get_starttag_text)HTMLParserTestCase.test_get_starttag_text  s3    4a\<$@Aa "" 	#r   content)z*<!-- not a comment --> &not-an-entity-ref;<not a='start tag'>z<a href="" /> <p> <span></span>zfoo = "</scr" + "ipt>";zfoo = "</SCRIPT" + ">";zfoo = <
/script> z*<!-- document.write("</scr" + "ipt>"); -->z
//<![CDATA[
document.write('<s'+'cript type="text/javascript" src="http://www.example.org/r='+new Date().getTime()+'"><\/s'+'cript>');
//]]>z 
<!-- //
var foo = 3.14;
// -->
u   <!-- ☃ -->zfoo = "</ script>"zfoo = "</scripture>"zfoo = "</script>"u   foo = "</script >"u   foo = "</ſcript>"u   foo = "</scrıpt>"c                 D    SU S3nU R                  USS/ 4SU4S/5        g )Nz<script>z	</script>r#   scriptr   r1   r   r   r   r   r   s      r   test_script_content&HTMLParserTestCase.test_script_content  s9    , wiy)Z26#W-02 	3r   )
z0a::before { content: "<!-- not a comment -->"; }z-a::before { content: "&not-an-entity-ref;"; }z-a::before { content: "<not a='start tag'>"; }u   a::before { content: "☃"; }z#a::before { content: "< /style>"; }z#a::before { content: "</ style>"; }z#a::before { content: "</styled>"; }z#a::before { content: "</style>"; }u$   a::before { content: "</style >"; }u#   a::before { content: "</ſtyle>"; }c                 D    SU S3nU R                  USS/ 4SU4S/5        g )Nz<style>z</style>r#   styler   r1   r   r   r   s      r   test_style_content%HTMLParserTestCase.test_style_content5  s9     gYh'Z"5#W-/1 	2r   )<!-- not a comment -->r   <![CDATA[not a cdata]]><!not a bogus comment></not a bogus comment>   ☃z	< /title>z	</ title>z	</titled>z	</title>u
   </title >u	   </tıtle>c                 D    SU S3nU R                  USS/ 4SU4S/5        g )Nz<title>z</title>r#   titler   r1   r   r   r   r   r   s      r   test_title_content%HTMLParserTestCase.test_title_contentG  s:     7)8,"%W!
 	r   )r   r   r   r   r   r   z< /textarea>z</ textarea>z</textareable>z</textarea>u   </textarea >c                 D    SU S3nU R                  USS/ 4SU4S/5        g )Nz
<textarea>z</textarea>r#   textarear   r1   r   r   r   s      r   test_textarea_content(HTMLParserTestCase.test_textarea_content]  s:     gYk2R(W"!
 	r   r1   )r   SCRIPTzscript zscript
zscript/zscript foo=barzscript foo=">"c                 Z    SnSU SU S3nU R                  USS/ 4SU4S/[        S	S
9S9  g )Nz<!-- not a comment --> &not-an-entity-ref;
                  <a href="" /> </p><p> <span></span></style>
                  '</script' + '>'<ScrIPt></r   r#   r   r   r   Frv   r   r   rk   r   r1   r   r   s       r   test_script_closing_tag*HTMLParserTestCase.test_script_closing_tagr  sV    
& wir&+Z26#W-02 #<U"S 	 	Ur   )r   STYLEzstyle zstyle
zstyle/zstyle foo=barzstyle foo=">"c                 Z    SnSU SU S3nU R                  USS/ 4SU4S/[        S	S
9S9  g )Nz
            b::before { content: "<!-- not a comment -->"; }
            p::before { content: "&not-an-entity-ref;"; }
            a::before { content: "<i>"; }
            a::after { content: "</i>"; }
            z<StyLE>r   r   r#   r   r   r   Frv   r   r   r   s       r   test_style_closing_tag)HTMLParserTestCase.test_style_closing_tag  sV     gYb*Z"5#W-/1 #<U"S 	 	Ur   )r   TITLEztitle ztitle
ztitle/ztitle foo=barztitle foo=">"c                     SnSU SU S3nU R                  USS/ 4SS/[        S	S
9S9  U R                  USS/ 4SSSS/[        SS
9S9  g )N+<!-- not a comment --><i>Egg &amp; Spam</i>z<TitLe>r   r   r#   r   r   z'<!-- not a comment --><i>Egg & Spam</i>r   Trv   r   r   z<!-- not a comment --><i>Egg rG   ampr   z	 Spam</i>Fr   r   s       r   test_title_closing_tag)HTMLParserTestCase.test_title_closing_tag  s     @gYb*Z"5O/1 #<T"R 	 	T 	Z"5E01/	1
 #<U"S 	 	Ur   )r   TEXTAREAz	textarea z	textarea
z	textarea/ztextarea foo=barztextarea foo=">"c                     SnSU SU S3nU R                  USS/ 4SS/[        S	S
9S9  U R                  USS/ 4SSSS/[        SS
9S9  g )Nr  z
<TexTarEa>r   r   r#   r   r	  r   Trv   r   r
  r  r  Fr   r   s       r   test_textarea_closing_tag,HTMLParserTestCase.test_textarea_closing_tag  s     @	F81-ZR8O24 #<T"R 	 	T 	ZR8E012	4
 #<U"S 	 	Ur   ztail,end)r   Fr   Fr   F)z</sF)z</scriptF)z	</script T)z</script foo=barT)z</script foo=">Tc                 j    SnSU U 3nU R                  USS/ 4SU(       a  UOX1-   4/[        SS9S9  g )	Nza = 123r   r#   r   r   Frv   r   r   )r   tailendr   r   s        r   test_eof_in_script%HTMLParserTestCase.test_eof_in_script  sR     wiv&Z26#WHJ";U"S 	 	Ur   )r  r  r  )z</tF)z</titleF)z</title T)z</title foo=barT)z</title foo=">Tc           	          SU 3nU R                  USS/ 4SSU(       a  SOU-   4/[        SS9S	9  U R                  USS/ 4S
SSSU(       a  SOU-   4/[        SS9S	9  g )Nz<TitLe>Egg &amp; Spamr#   r   r   z
Egg & Spamr   Trv   r   )r   zEgg r  z SpamFr   )r   r  r  r   s       r   test_eof_in_title$HTMLParserTestCase.test_eof_in_title  s     $D6*Z"5#\3RD%IJL";T"R 	 	T 	Z"5,0#Wct%DEG #<U"S	 	 	Ur   c                 2    Sn/ SQnU R                  X5        g )Na.  <!-- I'm a valid comment --><!--me too!--><!------><!-----><!----><!---><!--><!----I have many hyphens----><!-- I have a > in the middle --><!-- and I have -- in the middle! --><!--incorrectly-closed-comment--!><!----!><!----!--><!---- >--><!---!>--><!--!>--><!-- <!-- nested --> --><!--<!--><!--<!--!>))r5   z I'm a valid comment )r5   zme too!r5   z--r5   -r5   r   r#  r#  )r5   z--I have many hyphens--)r5   z I have a > in the middle )r5   z and I have -- in the middle! )r5   zincorrectly-closed-commentr#  )r5   z--!)r5   z-- >r5   z-!>)r5   z!>)r5   z <!-- nested )r   z -->r5   r   r%  r   r   r   expecteds      r   test_comments HTMLParserTestCase.test_comments  s    ,
( 	'r   c                 2    Sn/ SQnU R                  X5        g )Nzs<!--[if IE & !(lte IE 8)]>aren't<![endif]--><!--[if IE 8]>condcoms<![endif]--><!--[if lte IE 7]>pretty?<![endif]-->))r5   z%[if IE & !(lte IE 8)]>aren't<![endif])r5   z[if IE 8]>condcoms<![endif])r5   z[if lte IE 7]>pretty?<![endif]r   r&  s      r   test_condcoms HTMLParserTestCase.test_condcoms  s    8C 	'r   c           
         S nU R                  U" 5       R                  5        / SQnSS/ 4SS/nU H'  nU R                  SR                  U5      X1" 5       S9  M)     S	SS/ 4S	SS	/nU H'  nU R                  S
R                  U5      X1" 5       S9  M)     U HQ  nSR	                  U/S-  5      nS	SS/ 4SU4SS	SS/ 4SU4SS	/	nU R                  SR                  XT5      X1" 5       S9  MS     Sn[        S[        U5      5       H"  nU R                  US U SUS U 4/U" 5       S9  M$     U R                  SS/U" 5       S9  g )Nc                      [        5       $ rn   r`   rW   r   r   <lambda>:HTMLParserTestCase.test_convert_charrefs.<locals>.<lambda>      24r   )z&quot;z&#34;z&#x22;z&quotz&#34z&#x22r#   r   )r   za"zr   z<a>a{0}z</a>r   )r   "z{0}<a>{0}</a>{0}X   r   r   r   r   r   z/{1}<script>{0}</script>{1}<style>{0}</style>{1}z&quo &# &#xr   no charrefs here)r   r6  )
assertTruerw   r   formatjoinrangelen)r   r   charrefsr'  r;   textr   xs           r   test_convert_charrefs(HTMLParserTestCase.test_convert_charrefs  s   4		445Jb)?OLGOON11':$	  =   "JR#8!?MCGOO ))/$	  =  
  G88WIaK(D%#Xr2VTN,m#Wb1FD>+]	<H
 OO 44:F44I$	  =   q#d)$AOOD!HRa'9&:&/k  3 % 	*-I,J"++ 	 	/r   c                    S nU R                  U" 5       R                  5        / SQnSS/ SQ4S/nU H'  nU R                  SR                  U5      X1" 5       S9  M)     S	nSS/ S
Q4S/nU R                  SR                  U5      X1" 5       S9  g )Nc                      [        5       $ rn   r/  rW   r   r   r0  NHTMLParserTestCase.test_convert_charrefs_in_attribute_values.<locals>.<lambda>2  r2  r   )z&cent;z&#xa2;z&#xa2z&#162;z&#162r#   r   )r>     ¢r>  u   z¢)r>  u   ¢z)r>  u   z¢zr>  u   ¢ z)r>  u   ¢=zr   zB<a x="{0}" x="z{0}" x="{0}z"    x="z{0}z" x="{0} z" x="{0}=z"></a>r   z&cent)rD  rF  )r>  z&centz)r>  zz&centzrG  )r>  z&cent=z)r7  rw   r   r8  )r   r   r<  r'  r;   s        r   )test_convert_charrefs_in_attribute_values<HTMLParserTestCase.test_convert_charrefs_in_attribute_values0  s    4		445
 DCD $%  GOO D#VG_h)+  O   IJ $% 	 @(ik 	 	Kr   c           
      F    U R                  SSSS/4SSSSSS	/4S
S/5        g )NzF<html <html>te>>xt&a<<bc</a></html>
<img src="URL><//img></html</html>r#   r   )z<htmlN)r   zte>>xt)rG   r   r   r   zbc<)r   Nr   r   r   ro   s    r   test_tolerant_parsing(HTMLParserTestCase.test_tolerant_parsingO  s@     ='/1BC..)'>.*?,	-r   c                    U R                  SS/5        U R                  SS/5        U R                  SS/5        U R                  SS/5        U R                  S	/ 5        U R                  S
S/5        U R                  SS/5        U R                  SS/5        U R                  S/ 5        U R                  SS/5        U R                  SS/5        U R                  SSS/ 4/5        U R                  SS/5        U R                  SS/5        U R                  S/ 5        U R                  S/ 5        U R                  S/ 5        U R                  S/ 5        U R                  S/ 5        U R                  S SS!/ 4/5        U R                  S"SS#/ 4/5        U R                  S$S%S#/ 4/5        U R                  S&SS#/ 4/5        U R                  S'S%S#/ 4/5        U R                  S(S)/5        g )*Nr   rK  <>)r   rO  < >)r   rP  < )r   rQ  z</><$>)r   rR  z</$>)r5   $r   )r   r   z</az</ a>)r5   z az</ az<a<a>r#   a<az</a<a>)r1   rT  r   r#  z<az<a foo='bar'z<a foo='barz
<a foo='>'z	<a foo='>z<a$>za$z<a$b>a$bz<a$b/>r,   z<a$b  >z<a$b  />z</a$b>)r1   rU  r   ro   s    r   test_starttag_junk_chars+HTMLParserTestCase.test_starttag_junk_charsZ  s   m_-~./01~./r"01!1 23~./r""3!45!2 34:ub"9!:;#4"56/0b!+r*b)R(*dB!7 89:ub"9!:;M5"#=">?	Z$;#<=
mUB%?$@A#4"56r   c           
         U R                  SSSS/4/5        SnSS/ SQ4/nU R                  X5        SnSS/ S	Q4S
S/ S	Q4/nU R                  X5        SnS
S/ 4S
S/ 4S
S/ 4S
S/ 4SS/ 4SS/ 4SS/ 4SS/ 4/nU R                  X5        g )Nz<a foo="var"/>r,   r   )r   varzj<img width=902 height=250px src="/sites/default/files/images/homepage/foo.jpg" /*what am I doing here*/ />r   ))width902)height250px)r   z,/sites/default/files/images/homepage/foo.jpg)z*whatN)amN)iN)doingN)zhere*Nz9<a / /foo/ / /=/ / /bar/ / /><a / /foo/ / /=/ / /bar/ / >))r   N)=N)barNr#   zD<meta><meta / ><meta // ><meta / / ><meta/><meta /><meta //><meta//>metar   r&  s      r   test_slashes_in_starttag+HTMLParserTestCase.test_slashes_in_starttagu  s    (M3@P+Q*RS. 5/
  	'/ C!LMIJ
 	'3 $z62&>$z62&>FB'-)DFB'-)D	
 	'r   c                 P    U R                  SS/5        U R                  SS/5        g )Nz</a/>r   z</a foo="var"/>r   ro   s    r   test_slashes_in_endtag)HTMLParserTestCase.test_slashes_in_endtag  s%    /!23)O+<=r   c                 *    U R                  SS/5        g )Nz<!DOCTYPE foo $ >)rC   zDOCTYPE foo $ r   ro   s    r   test_declaration_junk_chars.HTMLParserTestCase.test_declaration_junk_chars  s    +.H-IJr   c                 *    U R                  SS/5        g )Nz"<!spacer type="block" height="25">)r5   zspacer type="block" height="25"r   ro   s    r   test_illegal_declarations,HTMLParserTestCase.test_illegal_declarations  s    <GH	Jr   c                 p    SnSS/ 4SSS/ 4SSS/ 4SSS/ 4SSS/ 4SSS/ 4SS/ 4/nU R                  X5        g )Nzn<br></label</p><br></div end tmAd-leaderBoard><br></<h4><br></li class="unit"><br></li
						</ul><br></><br>r#   br)r1   zlabel<r   )r5   z<h4)r1   lir   r&  s      r   test_invalid_end_tags(HTMLParserTestCase.test_invalid_end_tags  st    Mr*(r*%r*&r*$r*$r*r*#,$ 	'r   c                 <    SnSS/ 4SSS/nU R                  X5        g )Nz(<b>This</b attr=">"> confuses the parserr#   r   )r   Thisr   )r   z confuses the parserr   r&  s      r   test_broken_invalid_end_tag.HTMLParserTestCase.test_broken_invalid_end_tag  s/    9b)$#46 	'r   c                     SnSSS/4SS/ 4SSSS/4S	S
SSS/ 4SSS/ 4SSSS/nU R                  X5        SnSS/ SQ4SS/ 4SSSS/4S	S
/nU R                  X5        g )Nz[<div style=""    ><b>The <a href="some_url">rain</a> <br /> in <span>Spain</span></b></div>r#   r   r   r   r   )r   zThe r   )hrefsome_url)r   rainr   r    r,   rp  )r   z in span)r   Spainr1   r  r   r   z><div style="", foo = "bar" ><b>The <a href="some_url">rain</a>)ry  ,Nr   rb  r   r&  s      r   $test_correct_detection_of_start_tags7HTMLParserTestCase.test_correct_detection_of_start_tags  s    9 0b!345D"%$
  	'O LMb!345
 	'r   c                 d    SS/4SS/4S/ SQ4SSS	/4/nU H  u  p#U R                  X#5        M     g )
Na&)r   r  za&b)r   abza&b )r   r   rG   r   r}  za&b;r  r  r   r   r   r   r'  s       r   test_EOF_in_charref&HTMLParserTestCase.test_EOF_in_charref  sR     N#$^$%GHm%789	
 #NDOOD+ #r   c                     SS/4SS/4SS/4SS/4SS/4S	S/4S
S/4SS/4SS/4SS/4SS/4SS/4SS/4SS/4/nU H  u  p#U R                  X#5        M     g )Nr   r#  z<!---z<!----z<!-----r!  z<!------r   z<!----!z<!---!)r5   z-!z<!---!>r$  z<!--foo)r5   r   z<!--foo-z	<!--foo--z
<!--foo--!z<!--<!--r%  z	<!--<!--!r   r  s       r   test_eof_in_comments'HTMLParserTestCase.test_eof_in_comments  s    o&''(())*++,-)*)*++,-+,-,-.-././0+,-,-.
  #NDOOD+ #r   c                     SS/4SS/4SS/4SS/4S	S
/4SS/4SS/4SS/4SS/4SS/4/
nU H  u  p#U R                  X#5        M     g )Nr   r#  r   r!  z<![)r5   [z	<!DOCTYPE)rC   DOCTYPEz
<!DOCTYPE )rC   r   z<!DOCTYPE html)rC   zDOCTYPE htmlz<!DOCTYPE html )rC   zDOCTYPE html z<!DOCTYPE html PUBLIC)rC   zDOCTYPE html PUBLICz<!DOCTYPE html PUBLIC "foo)rC   zDOCTYPE html PUBLIC "fooz6<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foo)rC   z4DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foor   r  s       r   test_eof_in_declarations+HTMLParserTestCase.test_eof_in_declarations  s    O$%%&'%&'./0012 89:!: ;<$'F&GH),P+QRENOQ
 #NDOOD+ #r   )r   r>  zx]zx]]c                     U R                  SU-   SSU-   4/5        U R                  SU-   SSU-   4/[        SS9S9  U R                  S	U-   S
S/ 4S
SS/4SSU-   4/5        g )Nz	<![CDATA[rO   CDATA[r5   z[CDATA[Tr   r   <svg><text y="100"><![CDATA[r#   r$   r=  y100r   r   )r   r   s     r   test_eof_in_cdata$HTMLParserTestCase.test_eof_in_cdata  s    g-((W*<=>	@g-#Y%89:"04"@ 	 	B 	6@$eR0$f|n=((W*<=?	@r   c                 2    Sn/ SQnU R                  X5        g )NaH  <!ELEMENT br EMPTY><! not really a comment ><! not a comment either --><! -- close enough --><!><!<-- this was an empty comment><!!! another bogus comment !!!><![with square brackets]!><![
multiline
bogusness
]!><![more brackets]-[and a hyphen]!><![cdata[should be uppercase]]><![CDATA [whitespaces are not ignored]]><![CDATA]]>))r5   zELEMENT br EMPTY)r5   z not really a comment )r5   z not a comment either --)r5   z -- close enough --r#  )r5   z<-- this was an empty comment)r5   z!! another bogus comment !!!)r5   z[with square brackets]!)r5   z[
multiline
bogusness
]!)r5   z[more brackets]-[and a hyphen]!)r5   z[cdata[should be uppercase]])r5   z%[CDATA [whitespaces are not ignored]])r5   z[CDATA]]r   r&  s      r   test_bogus_comments&HTMLParserTestCase.test_bogus_comments!  s    
 	'r   c                 n    SnSSSSSSS/4SS	SS
S/4SSSS/ 4SSSSSS
S/4S/nU R                  X5        g )Nz<![if !(IE)]>broken condcom<![endif]><![if ! IE]><link href="favicon.tiff"/><![endif]><![if !IE 6]><img src="firefox.png" /><![endif]><![if !ie 6]><b>foo</b><![endif]><![if (!IE)|(lt IE 9)]><img src="mammoth.bmp" /><![endif]>)r5   z
[if !(IE)])r   zbroken condcom)r5   z[endif])r5   z	[if ! IE]r,   link)rz  zfavicon.tiff)r5   z
[if !IE 6]r   )r   zfirefox.png)r5   z
[if !ie 6]r#   r   )r   r   r   )r5   z[if (!IE)|(lt IE 9)])r   zmammoth.bmpr   r&  s      r   test_broken_condcoms'HTMLParserTestCase.test_broken_condcomsA  s|    M &&"$F%=$>?"%E$:#;<"%b!"/E$:#;<"#
& 	'r   )zjust some plain textr   z&not-an-entity-ref;r   r   z[[I have many brackets]]zI have a > in the middlezI have a ]] in the middlez] ]>z]] >zN
    if (a < b && a > b) {
        printf("[<marquee>How?</marquee>]");
    }
c                     SU S3nSS/ 4SSS/4SSU-   4S	S
/nU R                  X#5        U R                  X#[        SS9S9  g )Nr  z]]></text></svg>r#   r$   r=  r  rO   r  r1   r=  r1   r$   Tr   r   r  )r   r   r   r'  s       r   test_cdata_section_content-HTMLParserTestCase.test_cdata_section_content_  sf    & .gY6FG#,0X/0
 	'.42PQr   c           	      Z    SnSSSS/ 4SSS/4SS	S
SS/	nU R                  X[        SS9S9  g )Nzb<![CDATA[foo<br>bar]]><svg><text y="100"><![CDATA[foo<br>bar]]></text></svg><![CDATA[foo<br>bar]]>)r5   z[CDATA[foo<br)r   zbar]]>r#   r$   r=  r  )rO   zCDATA[foo<br>barr  r  Tr   r   r  r&  s      r   test_cdata_section%HTMLParserTestCase.test_cdata_section}  sT    ) )#,00(

 	.42PQr   c                     [        SS9nUR                  S5        U R                  UR                  5       SSS/ 4SSS	/5        g )
NTrv   zfoo <a>link</a> bar &amp; baz)r   zfoo r#   r   )r   r  r   )r   z
 bar & baz)r   r{   assertEqualr    )r   r   s     r   "test_convert_charrefs_dropped_text5HTMLParserTestCase.test_convert_charrefs_dropped_text  sO      634
C46F46	
r   cpuc                     S nS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        g )Nc                     [         R                  R                  5       nUR                  U 5        UR	                  5         g rn   )r   r   r   r{   r|   )r   r   s     r   checkBHTMLParserTestCase.test_eof_no_quadratic_complexity.<locals>.check  s)    [[++-FKKLLNr   i r   z<a a=z8</a </a </a </a </a </a </a </a </a </a </a </a </a </a zB</a a=</a a=</a a=</a a=</a a=</a a=</a a=</a a=</a a=</a a=</a a=z<!--<!--<!--<!--zx<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!z&<?<?<?<?<?<?<?<?<?<?<?<?<?<?<?<?<?<?<?z-</$</$</$</$</$</$</$</$</$</$</$</$</$</$</$zQ<![CDATA[<![CDATA[<![CDATA[<![CDATA[<![CDATA[<![CDATA[<![CDATA[<![CDATA[<![CDATA[a;  <!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctype<!doctyperW   )r   r  ns      r    test_eof_no_quadratic_complexity3HTMLParserTestCase.test_eof_no_quadratic_complexity  s    	 eaigkkAoma j1ni!mi!mj1no!""#r   rW   N)5rR   rS   rT   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   subTestsr   r   r   r   r   r  r  r  r  r  r(  r+  r?  rH  rL  rV  rd  rg  rj  rm  rr  rv  r  r  r  r  r  r  r  r  r  r  requires_resourcer  rV   rW   r   r   r   r   z   s   @	

L4<:0# i "
 *3+*3 i "
 22 i "
  i "
  h !P Q
UQ
U h !M NUNU h !M NUNU h !V WUWU j 	# 	U	U j 	# 		U		U+(Z(#/JK>	-76(>>KJ(4((B,,(," i!78	@ 9	@(@(< i "  R! RR$

 u%$ &$r   r   c                   z    \ 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S rS rS rS rSrg)AttributesTestCasei  c                    SS/ SQ4/nU R                  SU5        U R                  SSSS/4/5        U R                  SSSS/4/5        U R                  S	SSS/4/5        U R                  S
SSS/4/5        U R                  SSSS/4/5        U R                  SSSS/4/5        U R                  SSSS/4/5        U R                  SSSS/4/5        U R                  SSSS/4/5        g )Nr#   r   ))r   v)cr  )dr  )eNz<a b='v' c="v" d=v e>z<a foo==bar>)r   z=barz<a foo =bar>r  z<a foo	=bar>z<a foo=bar>)zfoorb  u   <a foo =bar>)u   foo rb  z<a foo= bar>z<a foo=	bar>z<a foo=bar>)r   zbaru   <a foo= bar>)r   u    barr   r   s     r   test_attr_syntax#AttributesTestCase.test_attr_syntax  s   sM
N
 	3V<*cO;L)M(NO*cN;K)L(MN:s^<L*M)NO:s=M<N*O)PQ)Z?Q>R,S+TU*cN;K)L(MN:s^<L*M)NO:s=M<N*O)PQ)Z?Q>R,S+TUr   c                     U R                  SSS/ SQ4/5        U R                  SSSSS/4/5        U R                  SSSS	S
/4/5        U R                  SSSSS/4/5        U R                  SSSS/4/5        U R                  SSSS/4/5        g )Nz'<a b='xxx
	xxx' c="yyy	
yyy" d='	xyz
'>r#   r   ))r   zxxx
	xxx)r  zyyy	
yyy)r  z	xyz
z<a b='' c="">)r   r   )r  r   z<a b=	x c=
y>)r   r>  )r  r  u   <a b= c= >)r   )r      z<e a=rgb(1,2,3)>r  )r   z
rgb(1,2,3)z<a href=mailto:xyz@example.com>)rz  zmailto:xyz@example.comr   ro   s    r   test_attr_values#AttributesTestCase.test_attr_values  s    K$c ,> ? @	A 	+$cIy+ABC	E)$cJ
+CDE	G)$cK+GHI	K 	*$c,?+@AB	D 	-# BCDE	Gr   c                     U R                  SSSSS/4/5        U R                  SSSSS	/4/5        U R                  S
SSSS	/4/5        g )Nu!   <img src=/foo/bar.png alt=中文>r#   r   )r   z/foo/bar.png)altu   中文u+   <a title='テスト' href='テスト.html'>r   )r   u	   テスト)rz  u   テスト.htmlu+   <a title="テスト" href="テスト.html">r   ro   s    r   test_attr_nonascii%AttributesTestCase.test_attr_nonascii  s    5%"9"9"; < =	> 	K# ? C E F G	H 	K# ? C E F G	Hr   c                 2    U R                  SSSS/4/5        g )Nz!<a b='&amp;&gt;&lt;&quot;&apos;'>r#   r   )r   z&><"'r   ro   s    r   test_attr_entity_replacement/AttributesTestCase.test_attr_entity_replacement  s!    /#012	4r   c                 4    U R                  SSS/ SQ4/5        g )Nz<a a.b='v' c:d=v e-f=v>r#   r   ))za.br  )zc:dr  )ze-fr  r   ro   s    r   test_attr_funky_names(AttributesTestCase.test_attr_funky_names  s     %#IJK	Mr   c                 2    U R                  SSSS/4/5        g )Nz0<html foo='&euro;&amp;&#97;&#x61;&unsupported;'>r#   r   )r   u   €&aa&unsupported;r   ro   s    r   test_entityrefs_in_attributes0AttributesTestCase.test_entityrefs_in_attributes  s#    >&#D"EFG	Ir   c                 F    U R                  SSSS/4SSS/4SSS/4/5        g )	Nz<a $><b $=%><c \=/>r#   r   )rS  Nr   )rS  %r  )\/r   ro   s    r   test_attr_funky_names2)AttributesTestCase.test_attr_funky_names2  s:    "#}-#
|,#}-/	0r   c                     S HQ  nU R                  SU-  SSS/4/5        U R                  SU-  SSS/4/5        U R                  SU-  SSS/4/5        MS     g )N)&z&amp;z&#38;z&#x26;z<a href="%s">r#   r   )rz  r  z<a href='%s'>z<a href=%s>r   )r   r   s     r    test_entities_in_attribute_value3AttributesTestCase.test_entities_in_attribute_value  su    7FOOOf4(#?@BOOOf4(#?@BOOMF2(#?@B 8r   c                 f    SnSSS/4SSSSS/4SSSSS	/4S
SSSS/4SS/nU R                  X5        g )Nz<a href=test'style='color:red;bad1'>test - bad1</a><a href=test'+style='color:red;ba2'>test - bad2</a><a href=test'&nbsp;style='color:red;bad3'>test - bad3</a><a href = test'&nbsp;style='color:red;bad4'  >test - bad4</a>r#   r   )rz  ztest'style='color:red;bad1')r   ztest - bad1r   )rz  ztest'+style='color:red;ba2')r   ztest - bad2)rz  u   test' style='color:red;bad3')r   ztest - bad3)rz  u   test' style='color:red;bad4')r   ztest - bad4r   r&  s      r   test_malformed_attributes,AttributesTestCase.test_malformed_attributes  st    L 	 FGH#FGH#JKL#JKL#
 	'r   c                 x    U R                  SSS/ 4SSSS/4S/5        U R                  S	SS/ 4SSSS
/4S/5        g )Nz<x><y z=""o"" /></x>r#   r>  r,   r  )zr   )zo""N)r1   r>  z<x><y z="""" /></x>)z""Nr   ro   s    r   "test_malformed_adjacent_attributes5AttributesTestCase.test_malformed_adjacent_attributes  sd    .$c2.*C)]1KL+-	. 	-$c2.*C)\1JK+-	.r   c                 d    U R                  SSSSS/4/5        U R                  SSSSS/4/5        g )	Nz<a width="100%"cellspacing=0>r#   r   rZ  z100%cellspacing0z<a id="foo"class="bar">)idr   classrb  r   ro   s    r   test_adjacent_attributes+AttributesTestCase.test_adjacent_attributes(  sT    7$c,.ABD E	F 	1$c(/:< =	>r   c                 2    U R                  SSSS/4/5        g )Nz<a v=>r#   r   )r  r   r   ro   s    r   test_missing_attribute_value/AttributesTestCase.test_missing_attribute_value1  s    $cI;78	:r   c                 2    U R                  SSSS/4/5        g )Nz-<a href=javascript:popup('/popup/help.html')>r#   r   )rz  z$javascript:popup('/popup/help.html')r   ro   s    r   test_javascript_attribute_value2AttributesTestCase.test_javascript_attribute_value5  s)    G$cKLN O	Pr   c                 6    U R                  SSSS/4SS/5        g )Nz-<a href='http://www.example.org/">;'>spam</a>r#   r   )rz  zhttp://www.example.org/">;)r   spamr   r   ro   s    r   test_end_tag_in_attribute_value2AttributesTestCase.test_end_tag_in_attribute_value:  s,    H$cBCE)?<	=r   c                     SnSS/ 4SSSS/4SS/ SQ4SS	/ 4SS
S/4SSS/4SSSS/4SSS/4SSSSSSS/4SSS/4SSSS/nU R                  X5        g )Nz<html><body bgcolor=d0ca90 text='181008'><table cellspacing=0 cellpadding=1 width=100% ><tr><td align=left><font size=-1>- <a href=/rabota/><span class=en> software-and-i</span></a>- <a href='/1/'><span class=en> library</span></a></table>r#   r   body)bgcolord0ca90)r=  181008table)r  )cellpaddingr   r  trtd)alignleftfont)sizez-1)r   z- r   )rz  z/rabota/r  )r  en)r   z software-and-ir  r   )rz  z/1/)r   z library)r1   r  r   r&  s      r   test_with_unquoted_attributes0AttributesTestCase.test_with_unquoted_attributesA  s    M $"79K!LMOQr" 123.!12Z/C.DE/!235PZ.?@/!235I1D
 	'r   c                     SnSSS/4SSSS/4SSSS/4SS/ S	Q4SSSS
/4SSSS/4SSSS/4SSSS/4SSSS/4/	nU R                  X5        g )Nz<div class=bar,baz=asd><div class="bar",baz="asd"><div class=bar, baz=asd,><div class="bar", baz="asd",><div class="bar",><div class=,bar baz=,asd><div class=,"bar" baz=,"asd"><div ,class=bar ,baz=asd><div class,="bar" baz,="asd">r#   r   )r  zbar,baz=asdr  )z,bazasd)r  zbar,)bazzasd,)r  r  )r  r  r  r  )r  z,bar)r  z,asd)r  z,"bar")r  z,"asd")z,classrb  )zclass,rb  )zbaz,r  r   r&  s      r   test_comma_between_attributes0AttributesTestCase.test_comma_between_attributesY  s    0 !9 ;<!1? CD!2O DE !> ?!1; ?@!2O DE!46G HI!2O DE!2O DE
 	'r   c                 2    U R                  SSSS/4/5        g )Nz<form action=bogus|&#()value>r#   form)actionzbogus|&#()valuer   ro   s    r   -test_weird_chars_in_unquoted_attribute_values@AttributesTestCase.test_weird_chars_in_unquoted_attribute_valuesu  s)    7'!> ?A:B 	Cr   rW   N)rR   rS   rT   rU   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rV   rW   r   r   r  r    s_    VG&H4
M
I0B(0	.>:P
=(0(8Cr   r  c                   F    \ rS rSr\" S5      \" S5      S 5       5       rSrg)TestInheritancei{  z_markupbase.ParserBase.__init__z_markupbase.ParserBase.resetc                     [        S5       n[        5         UR                  5         UR                  5         S S S 5        g ! , (       d  f       g = f)Nz_markupbase.ParserBase)r   r   assert_called_once)r   super_reset_methodsuper_init_methodparser_bases       r   test_base_class_methods_called.TestInheritance.test_base_class_methods_called}  s9     +,002113 -,,s   +A  
ArW   N)rR   rS   rT   rU   r   r  rV   rW   r   r   r  r  {  s(    
,-
)*4 + .4r   r  __main__)html.parserr   r~   unittestunittest.mockr   testr   r   r   r   rY   r`   rk   TestCaserr   r   r  r  rR   mainrW   r   r   <module>r'     s        =,T[[++ =,@A. AL^ L 
E8$$ E0s$ s$lHC HCV4h'' 4 zMMO r   