HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_htmlparser.cpython-37.opt-2.pyc
B

��g��@s�ddlZddlZddlZGdd�dejj�ZGdd�de�ZGdd�de�ZGdd	�d	ej	�Z
Gd
d�de
�ZGdd
�d
e
�Ze
dkr�e��dS)�Nc@sleZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�EventCollectorcOs*g|_|jj|_tjjj|f|�|�dS)N)�events�append�html�parser�
HTMLParser�__init__)�self�args�kw�r�0/usr/local/lib/python3.7/test/test_htmlparser.pyr
s
zEventCollector.__init__cCsng}d}xZ|jD]P}|d}||kr0dkrRnnd|dd|df|d<n
|�|�|}qW||_|S)Nr�data����)rr)r	�LZprevtypeZevent�typerrr
�
get_eventss
zEventCollector.get_eventscCs|�d||f�dS)N�starttag)r)r	�tag�attrsrrr
�handle_starttag szEventCollector.handle_starttagcCs|�d||f�dS)N�startendtag)r)r	rrrrr
�handle_startendtag#sz!EventCollector.handle_startendtagcCs|�d|f�dS)N�endtag)r)r	rrrr
�
handle_endtag&szEventCollector.handle_endtagcCs|�d|f�dS)N�comment)r)r	rrrr
�handle_comment+szEventCollector.handle_commentcCs|�d|f�dS)N�charref)r)r	rrrr
�handle_charref.szEventCollector.handle_charrefcCs|�d|f�dS)Nr)r)r	rrrr
�handle_data1szEventCollector.handle_datacCs|�d|f�dS)N�decl)r)r	rrrr
�handle_decl4szEventCollector.handle_declcCs|�d|f�dS)N�	entityref)r)r	rrrr
�handle_entityref7szEventCollector.handle_entityrefcCs|�d|f�dS)N�pi)r)r	rrrr
�	handle_pi:szEventCollector.handle_picCs|�d|f�dS)Nzunknown decl)r)r	r!rrr
�unknown_decl=szEventCollector.unknown_declN)�__name__�
__module__�__qualname__rrrrrrrr r"r$r&r'rrrr
rsrc@seZdZdd�ZdS)�EventCollectorExtracCs$t�|||�|�d|��f�dS)N�
starttag_text)rrrZget_starttag_text)r	rrrrr
rCsz#EventCollectorExtra.handle_starttagN)r(r)r*rrrrr
r+Asr+c@seZdZdd�Zdd�ZdS)�EventCollectorCharrefscCs|�d�dS)Nz6This should never be called with convert_charrefs=True)�fail)r	rrrr
rJsz%EventCollectorCharrefs.handle_charrefcCs|�d�dS)Nz6This should never be called with convert_charrefs=True)r.)r	rrrr
r$Msz'EventCollectorCharrefs.handle_entityrefN)r(r)r*rr$rrrr
r-Hsr-c@s&eZdZdd�Zddd�Zdd�ZdS)	�TestCaseBasecCs
tdd�S)NF)�convert_charrefs)r)r	rrr
�
get_collectorSszTestCaseBase.get_collectorNcCsv|dkr|��}|}x|D]}|�|�qW|��|��}||krr|�dt|�dt�|�dt�|��dS)Nz6received events did not match expected events
Source:
z
Expected:
z
Received:
)r1�feed�closerr.�repr�pprintZpformat)r	�sourceZexpected_events�	collectorr�srrrr
�
_run_checkVs
zTestCaseBase._run_checkcCs|�||tdd��dS)NF)r0)r9r+)r	r6rrrr
�_run_check_extradszTestCaseBase._run_check_extra)N)r(r)r*r1r9r:rrrr
r/Qs
r/c@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCS)D�HTMLParserTestCasecCs |�ddg�|�ddg�dS)Nz<?processing instruction>)r%zprocessing instructionz<?processing instruction ?>)r%zprocessing instruction ?)r9)r	rrr
� test_processing_instruction_onlyksz3HTMLParserTestCase.test_processing_instruction_onlycCsB|�ddddddgfddddddd	d
dgfdd
dddddg�dS)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�
)r!zDOCTYPE html PUBLIC 'foo'rr)r#�entity)rZ32)rz4comment1a
-></foo><bar>&lt;<?pi?></foo<bar
comment1b�img)�srcZBar)ZismapN)rzsample
text
)rZx201C)rzcomment2a-- --comment2b)rr)r9)r	rrr
�test_simple_htmlss&z#HTMLParserTestCase.test_simple_htmlcCs6|�dddgfddg�|�dgddgfddg�dS)	Nz
<p>&#bad;</p>r�p)rz&#bad;)rrBz<div>&#bad;</div>�div)rrC)r9)r	rrr
�test_malformatted_charref�sz,HTMLParserTestCase.test_malformatted_charrefcCs|�dddg�dS)Nz&entityref foo)r#r#)rz foo)r9)r	rrr
�test_unclosed_entityref�sz*HTMLParserTestCase.test_unclosed_entityrefcCs$|�dddgfddgfddg�dS)Nz<a><b></a></b>r�a�b)rrF)rrG)r9)r	rrr
�test_bad_nesting�s
z#HTMLParserTestCase.test_bad_nestingcCs|�ddg�dS)Nz#this text & contains & ampersands &)rz#this text & contains & ampersands &)r9)r	rrr
�test_bare_ampersands�sz'HTMLParserTestCase.test_bare_ampersandscCs|�ddg�dS)Nz.this < text > contains < bare>pointy< brackets)rz.this < text > contains < bare>pointy< brackets)r9)r	rrr
�test_bare_pointy_brackets�sz,HTMLParserTestCase.test_bare_pointy_bracketscCs0|�ddddgfg�|�ddddgfg�dS)Nz	<a b='<'>rrF)rG�<z	<a b='>'>)rG�>)r9)r	rrr
�test_starttag_end_boundary�sz-HTMLParserTestCase.test_starttag_end_boundarycCs�dddgfg}|�dg|�|�ddg|�|�ddg|�|�d	d
g|�|�dd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)*NrrF)rGrKz	<a b='<'>z<a zb='<'>z<a bz='<'>z<a b=z'<'>z<a b='<z'>z<a b='<'rL)rGrLz	<a b='>'>zb='>'>z='>'>z'>'>z<a b='>z<a b='>')r�abc�z
<!--abc-->rKz	!--abc-->z<!z--abc-->z<!-z-abc-->z<!--zabc-->z<!--azbc-->z<!--abzc-->z<!--abcz-->z<!--abc-z->z	<!--abc--)r9)r	�outputrrr
�test_buffer_artefacts�s4z(HTMLParserTestCase.test_buffer_artefactsc
CsDddddddddd	d
g
}x&|D]}|�d|dd
|fg�qWdS)NZHTMLzOHTML 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"z�html 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>r!zDOCTYPE )r9)r	ZdtdsZdtdrrr
�test_valid_doctypes�s

