Your IP : 216.73.216.213


Current Path : /opt/alt/python311/lib64/python3.11/test/__pycache__/
Upload File :
Current File : //opt/alt/python311/lib64/python3.11/test/__pycache__/test_htmlparser.cpython-311.pyc

�

�0�i����L�dZddlZddlZddlZddlmZdZedzZGd�dej	j
��ZGd�d	e��ZGd
�de��Z
Gd�d
e��ZGd�dej��ZGd�de��ZGd�de��Zedkrej��dSdS)zTests for HTMLParser.py.�N)�supportuo<!-- not a comment --><not a='start tag'><![CDATA[not a cdata]]><!not a bogus comment></not a bogus comment>☃z&amp;&#9786;c�\�eZdZdd�d�Zd�Zd�Zd�Zd�Zd�Zd	�Z	d
�Z
d�Zd�Zd
�Z
d�ZdS)�EventCollectorF��	autocdatac��||_g|_|jj|_tjjj|g|�Ri|��|r|�d��dSdS)NF)r�events�append�html�parser�
HTMLParser�__init__�_set_support_cdata)�selfr�args�kws    �;/opt/alt/python311/lib64/python3.11/test/test_htmlparser.pyrzEventCollector.__init__sn��"�������k�(������'��:�t�:�:�:�r�:�:�:��	+��#�#�E�*�*�*�*�*�	+�	+�c���g}d}|jD]N}|d}||cxkrdkr nnd|dd|dzf|d<n|�|��|}�O||_|S)Nr�data����)r	r
)r�L�prevtype�event�types     r�
get_eventszEventCollector.get_events s���
�����[�	�	�E���8�D��x�)�)�)�)�6�)�)�)�)�)���2��q��E�!�H�!4�5��"�����������H�H�����rc��|�d||f��|jr|dkr|�d��dSdSdS)N�starttag�svgT�r
rr�r�tag�attrss   r�handle_starttagzEventCollector.handle_starttag1sU�����Z��e�,�-�-�-��>�	*�c�U�l�l��#�#�D�)�)�)�)�)�	*�	*�l�lrc�6�|�d||f��dS)N�startendtag�r
r"s   r�handle_startendtagz!EventCollector.handle_startendtag6s!�����]�C��/�0�0�0�0�0rc��|�d|f��|jr|dkr|�d��dSdSdS)N�endtagr Fr!)rr#s  r�
handle_endtagzEventCollector.handle_endtag9sR�����X�s�O�$�$�$��>�	+�c�U�l�l��#�#�E�*�*�*�*�*�	+�	+�l�lrc�4�|�d|f��dS)N�commentr(�rrs  r�handle_commentzEventCollector.handle_comment@������Y��%�&�&�&�&�&rc�4�|�d|f��dS)N�charrefr(r/s  r�handle_charrefzEventCollector.handle_charrefCr1rc�4�|�d|f��dS)Nrr(r/s  r�handle_datazEventCollector.handle_dataF������V�T�N�#�#�#�#�#rc�4�|�d|f��dS)N�declr(r/s  r�handle_declzEventCollector.handle_declIr7rc�4�|�d|f��dS)N�	entityrefr(r/s  r�handle_entityrefzEventCollector.handle_entityrefLs�����[�$�'�(�(�(�(�(rc�4�|�d|f��dS)N�pir(r/s  r�	handle_pizEventCollector.handle_piOs�����T�4�L�!�!�!�!�!rc�4�|�d|f��dS)N�unknown declr()rr9s  r�unknown_declzEventCollector.unknown_declRs�����^�T�*�+�+�+�+�+rN)�__name__�
__module__�__qualname__rrr%r)r,r0r4r6r:r=r@rC�rrrrs�������(-�+�+�+�+�+�
�
�
�"*�*�*�
1�1�1�+�+�+�'�'�'�'�'�'�$�$�$�$�$�$�)�)�)�"�"�"�,�,�,�,�,rrc��eZdZd�ZdS)�EventCollectorExtrac��t�|||��|�d|���f��dS)N�
starttag_text)rr%r
�get_starttag_textr"s   rr%z#EventCollectorExtra.handle_starttagXsC���&�&�t�S�%�8�8�8����_�d�&<�&<�&>�&>�?�@�@�@�@�@rN)rDrErFr%rGrrrIrIVs(������A�A�A�A�ArrIc��eZdZd�Zd�ZdS)�EventCollectorCharrefsc�0�|�d��dS�Nz6This should never be called with convert_charrefs=True��failr/s  rr4z%EventCollectorCharrefs.handle_charref_����	�	�J�K�K�K�K�Krc�0�|�d��dSrPrQr/s  rr=z'EventCollectorCharrefs.handle_entityrefbrSrN)rDrErFr4r=rGrrrNrN]s:������L�L�L�L�L�L�L�LrrNc��eZdZd�ZdS)�EventCollectorNoNormalizec��|jS�N)r	�rs rrz$EventCollectorNoNormalize.get_eventsis
���{�rN)rDrErFrrGrrrVrVhs#����������rrVc�"�eZdZd�Zdd�Zd�ZdS)�TestCaseBasec�"�td���S�NF��convert_charrefs)rrYs r�
get_collectorzTestCaseBase.get_collectoros���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:
)r`�feed�closerrR�repr�pprint�pformat)r�source�expected_events�	collectorr�sr	s       r�
_run_checkzTestCaseBase._run_checkrs������*�*�,�,�I����	�	�A��K�K��N�N�N�N��������"�"�$�$���_�$�$��I�I�$�&*�6�l�l�3�%�&�(.���(G�(G�H�&�&�)/��v�(>�(>�?�
@�
@�
@�
@�
@�%�$rc�P�|�||td�����dSr])rkrI)rrgr	s   r�_run_check_extrazTestCaseBase._run_check_extra�s9�������+�U�C�C�C�	E�	E�	E�	E�	ErrX)rDrErFr`rkrmrGrrr[r[msO������6�6�6�@�@�@�@�E�E�E�E�Err[c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zejd
gd���d���Zejd
gd���d���Zejdddg��d���Zejdgd���d���Zd�Zd�Zejdgd���d���Zejdgd���d���Zejdgd���d���Zejd gd!���d"���Zejd#gd$���d%���Zejd#gd&���d'���Zd(�Zd)�Zd*�Zd+�Z d,�Z!d-�Z"d.�Z#d/�Z$d0�Z%d1�Z&d2�Z'd3�Z(d4�Z)d5�Z*d6�Z+ejd
gd7���d8���Z,d9�Z-d:�Z.ejd
gd;���d<���Z/d=�Z0d>�Z1ej2d?��d@���Z3dAS)B�HTMLParserTestCasec�b�|�ddg��|�ddg��dS)Nz<?processing instruction>)r?zprocessing instructionz<?processing instruction ?>)r?zprocessing instruction ?�rkrYs r� test_processing_instruction_onlyz3HTMLParserTestCase.test_processing_instruction_only�sP�����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�
)r9zDOCTYPE html PUBLIC 'foo'rr)r<�entity)r3�32)r.z4comment1a
-></foo><bar>&lt;<?pi?></foo<bar
comment1b�img)�src�Bar)�ismapN)rzsample
text
)r3�x201C)r.zcomment2a-- --comment2b�r+rrqrYs r�test_simple_htmlz#HTMLParserTestCase.test_simple_html�st�������)���������I������9�:����*����#�	�	�	�	�	rc�x�|�dddgfddg��|�dgddgfddg��dS)	Nz
<p>&#bad;</p>r�p)rz&#bad;�r+r�z<div>&#bad;</div>�div�r+r�rqrYs r�test_malformatted_charrefz,HTMLParserTestCase.test_malformatted_charref�sl������
��b�!���*
�	�	�	�	
���,�-�
���#���0
�	�	�	�	�	rc�6�|�dddg��dS)Nz&entityref foo)r<r<)rz foorqrYs r�test_unclosed_entityrefz*HTMLParserTestCase.test_unclosed_entityref�s0�����(�&��+�	�	�	�	�	rc�F�|�dddgfddgfddg��dS)Nz<a><b></a></b>r�a�b�r+r��r+r�rqrYs r�test_bad_nestingz#HTMLParserTestCase.test_bad_nesting�sF��	
���(�
��b�!�
��b�!���	+�	�	�	�	�	rc�4�|�ddg��dS)N�#this text & contains & ampersands &)rr�rqrYs r�test_bare_ampersandsz'HTMLParserTestCase.test_bare_ampersands�s.�����=�;�@�	�	�	�	�	rc�4�|�ddg��dS)N�.this < text > contains < bare>pointy< brackets)rr�rqrYs 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��>rqrYs 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��<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-abc-->�<!--zabc-->z<!--azbc-->z<!--abzc-->z<!--abcz-->z<!--abc-z->z	<!--abc--rq�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>r9�DOCTYPE rq)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'r�z<p></p>rr�z<p><img src='foo' /></p>rx)ry�foorqrYs r�test_startendtagz#HTMLParserTestCase.test_startendtags�������
�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�2rK)rm)rrjs  r�test_get_starttag_textz)HTMLParserTestCase.test_get_starttag_textsG��4�����a�
��\�<�$@�A�
�a� �""�	#�	#�	#�	#�	#r�content)
z*<!-- not a comment --> &not-an-entity-ref;�<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;
// -->
u<!-- ☃ -->c�N�d|�d�}|�|ddgfd|fdg��dS)Nz<script>z	</script>r�scriptr�r+r�rq�rr�rjs   r�test_script_contentz&HTMLParserTestCase.test_script_content%sP�� 
*�w�)�)�)������
��2�&�
�W�� �
�	�	�	�	�	r)z0a::before { content: "<!-- not a comment -->"; }z-a::before { content: "&not-an-entity-ref;"; }z-a::before { content: "<not a='start tag'>"; }ua::before { content: "☃"; }c�N�d|�d�}|�|ddgfd|fdg��dS)Nz<style>z</style>r�styler�r+r�rqr�s   r�test_style_contentz%HTMLParserTestCase.test_style_content<sO��
(�g�'�'�'������Z��"�5�#�W�-�/�1�	2�	2�	2�	2�	2rr#�title�textareac��d|�dt�d|�d�}|�|d|gfdtfd|fg��d|�d|�d�}|�|d|gfdd|fg��dS)	Nr�r��</rrr+z>&amp;</�r<�amp)�
SAMPLE_RCDATArk�rr#rgs   r�test_rcdata_contentz&HTMLParserTestCase.test_rcdata_contentHs���2�S�2�2�=�2�2�C�2�2�2������
��b�!�
�]�#�
�s�O�!
�	�	�	�
)�S�(�(�#�(�(�(������
��b�!� �
�s�O�!
�	�	�	�	�	r)r��xmp�iframe�noembed�noframesr�c�r�d|�dt�d|�d�}|�|d|gfdtfd|fg��dS)Nr�r�r�rrr+��SAMPLE_RAWTEXTrkr�s   r�test_rawtext_contentz'HTMLParserTestCase.test_rawtext_contentWsd��4�S�3�3�>�3�3�S�3�3�3������
��b�!�
�^�$�
�s�O�!
�	�	�	�	�	rc
���dt�d�}|�|ddgfddddgfdd	d
ddd
dg
��|�|ddgfdtfdgtd������dS)Nz
<noscript>z</noscript>r�noscript)r.z not a comment �not)r�z	start tag)rBzCDATA[not a cdata)r.znot a bogus comment)r+r�)ru☃r�)r3�9786)r+r�rT)�	scripting�ri)r�rkr)rrgs  r�test_noscript_contentz(HTMLParserTestCase.test_noscript_contentas���9�n�9�9�9������
��R�(�*�
��!3� 4�5�1�.��� ��"�!
�	�	�	�	
����
��R�(�
�^�$�"�!
�$�d�3�3�3�		�	5�	5�	5�	5�	5rc�^�tdz}d|��}|�|ddgfd|fg��dS)Nz</plaintext>z<plaintext>r�	plaintextrr�)rr�rgs   r�test_plaintext_contentz)HTMLParserTestCase.test_plaintext_contentwsR�� �>�1��(�w�(�(������
��b�)�
�W��!
�	�	�	�	�	rr+)r��SCRIPTzscript zscript
zscript/zscript foo=barzscript foo=">"c�x�d}d|�d|�d�}|�|ddgfd|fdgtd	�
�����dS)Nz�<!-- not a comment --> &not-an-entity-ref;
                  <a href="" /> </p><p> <span></span></style>
                  '</script' + '>'�<ScrIPt>r�r�rr�rr�Fr^r��rkrV)rr+r�rjs    r�test_script_closing_tagz*HTMLParserTestCase.test_script_closing_tagsx��
&��
,�w�+�+�&�+�+�+������Z��2�6�#�W�-�0�2�#<�U�"S�"S�"S�	�	U�	U�	U�	U�	Ur)	r�r�r�r�r�r�r�r�r�c	��||���|�d�|�d�|�d�|�d�|�d�fD]S}d}d|����d|�d	|�d�}|�|d
|gfd|fd|fgtd
d�������TdS)N� ru�/z foo=barz foo=">"z!<!-- not a comment --><i>Spam</i>r�r�r�rrr+FT�r_r�r�)�upperrkrV)rr#r+r�rjs     r�test_closing_tagz#HTMLParserTestCase.test_closing_tag�s���
�C�I�I�K�K�C����s�J�J�J��y�y�y�S�"2�"2�"2�s�4D�4D�4D�F�	\�	\�F�9�G�6�C�I�I�K�K�6�6�'�6�6�V�6�6�6�A��O�O�A��S�"�%���!��3�� �3�E�UY�Z�Z�Z�	
�
\�
\�
\�
\�		\�	\rc��d|�d|�d|�d|�d|�d�}d|�d|�d	|�d�}|�|d
|gfd|fd|fgtd
d������dS)Nz< /z></ z></zx></z></u >r�r�r�rrr+FTr�r��rkr)rr#r�rgs    r�test_invalid_closing_tagz+HTMLParserTestCase.test_invalid_closing_tag�s���
�#�
�
��
�
��
�
��
�
��	
�
�
�	�-�S�,�,�7�,�,�c�,�,�,������
��b�!�
�W��
�s�O�!
�$�U�d�K�K�K�		�	M�	M�	M�	M�	Mrz
tag,endtag)
)r�utıtle)r�uſtyle)r�uſtyle)r�ustyle)r�uıframe)r�u	noframeſ)r�u	noſcript)r�u	noscrıpt)r�uſcript)r�uscrıptc��d|�d�}d|�d|��}|�|d|gfd|fgtdd����	��d|�d|�d
|�d�}|�|d|gfd|fd|fgtdd����	��dS)Nz<br></r�r�rrFTr�r�r�r+r�)rr#r+r�rgs     r�!test_invalid_nonascii_closing_tagz4HTMLParserTestCase.test_invalid_nonascii_closing_tag�s���%�6�$�$�$��$�S�$�$�7�$�$������
��b�!�
�W��!
�$�U�d�K�K�K�	�	M�	M�	M�-�S�,�,�7�,�,�c�,�,�,������
��b�!�
�W��
�s�O�!
�$�U�d�K�K�K�		�	M�	M�	M�	M�	Mrztail,end)�r�F�r�F�r�F)z</sF)z</scriptF)z	</script T)z</script foo=barT)z</script foo=">Tc��d}d|�|��}|�|ddgfd|r|n||zfgtd������dS)	Nza = 123r�rr�rFr^r�r�)r�tail�endr�rjs     r�test_eof_in_scriptz%HTMLParserTestCase.test_eof_in_script�sy����&�w�&��&�&������Z��2�6�#��%G�W�W��4��H�J�";�U�"S�"S�"S�	�	U�	U�	U�	U�	Ur)r�r�r�)z</tF)z</titleF)z</title T)z</title foo=barT)z</title foo=">Tc	���d|��}|�|ddgfdd|rdn|zfgtd����	��|�|ddgfd
ddd|rdn|zfgtd
����	��dS)Nz<TitLe>Egg &amp; Spamrr�rz
Egg & Spamr�Tr^r�)rzEgg r�z SpamFr�)rr�r�rjs    r�test_eof_in_titlez$HTMLParserTestCase.test_eof_in_title�s���
+�D�*�*������Z��"�5�#�\�3�5H�R�R�D�%I�J�L�";�T�"R�"R�"R�	�	T�	T�	T�	
����Z��"�5�,�0�#�W�c�0C���t�%D�E�G�#<�U�"S�"S�"S�		�	U�	U�	U�	U�	Urc�>�d}gd�}|�||��dS)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 --> --><!--<!--><!--<!--!>))r.z I'm a valid comment )r.zme too!�r.z--�r.�-�r.r�r�r�)r.z--I have many hyphens--)r.z I have a > in the middle )r.z and I have -- in the middle! )r.zincorrectly-closed-commentr�)r.z--!)r.z-- >�r.z-!>)r.z!>)r.z
 <!-- nested )rz -->�r.r�r�rq�rr�expecteds   r�
test_commentsz HTMLParserTestCase.test_comments�s6����,
�
�
��(	
����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]rqr�s   r�
test_condcomsz HTMLParserTestCase.test_condcomss9��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��SrX)rNrGrr�<lambda>z:HTMLParserTestCase.test_convert_charrefs.<locals>.<lambda>'s
��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�rr�r�r�z/{1}<script>{0}</script>{1}<style>{0}</style>{1}z&quo &# &#xr�no charrefs here)rr	)�
assertTruer_rk�format�join�range�len)rri�charrefsr�r3�textrrs        r�test_convert_charrefsz(HTMLParserTestCase.test_convert_charrefs%sG��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
�P�|�ddddgfdddddd	gfd
dg��dS)NzF<html <html>te>>xt&a<<bc</a></html>
<img src="URL><//img></html</html>rr)z<htmlN)rzte>>xt)r<r��rr�zbc<)r�Nr}rtrqrYs r�test_tolerant_parsingz(HTMLParserTestCase.test_tolerant_parsingNsT�����=�'��/�1B�C�.�.�)�'���
�>�.�*�?,�	-�	-�	-�	-�	-rc��|�ddg��|�ddg��|�ddg��|�ddg��|�d	g��|�d
dg��|�dd
g��|�ddg��|�dg��|�ddg��|�ddg��|�dddgfg��|�ddg��|�ddg��|�dg��|�dg��|�dg��|�dg��|�dg��|�d dd!gfg��|�d"dd#gfg��|�d$d%d#gfg��|�d&dd#gfg��|�d'd%d#gfg��|�d(d)g��dS)*Nr�r�<>)rr�< >)rr�< )rrz</>�<$>)rrz</$>)r.�$r�)rr�z</az</ a>)r.z az</ az<a<a>r�a<az</a<a>)r+rr�r�z<az<a foo='bar'z<a foo='barz
<a foo='>'z	<a foo='>z<a$>za$z<a$b>�a$bz<a$b/>r'z<a$b  >z<a$b  />z</a$b>)r+rrqrYs r�test_starttag_junk_charsz+HTMLParserTestCase.test_starttag_junk_charsYs`������m�_�-�-�-�����~�.�/�/�/������0�1�1�1�����~�.�/�/�/�����r�"�"�"������0�1�1�1�����!1� 2�3�3�3�����~�.�/�/�/�����r�"�"�"�����"3�!4�5�5�5�����!2� 3�4�4�4�����:�u�b�"9�!:�;�;�;�����#4�"5�6�6�6������/�0�0�0�����b�!�!�!������+�+�+����
�r�*�*�*�����b�)�)�)�����R�(�(�(�����*�d�B�!7� 8�9�9�9�����:�u�b�"9�!:�;�;�;�����M�5�"�#=�">�?�?�?����	�Z���$;�#<�=�=�=����
�m�U�B�%?�$@�A�A�A�����#4�"5�6�6�6�6�6rc
�<�|�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*/ />rx))�width�902)�height�250px)ryz,/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//>�metarqr�s   r�test_slashes_in_starttagz+HTMLParserTestCase.test_slashes_in_starttagts#�����(�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�b�|�ddg��|�ddg��dS)Nz</a/>r�z</a foo="var"/>rqrYs r�test_slashes_in_endtagz)HTMLParserTestCase.test_slashes_in_endtag�s7������/�!2�3�3�3����)�O�+<�=�=�=�=�=rc�4�|�ddg��dS)Nz<!DOCTYPE foo $ >)r9zDOCTYPE foo $ rqrYs 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"rqrYs 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<r�)r.z<h4)r+�lirqr�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 parserrqr�s   r�test_broken_invalid_end_tagz.HTMLParserTestCase.test_broken_invalid_end_tag�s=��9����b�)�$�#�4�6��	
����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>rr��r�r�r�)rzThe r�)r�some_url)r�rainr��rr�r'r2)rz in �span)r�Spain�r+r=r�r�z><div style="", foo = "bar" ><b>The <a href="some_url">rain</a>)r9��,N�r�r(rqr�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&)rrEza&b)r�abza&b )�rr��r<r�r<za&b;rGrHrq�rrrr�s    r�test_EOF_in_charrefz&HTMLParserTestCase.test_EOF_in_charref�st���N�#�$�
�^�$�%�
�G�G�G�H�
�m�%7�8�9�	
��#�	,�	,�N�D�(��O�O�D�(�+�+�+�+�	,�	,rc��ddgfddgfddgfddgfddgfd	dgfd
dgfdd
gfddgfddgfddgfddgfddgfddgfg}|D]\}}|�||���dS)Nr�r�z<!---z<!----z<!-----r�z<!------r�z<!----!z<!---!)r.z-!z<!---!>r�z<!--foo)r.r�z<!--foo-z	<!--foo--z
<!--foo--!z<!--<!--r�z	<!--<!--!rqrIs    r�test_eof_in_commentsz'HTMLParserTestCase.test_eof_in_comments�s���
�o�&�'�
��'�(�
��(�)�
�)�*�+�
�+�,�-�
��)�*�
�)�*�+�
�+�,�-�
�+�,�-�
�,�-�.�
�-�.�/�
�.�/�0�
�+�,�-�
�,�-�.�
�� #�	,�	,�N�D�(��O�O�D�(�+�+�+�+�	,�	,rc��ddgfddgfddgfddgfd	d
gfddgfd
dgfddgfddgfddgfg
}|D]\}}|�||���dS)Nr�r�r�r�z<![)r.�[z	<!DOCTYPE)r9�DOCTYPEz
<!DOCTYPE )r9r�z<!DOCTYPE html)r9zDOCTYPE htmlz<!DOCTYPE html )r9z
DOCTYPE html z<!DOCTYPE html PUBLIC)r9zDOCTYPE html PUBLICz<!DOCTYPE html PUBLIC "foo)r9zDOCTYPE html PUBLIC "fooz6<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foo)r9z4DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foorqrIs    r�test_eof_in_declarationsz+HTMLParserTestCase.test_eof_in_declarationss���
�O�$�%�
�%�&�'�
�%�&�'�
�.�/�0�
�0�1�2�
� 8�9�:�
�!:� ;�<�
$�'F�&G�H�
)�,P�+Q�R�
E�N�
O�
Q�
��#�	,�	,�N�D�(��O�O�D�(�+�+�+�+�	,�	,r)r�rzx]zx]]c���|�d|zdd|zfg��|�d|zdd|zfgtd������|�d	|zd
dgfd
dd
gfdd|zfg��dS)Nz	<![CDATA[rB�CDATA[r.z[CDATA[Trr��<svg><text y="100"><![CDATA[rr r�r�100r�)rr�s  r�test_eof_in_cdataz$HTMLParserTestCase.test_eof_in_cdatas�������g�-�(�(�W�*<�=�>�	@�	@�	@�����g�-�#�Y��%8�9�:�"0�4�"@�"@�"@�	�	B�	B�	B�	
���6��@�$�e�R�0�$�f�|�n�=�(�(�W�*<�=�?�	@�	@�	@�	@�	@rc�>�d}gd�}|�||��dS)Nz�<!ELEMENT br EMPTY><! not really a comment ><! not a comment either --><! -- close enough --><!><!<-- this was an empty comment><!!! another bogus comment !!!>))r.zELEMENT br EMPTY)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 !!!rqr�s   r�test_bogus_commentsz&HTMLParserTestCase.test_bogus_comments s6��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]>)rBzif !(IE))rzbroken condcom)rB�endif)rBzif ! IEr'�link)rzfavicon.tiff)rBzif !IE 6rx)ryzfirefox.png)rBzif !ie 6rr�)rr�r�)rBzif (!IE)|(lt IE 9))ryzmammoth.bmprqr�s   r�test_broken_condcomsz'HTMLParserTestCase.test_broken_condcoms2s���M��
)�&�%�'�
�F�%=�$>�?�%�(�
�E�$:�#;�<�%�(�
��b�!���%�2�
�E�$:�#;�<�%�#
��(	
����h�'�'�'�'�'r)zjust some plain textz<!-- not a comment -->z&not-an-entity-ref;r�r�z[[I have many brackets]]zI have a > in the middlezI have a ]] in the middlez] ]>z]] >zN
    if (a < b && a > b) {
        printf("[<marquee>How?</marquee>]");
    }
c��d|�d�}ddgfdddgfdd|zfd	d
g}|�||��|�||td����
��dS)NrSz]]></text></svg>rr rrTrBrR�r+r�r+r Trr�r�)rr�rr�s    r�test_cdata_section_contentz-HTMLParserTestCase.test_cdata_section_contentTs���&H�g�G�G�G��
���#�
��,��0�
�X��/�0���
��	
����h�'�'�'�����h�.�4�2P�2P�2P��Q�Q�Q�Q�Qrc	�z�d}ddddgfdddgfdd	d
ddg	}|�||td����
��dS)Nzb<![CDATA[foo<br>bar]]><svg><text y="100"><![CDATA[foo<br>bar]]></text></svg><![CDATA[foo<br>bar]]>)r.z
[CDATA[foo<br)rzbar]]>rr rrT)rBzCDATA[foo<br>barr^r_Trr�r�r�s   r�test_cdata_sectionz%HTMLParserTestCase.test_cdata_sectionrsh��)��
)��
���#�
��,��0�0���(��

��	
����h�.�4�2P�2P�2P��Q�Q�Q�Q�Qrc��td���}|�d��|�|���dddgfddd	g��dS)
NTr^zfoo <a>link</a> bar &amp; baz)rzfoo rr�)rr[r�)rz
 bar & baz)rrb�assertEqualr)rrs  r�"test_convert_charrefs_dropped_textz5HTMLParserTestCase.test_convert_charrefs_dropped_text�sr�� ��6�6�6�����3�4�4�4���������
�
�C��4�6F�
�4�
6�	
�	
�	
�	
�	
r�cpuc�(�d�}d}|d|z��|d|z��|d|z��|d|z��|d|z��|d|z��|d	|z��|d
|z��|d|z��|d|z��dS)
Nc��tj���}|�|��|���dSrX)rrr
rbrc)rgrs  r�checkzBHTMLParserTestCase.test_eof_no_quadratic_complexity.<locals>.check�s8���[�+�+�-�-�F��K�K������L�L�N�N�N�N�Nri��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<!doctyperG)rri�ns   r� test_eof_no_quadratic_complexityz3HTMLParserTestCase.test_eof_no_quadratic_complexity�s���	�	�	�
��
��e�a�i����
��g��k����
��k�A�o����
��m�a�� � � �
��j�1�n����
��i�!�m����
��i�!�m����
��j�1�n����
��o��!�"�"�"�
����"�#�#�#�#�#rN)4rDrErFrrr~r�r�r�r�r�r�r�r�r�r�r�subTestsr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr*r,r.r0r4r7rCrJrLrPrVrXr\r`rbre�requires_resourcerkrGrrroro�s(������������@������	�	�	����
���
L�L�L�4�4�4�<:�:�:�0���#�#�#��W��i�"
�"
�"
���������W��i�"
�"
�"
���2�2�
��2��W��e�g�z�2�3�3���4�3���W��e�G�G�G�I�I���I�I��5�5�5�,����W��h�!P�!P�!P�Q�Q�
U�
U�Q�Q�
U��W��e������	\�	\�	��	\��W��e������
M�
M�	��
M��W��l�%�%�%���M�M���M��W��j�	#�	#�	#�	�	�U�U�	�	�U��W��j�	#�	#�	#�	�	�	U�	U�	�	�	U�+(�+(�+(�Z(�(�(�%/�%/�%/�R	-�	-�	-�7�7�7�6(�(�(�>>�>�>�K�K�K�J�J�J�(�(�(�4(�(�(�(�(�(�B,�,�,�,�,�,�(,�,�,�"�W��i�!7�!7�!7�8�8�	@�	@�9�8�	@�(�(�(�$ (� (� (�D�W��i�"�"�"��� R�R�!�� R�R�R�R�$

�

�

��W��u�%�%�$�$�&�%�$�$�$rroc�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|��|�ddddgfg��|�ddddgfg��|�d	dddgfg��|�d
dddgfg��|�dddd
gfg��|�ddddgfg��|�ddddgfg��|�ddddgfg��|�ddddgfg��dS)Nrr�))r��v)�crq)�drq)�eNz<a b='v' c="v" d=v e>z<a foo==bar>)r�z=barz<a foo =bar>rBz<a foo	=bar>z<a foo=bar>)zfoor(u
<a foo =bar>)ufoo r(z<a foo= bar>z<a foo=	bar>z<a foo=bar>)r�zbaru
<a foo= bar>)r�u barrqr�s  r�test_attr_syntaxz#AttributesTestCase.test_attr_syntax�sf���s�M�M�M�
N�
��	
���3�V�<�<�<�����*�c�O�;L�)M�(N�O�O�O�����*�c�N�;K�)L�(M�N�N�N�����:�s�^�<L�*M�)N�O�O�O�����:�s�=M�<N�*O�)P�Q�Q�Q����)�Z��?Q�>R�,S�+T�U�U�U�����*�c�N�;K�)L�(M�N�N�N�����:�s�^�<L�*M�)N�O�O�O�����:�s�=M�<N�*O�)P�Q�Q�Q����)�Z��?Q�>R�,S�+T�U�U�U�U�Urc�R�|�dddgd�fg��|�dddddgfg��|�dddd	d
gfg��|�ddddd
gfg��|�ddddgfg��|�ddddgfg��dS)Nz'<a b='xxx
	xxx' c="yyy	
