Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_htmlparser.cpython-311.opt-1.pyc
�

�Ke�����dZddlZddlZddlZGd�dejj��ZGd�de��ZGd�de��Z	Gd	�d
ej
��ZGd�de��ZGd
�de��Z
edkrej��dSdS)zTests for HTMLParser.py.�Nc�V�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
S)�EventCollectorc�t�g|_|jj|_tjjj|g|�Ri|��dS�N)�events�append�html�parser�
HTMLParser�__init__)�self�args�kws   �>/usr/local/apps/python3/lib/python3.11/test/test_htmlparser.pyrzEventCollector.__init__
sA������k�(������'��:�t�:�:�:�r�:�:�:�:�:�c���g}d}|jD]N}|d}||cxkrdkr nnd|dd|dzf|d<n|�|��|}�O||_|S)Nr�data����)rr)r
�L�prevtype�event�types     r�
get_eventszEventCollector.get_eventss���
�����[�	�	�E���8�D��x�)�)�)�)�6�)�)�)�)�)���2��q��E�!�H�!4�5��"�����������H�H�����rc�6�|�d||f��dS)N�starttag�r�r
�tag�attrss   r�handle_starttagzEventCollector.handle_starttag s!�����Z��e�,�-�-�-�-�-rc�6�|�d||f��dS)N�startendtagrrs   r�handle_startendtagz!EventCollector.handle_startendtag#s!�����]�C��/�0�0�0�0�0rc�4�|�d|f��dS)N�endtagr)r
rs  r�
handle_endtagzEventCollector.handle_endtag&s�����X�s�O�$�$�$�$�$rc�4�|�d|f��dS)N�commentr�r
rs  r�handle_commentzEventCollector.handle_comment+������Y��%�&�&�&�&�&rc�4�|�d|f��dS)N�charrefrr*s  r�handle_charrefzEventCollector.handle_charref.r,rc�4�|�d|f��dS)Nrrr*s  r�handle_datazEventCollector.handle_data1������V�T�N�#�#�#�#�#rc�4�|�d|f��dS)N�declrr*s  r�handle_declzEventCollector.handle_decl4r2rc�4�|�d|f��dS)N�	entityrefrr*s  r�handle_entityrefzEventCollector.handle_entityref7s�����[�$�'�(�(�(�(�(rc�4�|�d|f��dS)N�pirr*s  r�	handle_pizEventCollector.handle_pi:s�����T�4�L�!�!�!�!�!rc�4�|�d|f��dS)N�unknown declr)r
r4s  r�unknown_declzEventCollector.unknown_decl=s�����^�T�*�+�+�+�+�+rN)�__name__�
__module__�__qualname__rrr!r$r'r+r/r1r5r8r;r>�rrrrs�������;�;�;�

�
�
�".�.�.�1�1�1�%�%�%�
'�'�'�'�'�'�$�$�$�$�$�$�)�)�)�"�"�"�,�,�,�,�,rrc��eZdZd�ZdS)�EventCollectorExtrac��t�|||��|�d|���f��dS)N�
starttag_text)rr!r�get_starttag_textrs   rr!z#EventCollectorExtra.handle_starttagCsC���&�&�t�S�%�8�8�8����_�d�&<�&<�&>�&>�?�@�@�@�@�@rN)r?r@rAr!rBrrrDrDAs(������A�A�A�A�ArrDc��eZdZd�Zd�ZdS)�EventCollectorCharrefsc�0�|�d��dS�Nz6This should never be called with convert_charrefs=True��failr*s  rr/z%EventCollectorCharrefs.handle_charrefJ����	�	�J�K�K�K�K�Krc�0�|�d��dSrKrLr*s  rr8z'EventCollectorCharrefs.handle_entityrefMrNrN)r?r@rAr/r8rBrrrIrIHs:������L�L�L�L�L�L�L�LrrIc�"�eZdZd�Zdd�Zd�ZdS)�TestCaseBasec�"�td���S�NF��convert_charrefs)r�r
s r�
get_collectorzTestCaseBase.get_collectorSs���u�5�5�5�5rNc�t�|�|���}|}|D]}|�|���|���|���}||krW|�dt|��zdzt
j|��zdzt
j|��z��dSdS)Nz6received events did not match expected events
Source:
z
Expected:
z
Received:
)rW�feed�closerrM�repr�pprint�pformat)r
�source�expected_events�	collectorr
�srs       r�
_run_checkzTestCaseBase._run_checkVs������*�*�,�,�I����	�	�A��K�K��N�N�N�N��������"�"�$�$���_�$�$��I�I�$�&*�6�l�l�3�%�&�(.���(G�(G�H�&�&�)/��v�(>�(>�?�
@�
@�
@�
@�
@�%�$rc�P�|�||td�����dSrS)rbrD)r
r^rs   r�_run_check_extrazTestCaseBase._run_check_extrads9�������+�U�C�C�C�	E�	E�	E�	E�	Err)r?r@rArWrbrdrBrrrQrQQsO������6�6�6�@�@�@�@�E�E�E�E�ErrQc��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�HTMLParserTestCasec�b�|�ddg��|�ddg��dS)Nz<?processing instruction>)r:zprocessing instructionz<?processing instruction ?>)r:zprocessing instruction ?�rbrVs r� test_processing_instruction_onlyz3HTMLParserTestCase.test_processing_instruction_onlyksP�����3�,�6�	�	�	�	
���5�.�8�	�	�	�	�	rc�d�|�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�
)r4zDOCTYPE html PUBLIC 'foo'rr	)r7�entity)r.�32)r)z4comment1a
-></foo><bar>&lt;<?pi?></foo<bar
comment1b�img)�src�Bar)�ismapN)rzsample
text
)r.�x201C)r)zcomment2a-- --comment2b�r&r	rhrVs r�test_simple_htmlz#HTMLParserTestCase.test_simple_htmlsst�������)���������I������9�:����*����#�	�	�	�	�	rc�x�|�dddgfddg��|�dgddgfddg��dS)	Nz
<p>&#bad;</p>r�p)rz&#bad;�r&rvz<div>&#bad;</div>�div�r&rxrhrVs r�test_malformatted_charrefz,HTMLParserTestCase.test_malformatted_charref�sl������
��b�!���*
�	�	�	�	
���,�-�
���#���0
�	�	�	�	�	rc�6�|�dddg��dS)Nz&entityref foo)r7r7)rz foorhrVs r�test_unclosed_entityrefz*HTMLParserTestCase.test_unclosed_entityref�s0�����(�&��+�	�	�	�	�	rc�F�|�dddgfddgfddg��dS)Nz<a><b></a></b>r�a�b�r&r~�r&rrhrVs r�test_bad_nestingz#HTMLParserTestCase.test_bad_nesting�sF��	
���(�
��b�!�
��b�!���	+�	�	�	�	�	rc�4�|�ddg��dS)N�#this text & contains & ampersands &)rr�rhrVs r�test_bare_ampersandsz'HTMLParserTestCase.test_bare_ampersands�s.�����=�;�@�	�	�	�	�	rc�4�|�ddg��dS)N�.this < text > contains < bare>pointy< brackets)rr�rhrVs r�test_bare_pointy_bracketsz,HTMLParserTestCase.test_bare_pointy_brackets�s.�����H�F�K�	�	�	�	�	rc�r�|�ddddgfg��|�ddddgfg��dS)N�	<a b='<'>rr~�r�<�	<a b='>'>�r�>rhrVs r�test_starttag_end_boundaryz-HTMLParserTestCase.test_starttag_end_boundary�sH������:�s�Z�L�*I�)J�K�K�K�����:�s�Z�L�*I�)J�K�K�K�K�Krc�t�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)*Nrr~r�r�z<a zb='<'>z<a bz='<'>z<a b=z'<'>z<a b='<z'>z<a b='<'r�r�r�zb='>'>z='>'>z'>'>z<a b='>z<a b='>')r)�abc�z
<!--abc-->r�z	!--abc-->�<!z--abc-->z<!-z-abc-->z<!--zabc-->z<!--azbc-->z<!--abzc-->z<!--abcz-->z<!--abc-z->z	<!--abc--rh�r
�outputs  r�test_buffer_artefactsz(HTMLParserTestCase.test_buffer_artefacts�sk���s�Z�L�1�2������
�v�.�.�.������)�6�2�2�2������)�6�2�2�2�����&�)�6�2�2�2�����D�)�6�2�2�2�����S�)�6�2�2�2��s�Z�L�1�2������
�v�.�.�.������)�6�2�2�2������)�6�2�2�2�����&�)�6�2�2�2�����D�)�6�2�2�2�����S�)�6�2�2�2�$�%������\�*�F�3�3�3�����k�*�F�3�3�3�����z�*�F�3�3�3�����	�*�F�3�3�3������*�F�3�3�3�����'�*�F�3�3�3�����6�*�F�3�3�3�����E�*�F�3�3�3�����T�*�F�3�3�3�����c�*�F�3�3�3�����r�*�F�3�3�3�3�3rc�V�gd�}|D]!}|�d|zdd|zfg���"dS)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"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>r4zDOCTYPE rh)r
�dtds�dtds   r�test_valid_doctypesz&HTMLParserTestCase.test_valid_doctypes�sc��@�@�@��$�	:�	:�C��O�O�O�c�1�$�j�3�&6�7�8�
:�
:�
:�
:�	:�	:rc��|�dddgfg��|�dddgfdg��|�dddgfddd	gfdg��dS)
Nz<p/>r#rvz<p></p>rrwz<p><img src='foo' /></p>rn)ro�foorhrVs r�test_startendtagz#HTMLParserTestCase.test_startendtag�s�������
�C��$�!�	�	�	�	
���	�
��b�!��$�	�	�	�	
���2�
��b�!�
�E�N�#3�4��5�	�	�	�	�	rc�H�d}|�|ddddgfd|fg��dS)Nz <foo:bar   
   one="1"	two=2   >rzfoo:bar)�one�1)�two�2rF)rd)r