z&HTMLParserTestCase.test_valid_doctypescCsN|�dddgfg�|�dddgfdg�|�dddgfddd	gfdg�dS)
Nz<p/>rrBz<p></p>r)rrBz<p><img src='foo' /></p>r?)r@�foo)r9)r	rrr
�test_startendtag�s
z#HTMLParserTestCase.test_startendtagcCs&d}|�|ddddgfd|fg�dS)Nz <foo:bar   
   one="1"	two=2   >rzfoo:bar)Zone�1)Ztwo�2r,)r:)r	r8rrr
�test_get_starttag_textsz)HTMLParserTestCase.test_get_starttag_textcCs�ddddddddd	d
dg}dd
ddddg}xP|D]H}xB|D]:}|��}dj||d�}|�|d|gfd|fd|fg�q:Wq0WdS)Nz*<!-- not a comment --> &not-an-entity-ref;z<not a='start tag'>z<a href="" /> <p> <span></span>zfoo = "</scr" + "ipt>";zfoo = "</SCRIPT" + ">";zfoo = <
/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;
// -->
zfoo = "</sty" + "le>";u<!-- ☃ -->�script�styleZSCRIPTZSTYLEZScriptZStylez <{element}>{content}</{element}>)�element�contentrrr)�lower�formatr9)r	�contents�elementsr[rZ�
element_lowerr8rrr
�test_cdata_content	s(

z%HTMLParserTestCase.test_cdata_contentcCsjGdd�dt�}d}xPdD]H}|����}dj||d�}|j|d|gfd|fd	|fg|d
d�d�qWdS)
Nc@seZdZdd�ZdS)zBHTMLParserTestCase.test_cdata_with_closing_tags.<locals>.CollectorcSs|jS)N)r)r	rrr
r.szMHTMLParserTestCase.test_cdata_with_closing_tags.<locals>.Collector.get_eventsN)r(r)r*rrrrr
�	Collector-srbz�<!-- not a comment --> &not-an-entity-ref;
                  <a href="" /> </p><p> <span></span></style>
                  '</script' + '>')z scriptzscript z script z