yyy" d='	xyz
'>rr�))r�zxxx
	xxx)rrzyyy	
yyy)rsz	xyz
z
<a b='' c="">)r�r�)rrr�z
<a b=	x c=
y>)r�r)rrru<a b= c= >)r��)rr� z<e a=rgb(1,2,3)>rt)r�z
rgb(1,2,3)z<a href=mailto:xyz@example.com>)rzmailto:xyz@example.comrqrYs r�test_attr_valuesz#AttributesTestCase.test_attr_values�s3�����K�$�c�,>�,>�,>�?�@�	A�	A�	A�	
���+�$�c�I�y�+A�B�C�	E�	E�	E����)�$�c�J�
�+C�D�E�	G�	G�	G����)�$�c�K��+G�H�I�	K�	K�	K�	
���*�$�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=中文>rrx)ryz/foo/bar.png)�altu中文u+<a title='テスト' href='テスト.html'>r�)r�u	テスト)ruテスト.htmlu+<a title="テスト" href="テスト.html">rqrYs r�test_attr_nonasciiz%AttributesTestCase.test_attr_nonascii�s������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�)r�z&><"'rqrYs 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.brq)zc:drq)ze-frqrqrYs 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;rqrYs 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�)rNr�)r�%rr)�\r�rqrYs 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�)rr�z
<a href='%s'>z<a href=%s>rq)rrvs  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�)rztest'style='color:red;bad1')rztest - bad1r�)rztest'+style='color:red;ba2')rztest - bad2)rutest' style='color:red;bad3')rztest - bad3)rutest' style='color:red;bad4')rztest - bad4rqr�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>rrr'r)rr�)zo""N)r+rz<x><y z="""" /></x>)z""NrqrYs r�"test_malformed_adjacent_attributesz5AttributesTestCase.test_malformed_adjacent_attributess������.�$�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(rqrYs r�test_adjacent_attributesz+AttributesTestCase.test_adjacent_attributesst�����7�$�c�,�.A�B�D�E�	F�	F�	F�	
���1�$�c�(�/�:�<�=�	>�	>�	>�	>�	>rc�<�|�ddddgfg��dS)Nz<a v=>rr�)rqr�rqrYs 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�)rz$javascript:popup('/popup/help.html')rqrYs 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�)rzhttp://www.example.org/">;)r�spamr�rqrYs 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)r�)�cellpaddingr�r��tr�td)�align�left�font)�sizez-1)rz- r�)rz/rabota/r=)r��en)rz software-and-ir?r�)rz/1/)rz library)r+r�rqr�s   r�test_with_unquoted_attributesz0AttributesTestCase.test_with_unquoted_attributes6s���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">rr�)r�zbar,baz=asdr�)z,baz�asd)r�zbar,)�bazzasd,)r�r@)r�r�r@r@)r�z,bar)r�z,asd)r�z,"bar")r�z,"asd")z,classr()zclass,r()zbaz,r�rqr�s   r�test_comma_between_attributesz0AttributesTestCase.test_comma_between_attributesNs���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|&#()valuerqrYs r�-test_weird_chars_in_unquoted_attribute_valuesz@AttributesTestCase.test_weird_chars_in_unquoted_attribute_valuesjsA�����7�'��!>� ?�A�:B�	C�	C�	C�	C�	CrN)rDrErFruryr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�rGrrroro�s-������
V�
V�
V�G�G�G�&
H�
H�
H�4�4�4�
M�M�M�
I�I�I�0�0�0�B�B�B�(�(�(�0	.�	.�	.�>�>�>�:�:�:�P�P�P�
=�=�=�(�(�(�0(�(�(�8C�C�C�C�Crro�__main__)�__doc__�html.parserrre�unittest�testrr�r�rr
rrIrNrV�TestCaser[rororD�mainrGrr�<module>r�s���������
�
�
�
�����������
����/��=,�=,�=,�=,�=,�T�[�+�=,�=,�=,�@A�A�A�A�A�.�A�A�A�L�L�L�L�L�^�L�L�L����������
E�E�E�E�E�8�$�E�E�E�0]$�]$�]$�]$�]$��]$�]$�]$�@HC�HC�HC�HC�HC��HC�HC�HC�T�z����H�M�O�O�O�O�O��r