ras  r�test_get_starttag_textz)HTMLParserTestCase.test_get_starttag_textsG��4�����a�
��\�<�$@�A�
�a� �""�	#�	#�	#�	#�	#rc	��gd�}gd�}|D]R}|D]M}|���}d�||���}|�|d|gfd|fd|fg���N�SdS)N)z*<!-- 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�style�SCRIPT�STYLE�Script�Stylez <{element}>{content}</{element}>��element�contentrrr&)�lower�formatrb)r
�contents�elementsr�r��
element_lowerras       r�test_cdata_contentz%HTMLParserTestCase.test_cdata_content	s���
�
�
��(M�L�L���	@�	@�G�#�
@�
@�� '�
�
���
�6�=�=�g�GN�>�P�P������Z���$C�%+�W�$5�%-�}�$=�$?�@�@�@�@�	
@�	@�	@rc��Gd�dt��}d}dD]k}|������}d�||���}|�|d|gfd|fd	|fg|d
�������ldS)
Nc��eZdZd�ZdS)�BHTMLParserTestCase.test_cdata_with_closing_tags.<locals>.Collectorc��|jSr)rrVs rrzMHTMLParserTestCase.test_cdata_with_closing_tags.<locals>.Collector.get_events.s
���{�"rN)r?r@rArrBrr�	Collectorr�-s#������
#�
#�
#�
#�
#rr�z�<!-- 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}>r�rrr&FrT�r`)rr��stripr�rb)r
r�r�r�r�ras      r�test_cdata_with_closing_tagsz/HTMLParserTestCase.test_cdata_with_closing_tags(s���
	#�	#�	#�	#�	#��	#�	#�	#�&��>�	I�	I�G�#�M�M�O�O�1�1�3�3�M�/�6�6�w�?F�7�H�H�A��O�O�A��]�B� ?�!'�� 1�!)�=� 9� ;�'0�i��&G�&G�&G�
�
I�
I�
I�
I�	I�	Irc�>�d}gd�}|�||��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! -->))r)z I'm a valid comment )r)zme too!)r)z--�r)r�)r)z--I have many hyphens--)r)z I have a > in the middle )r)z and I have -- in the middle! rh�r
r	�expecteds   r�
test_commentsz HTMLParserTestCase.test_comments>s9��8��C�C�C��	
����h�'�'�'�'�'rc�>�d}gd�}|�||��dS)Nzs<!--[if IE & !(lte IE 8)]>aren't<![endif]--><!--[if IE 8]>condcoms<![endif]--><!--[if lte IE 7]>pretty?<![endif]-->))r)z%[if IE & !(lte IE 8)]>aren't<![endif])r)zf IE 8]>condcoms<![endif])r)z[if lte IE 7]>pretty?<![endif]rhr�s   r�
test_condcomsz HTMLParserTestCase.test_condcomsOs9��8��C�C�C��	
����h�'�'�'�'�'rc
��d�}|�|��j��gd�}dddgfddg}|D]5}|�d�|��||���	���6d
ddgd�fd
dd
g}|D]5}|�d�|��||���	���6|D]d}d
�|gdz��}d
ddgfd|fdd
ddgfd|fdd
g	}|�d�||��||���	���ed}tdt
|����D]5}|�|d|�d|d|�fg|���	���6|�ddg|���	��dS)Nc��t��Sr)rIrBrr�<lambda>z:HTMLParserTestCase.test_convert_charrefs.<locals>.<lambda>Zs
��2�4�4�r)z&quot;z&#34;z&#x22;z&quotz&#34z&#x22rr~)�hrefzfoo"zar)rza"zr�z<a href="foo{0}zar">a{0}z</a>r�)r�"))�xr�)�yz"X)�zzX"z*{0}<a x="{0}" y="{0}X" z="X{0}">{0}</a>{0}�X�r�r)r&r�r�)r&r�z/{1}<script>{0}</script>{1}<style>{0}</style>{1}z&quo &# &#xr�no charrefs here)rr�)�
assertTruerUrbr��join�range�len)r
r`�charrefsr�r.�textr	r�s        r�test_convert_charrefsz(HTMLParserTestCase.test_convert_charrefsXsG��4�4�	����	�	���4�5�5�5�J�J�J����':�&;�<�#�_�6���	=�	=�G��O�O�;�B�B�7�K�K�$�	�	���
�
=�
=�
=�
=�"���&L�&L�&L�M�!�?�M�C�� �	=�	=�G��O�O�)�)/�����$�	�	���
�
=�
=�
=�
=� �		=�		=�G��8�8�W�I�a�K�(�(�D�%�#�X�r�2�V�T�N�,�m�#�W�b�1�F�D�>�+�]�	<�H�

�O�O�4�4:�F�4��4I�4I�$�	�	���
�
=�
=�
=�
=����q�#�d�)�)�$�$�	3�	3�A��O�O�D��!��H���R�a�R��'9�&:�&/�i�k�k�
�
3�
3�
3�
3�	
���*�-I�,J�"+�)�+�+�	�	/�	/�	/�	/�	/rc�T�|�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)r7r~)rr�zbc<)r~Nrs)rz
<img src="URL>)r)z/img)r&zhtml<rhrVs r�test_tolerant_parsingz(HTMLParserTestCase.test_tolerant_parsing�sZ�����=�'��/�1B�C�.�.�)�'���
�>�.�8�/�/�	?1�
	2�
	2�
	2�
	2�
	2rc�6�|�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)�$�</)rr��</a)rr�z<a<a>r�a<az</a<a>)r&r�r�)rr��<a)rr��<a foo='bar')rr��<a foo='bar)rr��
<a foo='>')rr��	<a foo='>)rr�z<a$>za$z<a$b>za$bz<a$b/>r#z<a$b  >z<a$b  />rhrVs r�test_starttag_junk_charsz+HTMLParserTestCase.test_starttag_junk_chars�s�������r�"�"�"�����!1� 2�3�3�3�����~�.�/�/�/������0�1�1�1�����:�u�b�"9�!:�;�;�;�����#4�"5�6�6�6�����~�.�/�/�/�����~�.�/�/�/�����)A�(B�C�C�C����
�(?�'@�A�A�A�����'=�&>�?�?�?�����&;�%<�=�=�=�����*�d�B�!7� 8�9�9�9�����:�u�b�"9�!:�;�;�;�����M�5�"�#=�">�?�?�?����	�Z���$;�#<�=�=�=����
�m�U�B�%?�$@�A�A�A�A�Arc
�<�|�ddddgfg��d}ddgd�fg}|�||��d}ddgd	�fd
dgd	�fg}|�||��d}d
dgfd
dgfd
dgfd
dgfddgfddgfddgfddgfg}|�||��dS)
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*/ />rn))�width�902)�height�250px)roz,/sites/default/files/images/homepage/foo.jpg)z*whatN)�amN)�iN)�doingN)zhere*Nz9<a / /foo/ / /=/ / /bar/ / /><a / /foo/ / /=/ / /bar/ / >))r�N)�=N)�barNrzD<meta><meta / ><meta // ><meta / / ><meta/><meta /><meta //><meta//>�metarhr�s   r�test_slashes_in_starttagz+HTMLParserTestCase.test_slashes_in_starttag�s#�����(�M�3��@P�+Q�*R�S�S�S�.��
�5�
/�
/�
/�
���	
����h�'�'�'�/���C�!L�!L�!L�M�
��I�I�I�J�
��	
����h�'�'�'�3�����$�z�6�2�&>�
���$�z�6�2�&>�
�F�B�'�-���)D�
�F�B�'�-���)D�	
��	
����h�'�'�'�'�'rc�4�|�ddg��dS)Nz<!DOCTYPE foo $ >)r4zDOCTYPE foo $ rhrVs r�test_declaration_junk_charsz.HTMLParserTestCase.test_declaration_junk_chars�s!�����+�.H�-I�J�J�J�J�Jrc�4�|�ddg��dS)Nz"<!spacer type="block" height="25">)r)zspacer type="block" height="25"rhrVs r�test_illegal_declarationsz,HTMLParserTestCase.test_illegal_declarations�s0�����<�G�H�	J�	J�	J�	J�	Jrc�|�d}ddgfdddgfdddgfdddgfdddgfdddgfddgfg}|�||��dS)Nzn<br></label</p><br></div end tmAd-leaderBoard><br></<h4><br></li class="unit"><br></li
						</ul><br></><br>r�br)r&zlabel<ry)r)z<h4)r&�lirhr�s   r�test_invalid_end_tagsz(HTMLParserTestCase.test_invalid_end_tags�s���M����r�*�(���r�*�%���r�*�&���r�*�$���r�*�$���r�*���r�*�#,��$	
����h�'�'�'�'�'rc�H�d}ddgfdddg}|�||��dS)Nz(<b>This</b attr=">"> confuses the parserrr)r�Thisr�)rz"> confuses the parserrhr�s   r�test_broken_invalid_end_tagz.HTMLParserTestCase.test_broken_invalid_end_tag�s?��
:����b�)�$�#�6�8��	
����h�'�'�'�'�'rc���d}dddgfddgfddddgfd	d
ddd
gfdddgfddddg}|�||��d}ddgd�fddgfddddgfd	d
g}|�||��dS)Nz[<div style=""    ><b>The <a href="some_url">rain</a> <br /> in <span>Spain</span></b></div>rrx�r�r�r)rzThe r~)r��some_url)r�rainr��r� r#r�)rz in �span)r�Spain�r&rr�ryz><div style="", foo = "bar" ><b>The <a href="some_url">rain</a>)r���,N)r�r�rhr�s   r�$test_correct_detection_of_start_tagsz7HTMLParserTestCase.test_correct_detection_of_start_tags�s���9������0�
��b�!��
��3�4�5����
�D�"�%��
���$�����
�� 	
����h�'�'�'�O��
�� L� L� L�M�
��b�!��
��3�4�5���

��	
����h�'�'�'�'�'rc�j�ddgfddgfdgd�fddd	gfg}|D]\}}|�||���dS)
N�a&)rr	za&b)r�abza&b )�rr~�r7rrza&b;rrrh)r
rr	r�s    r�test_EOF_in_charrefz&HTMLParserTestCase.test_EOF_in_charrefst���N�#�$�
�^�$�%�
�G�G�G�H�
�m�%7�8�9�	
��#�	,�	,�N�D�(��O�O�D�(�+�+�+�+�	,�	,rc�>�d}gd�}|�||��dS)Nz�<! not really a comment ><! not a comment either --><! -- close enough --><!><!<-- this was an empty comment><!!! another bogus comment !!!>))r)z not really a comment )r)z not a comment either --)r)z -- close enough --r�)r)z<-- this was an empty comment)r)z!! another bogus comment !!!rhr�s   r�test_broken_commentsz'HTMLParserTestCase.test_broken_commentss6��2��

�
�
��	
����h�'�'�'�'�'rc�z�d}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]>)r=zif !(IE))rzbroken condcom)r=�endif)r=zif ! IEr#�link)r�zfavicon.tiff)r=zif !IE 6rn)rozfirefox.png)r=zif !ie 6rr)rr�r�)r=zif (!IE)|(lt IE 9))rozmammoth.bmprhr�s   r�test_broken_condcomsz'HTMLParserTestCase.test_broken_condcoms,s���M��
)�&�%�'�
�F�%=�$>�?�%�(�
�E�$:�#;�<�%�(�
��b�!���%�2�
�E�$:�#;�<�%�#
��&	
����h�'�'�'�'�'rc��td���}|�d��|�|���dddgfddd	g��dS)
NTrTzfoo <a>link</a> bar &amp; baz)rzfoo rr~)rrr�)rz
 bar & baz)rrY�assertEqualr)r
r
s  r�"test_convert_charrefs_dropped_textz5HTMLParserTestCase.test_convert_charrefs_dropped_textMsr�� ��6�6�6�����3�4�4�4���������
�
�C��4�6F�
�4�
6�	
�	
�	
�	
�	
rN) r?r@rArirtrzr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr
rrrrBrrrfrfis�������������@������	�	�	����
���
L�L�L�4�4�4�<:�:�:�0���#�#�#�@�@�@�>I�I�I�,(�(�(�"(�(�(�%/�%/�%/�R2�2�2�B�B�B�&(�(�(�>K�K�K�J�J�J�(�(�(�4
(�
(�
(�(�(�(�B,�,�,�(�(�(� (�(�(�B

�

�

�

�

rrfc�t�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�ZdS)�AttributesTestCasec���ddgd�fg}|�d|��|�d|��|�d|��|�d|��dS)Nrr~))r�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>rhr�s  r�test_attr_syntaxz#AttributesTestCase.test_attr_syntax\sv���s�M�M�M�
N�
��	
���3�V�<�<�<����:�F�C�C�C����C�V�L�L�L����C�V�L�L�L�L�Lrc���|�dddgd�fg��|�dddddgfg��|�ddd	d
gfg��|�ddddgfg��dS)
Nz'<a b='xxx
	xxx' c="yyy	
yyy" d='	xyz
'>rr~))rzxxx
	xxx)rzyyy	
yyy)rz	xyz
z
<a b='' c="">)rr�)rr�z<e a=rgb(1,2,3)>r)r~z
rgb(1,2,3)z<a href=mailto:xyz@example.com>)r�zmailto:xyz@example.comrhrVs r�test_attr_valuesz#AttributesTestCase.test_attr_valueses������K�$�c�,>�,>�,>�?�@�	A�	A�	A�	
���+�$�c�I�y�+A�B�C�	E�	E�	E�	
���*�$�c�,?�+@�A�B�	D�	D�	D�	
���-��#� B�C�
D�E�	G�	G�	G�	G�	Grc��|�dddddgfg��|�ddddd	gfg��|�d
dddd	gfg��dS)Nu!<img src=/foo/bar.png alt=中文>rrn)roz/foo/bar.png)�altu中文u+<a title='テスト' href='テスト.html'>r~)�titleu	テスト)r�uテスト.htmlu+<a title="テスト" href="テスト.html">rhrVs r�test_attr_nonasciiz%AttributesTestCase.test_attr_nonasciits������5��%�"9�"9�";�<�
=�	>�	>�	>�	
���K��#� ?� C� E�F�
G�	H�	H�	H�	
���K��#� ?� C� E�F�
G�	H�	H�	H�	H�	Hrc�<�|�ddddgfg��dS)Nz!<a b='&amp;&gt;&lt;&quot;&apos;'>rr~)rz&><"'rhrVs r�test_attr_entity_replacementz/AttributesTestCase.test_attr_entity_replacement�s5�����/��#��0�
1�2�	4�	4�	4�	4�	4rc�>�|�dddgd�fg��dS)Nz<a a.b='v' c:d=v e-f=v>rr~))za.br)zc:dr)ze-frrhrVs r�test_attr_funky_namesz(AttributesTestCase.test_attr_funky_names�s>�����%��#�I�I�I�
J�K�	M�	M�	M�	M�	Mrc�<�|�ddddgfg��dS)Nz0<html foo='&euro;&amp;&#97;&#x61;&unsupported;'>rr	)r�u€&aa&unsupported;rhrVs r�test_entityrefs_in_attributesz0AttributesTestCase.test_entityrefs_in_attributes�s;�����>��&�#D�"E�
F�G�	I�	I�	I�	I�	Irc�P�|�ddddgfdddgfdddgfg��dS)	Nz<a $><b $=%><c \=/>rr~)r�Nr)r��%r)�\�/rhrVs r�test_attr_funky_names2z)AttributesTestCase.test_attr_funky_names2�sN�����"��#��}�
-��#�
�|�
,��#��}�
-�
/�	0�	0�	0�	0�	0rc���dD]\}|�d|zdddgfg��|�d|zdddgfg��|�d|zdddgfg���]dS)N)�&z&amp;z&#38;z&#x26;z
<a href="%s">rr~)r�r1z
<a href='%s'>z<a href=%s>rh)r
rls  r� test_entities_in_attribute_valuez3AttributesTestCase.test_entities_in_attribute_value�s���7�	B�	B�F��O�O�O�f�4�(�#�
��?�@�
B�
B�
B��O�O�O�f�4�(�#�
��?�@�
B�
B�
B��O�O�M�F�2�(�#�
��?�@�
B�
B�
B�
B�	B�	Brc�r�d}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>rr~)r�ztest'style='color:red;bad1')rztest - bad1r�)r�ztest'+style='color:red;ba2')rztest - bad2)r�utest' style='color:red;bad3')rztest - bad3)r�utest' style='color:red;bad4')rztest - bad4rhr�s   r�test_malformed_attributesz,AttributesTestCase.test_malformed_attributes�s~��
L�	
���F�G�H�#�_�
��F�G�H�#�_�
��J�K�L�#�_�
��J�K�L�#�_�	
��	
����h�'�'�'�'�'rc��|�dddgfddddgfdg��|�d	ddgfdddd
gfdg��dS)Nz<x><y z=""o"" /></x>rr�r#r�)r�r�)zo""N)r&r�z<x><y z="""" /></x>)z""NrhrVs r�"test_malformed_adjacent_attributesz5AttributesTestCase.test_malformed_adjacent_attributes�s������.�$�c�2�.�*�C�)�]�1K�L�+�-�	.�	.�	.�	
���-�$�c�2�.�*�C�)�\�1J�K�+�-�	.�	.�	.�	.�	.rc�v�|�dddddgfg��|�dddddgfg��dS)	Nz<a width="100%"cellspacing=0>rr~�r�z100%��cellspacing�0z<a id="foo"class="bar">)�idr���classr�rhrVs r�test_adjacent_attributesz+AttributesTestCase.test_adjacent_attributes�st�����7�$�c�,�.A�B�D�E�	F�	F�	F�	
���1�$�c�(�/�:�<�=�	>�	>�	>�	>�	>rc�<�|�ddddgfg��dS)Nz<a v=>rr~)rr�rhrVs r�test_missing_attribute_valuez/AttributesTestCase.test_missing_attribute_value�s3������$�c�I�;�7�8�	:�	:�	:�	:�	:rc�<�|�ddddgfg��dS)Nz-<a href=javascript:popup('/popup/help.html')>rr~)r�z$javascript:popup('/popup/help.html')rhrVs r�test_javascript_attribute_valuez2AttributesTestCase.test_javascript_attribute_value�sA�����G�$�c�K�L�N�O�	P�	P�	P�	P�	Prc�@�|�ddddgfddg��dS)Nz-<a href='http://www.example.org/">;'>spam</a>rr~)r�zhttp://www.example.org/">;)r�spamr�rhrVs r�test_end_tag_in_attribute_valuez2AttributesTestCase.test_end_tag_in_attribute_value�s@�����H�$�c�B�C�E�)�?�<�	=�	=�	=�	=�	=rc��d}ddgfddddgfddgd�fdd	gfdd
dgfddd
gfddddgfdddgfdddddddgfdddgfddddg}|�||��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>rr	�body)�bgcolor�d0ca90)r��181008�table)r9)�cellpaddingr�r8�tr�td)�align�left�font)�sizez-1)rz- r~)r�z/rabota/r)r>�en)rz software-and-irr�)r�z/1/)rz library)r&rLrhr�s   r�test_with_unquoted_attributesz0AttributesTestCase.test_with_unquoted_attributes�s���M�����$�
��"7�9K�!L�M�
��O�O�O�
Q�
��r�"�
�� 1�2�3�
��.�!1�2��Z��/C�.D�E�
��/�!2�3�5P����Z���.?�@�
��/�!2�3�5I���1D�
��	
����h�'�'�'�'�'rc��d}dddgfddddgfddddgfddgd	�fdddd
gfddddgfddd
dgfddddgfddddgfg	}|�||��dS)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">rrx)r>zbar,baz=asdr=)z,baz�asd)r>zbar,)�bazzasd,)r=r)rXrWrr)r>z,bar)rXz,asd)r>z,"bar")rXz,"asd")z,classr�)zclass,r�)zbaz,rWrhr�s   r�test_comma_between_attributesz0AttributesTestCase.test_comma_between_attributes�s���0����!9� ;�<�
��!1�?� C�D�
��!2�O� D�E�
��!>�!>�!>�
?�
��!1�;� ?�@�
��!2�O� D�E�
��!4�6G� H�I�
��!2�O� D�E�
��!2�O� D�E�
��	
����h�'�'�'�'�'rc�<�|�ddddgfg��dS)Nz<form action=bogus|&#()value>r�form)�actionzbogus|&#()valuerhrVs r�-test_weird_chars_in_unquoted_attribute_valuesz@AttributesTestCase.test_weird_chars_in_unquoted_attribute_valuessA�����7�'��!>� ?�A�:B�	C�	C�	C�	C�	CrN)r?r@rArr r$r&r(r*r/r2r4r6r?rArCrFrUrYr]rBrrrrZs-������M�M�M�
G�
G�
G�
H�
H�
H�4�4�4�
M�M�M�
I�I�I�0�0�0�B�B�B�(�(�(�(	.�	.�	.�>�>�>�:�:�:�P�P�P�
=�=�=�(�(�(�0(�(�(�8C�C�C�C�Crr�__main__)�__doc__�html.parserr	r\�unittestr
rrrDrI�TestCaserQrfrr?�mainrBrr�<module>rds���������
�
�
�
�����6,�6,�6,�6,�6,�T�[�+�6,�6,�6,�rA�A�A�A�A�.�A�A�A�L�L�L�L�L�^�L�L�L�E�E�E�E�E�8�$�E�E�E�0n
�n
�n
�n
�n
��n
�n
�n
�bzC�zC�zC�zC�zC��zC�zC�zC�x�z����H�M�O�O�O�O�O��r