scriptzscript
z
script
z<script>{content}</{element}>)rZr[rrrF)r0)r7)rr\�stripr]r9)r	rbr[rZr`r8rrr
�test_cdata_with_closing_tags(s
z/HTMLParserTestCase.test_cdata_with_closing_tagscCs&d}dddddddg}|�||�dS)	Nz�<!-- I'm a valid comment --><!--me too!--><!------><!----><!----I have many hyphens----><!-- I have a > in the middle --><!-- and I have -- in the middle! -->)rz I'm a valid comment )rzme too!)rz--)rrO)rz--I have many hyphens--)rz I have a > in the middle )rz and I have -- in the middle! )r9)r	r�expectedrrr
�
test_comments>sz HTMLParserTestCase.test_commentscCsd}dddg}|�||�dS)Nzs<!--[if IE & !(lte IE 8)]>aren't<![endif]--><!--[if IE 8]>condcoms<![endif]--><!--[if lte IE 7]>pretty?<![endif]-->)rz%[if IE & !(lte IE 8)]>aren't<![endif])rzf IE 8]>condcoms<![endif])rz[if lte IE 7]>pretty?<![endif])r9)r	rrerrr
�
test_condcomsOs
z HTMLParserTestCase.test_condcomsc
Cs^dd�}|�|�j�ddddddg}d	d
dgfdd
g}x$|D]}|jd�|�||�d�q>Wdd	d
dddgfdd
dg}x$|D]}|jd�|�||�d�q~Wx`|D]X}d�|gd�}dd	dgfd|fddd	dgfd|fddg	}|jd�||�||�d�q�Wd}x@tdt|��D].}|j|d|�d|d|�fg|�d��qW|jdd g|�d�dS)!NcSst�S)N)r-rrrr
�<lambda>Z�z:HTMLParserTestCase.test_convert_charrefs.<locals>.<lambda>z&quot;z&#34;z&#x22;z&quotz&#34z&#x22rrF)�hrefzfoo"zar)rza"z)rrFz<a href="foo{0}zar">a{0}z</a>)r7)r�")�xrk)�yz"X)�zzX"z*{0}<a x="{0}" y="{0}X" z="X{0}">{0}</a>{0}�X�rXr)rrXrY)rrYz/{1}<script>{0}</script>{1}<style>{0}</style>{1}z&quo &# &#xrzno charrefs here)rzno charrefs here)Z
assertTruer0r9r]�join�range�len)r	r7Zcharrefsrer�textrrlrrr
�test_convert_charrefsXs>





z(HTMLParserTestCase.test_convert_charrefscCs2|�ddddgfdddddd	gfd
ddd
g	�dS)NzF<html <html>te>>xt&a<<bc</a></html>
<img src="URL><//img></html</html>rr)z<htmlN)rzte>>xt)r#rF)rrKzbc<)rFN)rr)rz
<img src="URL>)rz/img)rzhtml<)r9)r	rrr
�test_tolerant_parsing�s

z(HTMLParserTestCase.test_tolerant_parsingcCs|�dg�|�ddg�|�ddg�|�ddg�|�dd	d
gfg�|�ddg�|�d
dg�|�ddg�|�ddg�|�ddg�|�ddg�|�ddg�|�dd	dgfg�|�dd	dgfg�|�dddgfg�|�dd	dgfg�|�d ddgfg�dS)!Nz</>z</$>)r�$z</)rz</z</a)rz</az<a<a>rza<az</a<a>)rza<az<!)rz<!z<a)rz<az<a foo='bar')rz<a foo='bar'z<a foo='bar)rz<a foo='barz
<a foo='>')rz
<a foo='>'z	<a foo='>)rz	<a foo='>z<a$>za$z<a$b>za$bz<a$b/>rz<a$b  >z<a$b  />)r9)r	rrr
�test_starttag_junk_chars�s"z+HTMLParserTestCase.test_starttag_junk_charsc
Cs�|�ddddgfg�d}ddddd	d
ddd
dgfg}|�||�d}dddddgfdddddgfg}|�||�d}ddgfddgfddgfddgfddgfddgfddgfddgfg}|�||�dS)Nz<a foo="var"/>rrF)rS�varzj<img width=902 height=250px src="/sites/default/files/images/homepage/foo.jpg" /*what am I doing here*/ />r?)�widthZ902)ZheightZ250px)r@z,/sites/default/files/images/homepage/foo.jpg)z*whatN)�amN)�iN)ZdoingN)zhere*Nz9<a / /foo/ / /=/ / /bar/ / /><a / /foo/ / /=/ / /bar/ / >)rSN)�=N)�barNrzD<meta><meta / ><meta // ><meta / / ><meta/><meta /><meta //><meta//>�meta)r9)r	rrerrr
�test_slashes_in_starttag�s$z+HTMLParserTestCase.test_slashes_in_starttagcCs|�ddg�dS)Nz<!DOCTYPE foo $ >)r!zDOCTYPE foo $ )r9)r	rrr
�test_declaration_junk_chars�sz.HTMLParserTestCase.test_declaration_junk_charscCs|�ddg�dS)Nz"<!spacer type="block" height="25">)rzspacer type="block" height="25")r9)r	rrr
�test_illegal_declarations�sz,HTMLParserTestCase.test_illegal_declarationscCs�d}ddgfddddgfdddd	d
gfddgfddd
gfdddgfddddgfdddgfdddddddgfdddgfddddg}|�||�dS)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>rrZbody)ZbgcolorZd0ca90)rtZ181008�table)�cellspacing�0)ZcellpaddingrU)rzz100%�trZtd)Zalign�leftZfont)�sizez-1)rz- rF)rjz/rabota/�span)�class�en)rz software-and-i)rr�)rrF)rjz/1/)rz library)rr�)r9)r	rrerrr
�test_with_unquoted_attributes�s



z0HTMLParserTestCase.test_with_unquoted_attributescCs|�ddddddgfg�dS)Nz7<form action="/xxx.php?a=1&amp;b=2&amp", method="post">r�form)�actionz/xxx.php?a=1&b=2&)�,N)�methodZpost)r9)r	rrr
�test_comma_between_attributes�sz0HTMLParserTestCase.test_comma_between_attributescCs|�ddddgfg�dS)Nz<form action=bogus|&#()value>rr�)r�zbogus|&#()value)r9)r	rrr
�-test_weird_chars_in_unquoted_attribute_values�sz@HTMLParserTestCase.test_weird_chars_in_unquoted_attribute_valuescCsZd}ddgfdddgfdddgfdddgfdddgfdddgfddgfg}|�||�dS)Nzn<br></label</p><br></div end tmAd-leaderBoard><br></<h4><br></li class="unit"><br></li
						</ul><br></><br>r�br)rzlabel<)rrC)rz<h4)rZli)r9)r	rrerrr
�test_invalid_end_tags�sz(HTMLParserTestCase.test_invalid_end_tagscCs&d}ddgfdddg}|�||�dS)Nz(<b>This</b attr=">"> confuses the parserrrG)rZThis)rrG)rz"> confuses the parser)r9)r	rrerrr
�test_broken_invalid_end_tagsz.HTMLParserTestCase.test_broken_invalid_end_tagcCs�d}dddgfddgfddddgfd	d
ddd
gfdddgfddddg}|�||�d}dddddgfddgfddddgfd	d
g}|�||�dS)Nz[<div style=""    ><b>The <a href="some_url">rain</a> <br /> in <span>Spain</span></b></div>rrC)rYrOrG)rzThe rF)rjZsome_url)rZrain)rrF)r� rr�)rz in r�)rZSpain)rr�)rrG)rrCz><div style="", foo = "bar" ><b>The <a href="some_url">rain</a>)r�N)rSr~)r9)r	rrerrr
�$test_correct_detection_of_start_tagss0


z7HTMLParserTestCase.test_correct_detection_of_start_tagscCsLddgfddgfddddgfd	ddgfg}x|D]\}}|�||�q0WdS)
Nza&)rza&za&b)rZabza&b )rrF)r#rG)rr�za&b;)r9)r	rrrerrr
�test_EOF_in_charref2sz&HTMLParserTestCase.test_EOF_in_charrefc	CsHddlm}|��}|�t�� d}|�|�|�||��WdQRXdS)Nr)�unescapez%&quot;&#34;&#x22;&quot&#34&#x22&#bad;)rr�r1ZassertWarns�DeprecationWarning�assertEqual)r	r�rBr8rrr
�test_unescape_method@s
z'HTMLParserTestCase.test_unescape_methodcCs$d}ddddddg}|�||�dS)Nz�<! not really a comment ><! not a comment either --><! -- close enough --><!><!<-- this was an empty comment><!!! another bogus comment !!!>)rz not really a comment )rz not a comment either --)rz -- close enough --)rrO)rz<-- this was an empty comment)rz!! another bogus comment !!!)r9)r	rrerrr
�test_broken_commentsGsz'HTMLParserTestCase.test_broken_commentscCsXd}dddddddgfdd	dd
dgfddd
dgfdddddd
dgfdg}|�||�dS)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]>)zunknown declzif !(IE))rzbroken condcom)zunknown declZendif)zunknown declzif ! IEr�link)rjzfavicon.tiff)zunknown declzif !IE 6r?)r@zfirefox.png)zunknown declzif !ie 6rrG)rrS)rrG)zunknown declzif (!IE)|(lt IE 9))r@zmammoth.bmp)r9)r	rrerrr
�test_broken_condcomsWs&


z'HTMLParserTestCase.test_broken_condcomscCs8tdd�}|�d�|�|��dddgfddd	g�dS)
NT)r0zfoo <a>link</a> bar &amp; baz)rzfoo rrF)rr�)rrF)rz
 bar & baz)rr2r�r)r	rrrr
�"test_convert_charrefs_dropped_textxs

z5HTMLParserTestCase.test_convert_charrefs_dropped_textN)$r(r)r*r<rArDrErHrIrJrMrQrRrTrWrardrfrgrurvrxr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
r;isB 
	)
!!r;c@s|eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�AttributesTestCasecCsHddddddgfg}|�d|�|�d|�|�d	|�|�d
|�dS)NrrF)rG�v)�cr�)�dr�)�eNz<a b='v' c="v" d=v e>z<a  b = 'v' c = "v" d = v e>z<a
b
=
'v'
c
=
"v"
d
=
v
e>z<a	b	=	'v'	c	=	"v"	d	=	v	e>)r9)r	rPrrr
�test_attr_syntax�s
z#AttributesTestCase.test_attr_syntaxcCsb|�ddddddgfg�|�ddddd	gfg�|�d
dddgfg�|�d
dddgfg�dS)Nz'<a b='xxx
	xxx' c="yyy	
yyy" d='	xyz
'>rrF)rGzxxx
	xxx)r�zyyy	
yyy)r�z	xyz
z
<a b='' c="">)rGrO)r�rOz<e a=rgb(1,2,3)>r�)rFz
rgb(1,2,3)z<a href=mailto:xyz@example.com>)rjzmailto:xyz@example.com)r9)r	rrr
�test_attr_values�sz#AttributesTestCase.test_attr_valuescCsL|�dddddgfg�|�ddddd	gfg�|�d
dddd	gfg�dS)Nu!<img src=/foo/bar.png alt=中文>rr?)r@z/foo/bar.png)Zaltu中文u+<a title='テスト' href='テスト.html'>rF)�titleu	テスト)rjuテスト.htmlu+<a title="テスト" href="テスト.html">)r9)r	rrr
�test_attr_nonascii�sz%AttributesTestCase.test_attr_nonasciicCs|�ddddgfg�dS)Nz!<a b='&amp;&gt;&lt;&quot;&apos;'>rrF)rGz&><"')r9)r	rrr
�test_attr_entity_replacement�sz/AttributesTestCase.test_attr_entity_replacementcCs|�ddddddgfg�dS)Nz<a a.b='v' c:d=v e-f=v>rrF)za.br�)zc:dr�)ze-fr�)r9)r	rrr
�test_attr_funky_names�sz(AttributesTestCase.test_attr_funky_namescCs|�ddddgfg�dS)Nz0<html foo='&euro;&amp;&#97;&#x61;&unsupported;'>rr)rSu€&aa&unsupported;)r9)r	rrr
�test_entityrefs_in_attributes�sz0AttributesTestCase.test_entityrefs_in_attributescCs.|�ddddgfdddgfdddgfg�dS)	Nz<a $><b $=%><c \=/>rrF)rwNrG)rw�%r�)�\�/)r9)r	rrr
�test_attr_funky_names2�s


z)AttributesTestCase.test_attr_funky_names2cCs`xZdD]R}|�d|dddgfg�|�d|dddgfg�|�d|dddgfg�qWdS)N)�&z&amp;z&#38;z&#x26;z
<a href="%s">rrF)rjr�z
<a href='%s'>z<a href=%s>)r9)r	r>rrr
� test_entities_in_attribute_value�s



z3AttributesTestCase.test_entities_in_attribute_valuecCsPd}dddgfdddddgfddddd	gfd
ddddgfddg}|�||�dS)
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>rrF)rjztest'style='color:red;bad1')rztest - bad1)rrF)rjztest'+style='color:red;ba2')rztest - bad2)rjutest' style='color:red;bad3')rztest - bad3)rjutest' style='color:red;bad4')rztest - bad4)r9)r	rrerrr
�test_malformed_attributes�s



z,AttributesTestCase.test_malformed_attributescCsH|�dddgfddddgfdg�|�d	ddgfdddd
gfdg�dS)Nz<x><y z=""o"" /></x>rrlrrm)rnrO)zo""N)rrlz<x><y z="""" /></x>)z""N)r9)r	rrr
�"test_malformed_adjacent_attributes�sz5AttributesTestCase.test_malformed_adjacent_attributescCs4|�dddddgfg�|�dddddgfg�dS)	Nz<a width="100%"cellspacing=0>rrF)rzz100%)r�r�z<a id="foo"class="bar">)�idrS)r�r~)r9)r	rrr
�test_adjacent_attributes�sz+AttributesTestCase.test_adjacent_attributescCs|�ddddgfg�dS)Nz<a v=>rrF)r�rO)r9)r	rrr
�test_missing_attribute_value�sz/AttributesTestCase.test_missing_attribute_valuecCs|�ddddgfg�dS)Nz-<a href=javascript:popup('/popup/help.html')>rrF)rjz$javascript:popup('/popup/help.html'))r9)r	rrr
�test_javascript_attribute_value�sz2AttributesTestCase.test_javascript_attribute_valuecCs|�ddddgfddg�dS)Nz-<a href='http://www.example.org/">;'>spam</a>rrF)rjzhttp://www.example.org/">;)rZspam)rrF)r9)r	rrr
�test_end_tag_in_attribute_valuesz2AttributesTestCase.test_end_tag_in_attribute_valueN)r(r)r*r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
r��s	
	r��__main__)Zhtml.parserrr5Zunittestrrrr+r-ZTestCaser/r;r�r(�mainrrrr
�<module>s9