HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-311.pyc
�

��nc�l����dZddlZddlZddlZddlmZddlmZddlm	Z	m
Z
ddlmZGd�d	e��Z
Gd
�de��ZGd�d
e��ZGd�de��ZdS)z*Tests of the bs4.element.PageElement class�N)�SelectorSyntaxError)�
BeautifulSoup)�Comment�SoupStrainer�)�SoupTestc�B�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�TestEncodingz0Test the ability to encode objects into strings.c��d}|�|��}|jj�d��d�d��ksJ�dS)N�
<b>☃</b>�utf-8�☃)�soup�b�string�encode��self�htmlrs   �<D:\Python311\Lib\site-packages\bs4/tests/test_pageelement.py�"test_unicode_string_can_be_encodedz/TestEncoding.test_unicode_string_can_be_encodedsM��#���y�y������v�}�#�#�G�,�,�
�0D�0D�W�0M�0M�M�M�M�M�M�M�c��d}|�|��}|j�d��|�d��ksJ�dS)Nrr
�rrrrs   r�1test_tag_containing_unicode_string_can_be_encodedz>TestEncoding.test_tag_containing_unicode_string_can_be_encodedsG��#���y�y������v�}�}�W�%�%����W�)=�)=�=�=�=�=�=�=rc�t�d}|�|��}|j�d��dksJ�dS)Nr�asciis<b>&#9731;</b>rrs   r�<test_encoding_substitutes_unrecognized_characters_by_defaultzITestEncoding.test_encoding_substitutes_unrecognized_characters_by_defaults<��#���y�y������v�}�}�W�%�%�):�:�:�:�:�:�:rc���d}|�|��}tjt��5|�dd���ddd��dS#1swxYwYdS)Nrr�strict)�errors)r�pytest�raises�UnicodeEncodeErrorrrs   r� test_encoding_can_be_made_strictz-TestEncoding.test_encoding_can_be_made_strict"s���#���y�y�����
�]�-�
.�
.�	2�	2��K�K���K�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�	2�	2s�A�A�Ac�r�d}|�|��}d|j���ksJ�dS)Nrr)rr�decode_contentsrs   r�test_decode_contentsz!TestEncoding.test_decode_contents(s;��#���y�y�������� 6� 6� 8� 8�8�8�8�8�8�8rc��d}|�|��}d�d��|j�d���ksJ�dS)Nrr�utf8)�encoding)rrr�encode_contentsrs   r�test_encode_contentsz!TestEncoding.test_encode_contents-sb��#���y�y������#�#�F�+�+�t�v�/E�/E��0F�0
�0
�
�	
�	
�	
�	
�	
rc��d}|�|��}d�d��|j���ksJ�dS)Nrrr*)rrr�renderContentsrs   r�test_deprecated_renderContentsz+TestEncoding.test_deprecated_renderContents4sI��#���y�y������#�#�F�+�+�t�v�/D�/D�/F�/F�F�F�F�F�F�Frc�^�d}|�|��}|t|��ksJ�dS�Nr)r�reprrs   r�	test_reprzTestEncoding.test_repr9s3��#���y�y������t�D�z�z�!�!�!�!�!�!rN)�__name__�
__module__�__qualname__�__doc__rrrr%r(r-r0r4�rrr
r
s�������:�:�N�N�N�
>�>�>�
;�;�;�
2�2�2�9�9�9�

�
�
�G�G�G�
"�"�"�"�"rr
c�r�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�ZdS)�TestFormatterszrTest the formatting feature, used by methods like decode() and
    prettify(), and the formatters themselves.
    c��d}|�|��}|�d���}||�d��ksJ�dS�N�#<b>&lt;&lt;Sacré bleu!&gt;&gt;</b>�minimal��	formatter�r�decode�document_for�r�markupr�decodeds    r�!test_default_formatter_is_minimalz0TestFormatters.test_default_formatter_is_minimalD�a��W���y�y�� � ���+�+�	�+�2�2���$�+�+�V�
�
�
�	
�	
�	
�	
�	
rc��d}|�|��}|�d���}||�d��ksJ�dS)N�'<br><b>&lt;&lt;Sacré bleu!&gt;&gt;</b>rr@z.<br/><b>&lt;&lt;Sacr&eacute; bleu!&gt;&gt;</b>rBrEs    r�test_formatter_htmlz"TestFormatters.test_formatter_htmlMsa��[���y�y�� � ���+�+��+�/�/���$�+�+�<�
�
�
�	
�	
�	
�	
�	
rc��d}|�|��}|�d���}||�d��ksJ�dS)NrK�html5r@z-<br><b>&lt;&lt;Sacr&eacute; bleu!&gt;&gt;</b>rBrEs    r�test_formatter_html5z#TestFormatters.test_formatter_html5Usa��[���y�y�� � ���+�+��+�0�0���$�+�+�;�
�
�
�	
�	
�	
�	
�	
rc��d}|�|��}|�d���}||�d��ksJ�dSr=rBrEs    r�test_formatter_minimalz%TestFormatters.test_formatter_minimal]rIrc��d}|�|��}|�d���}||�d��ksJ�dS)Nr>r@u<b><<Sacré bleu!>></b>rBrEs    r�test_formatter_nullz"TestFormatters.test_formatter_nullfsc��W���y�y�� � ���+�+��+�-�-���$�+�+�F�
�
�
�	
�	
�	
�	
�	
rc��d}|�|��}|�d����}||�d��ksJ�dS)Nz!<b>&lt;foo&gt;</b><b>bar</b><br/>c�*�|���S�N��upper��xs r�<lambda>z6TestFormatters.test_formatter_custom.<locals>.<lambda>ss��A�G�G�I�I�rr@z<b><FOO></b><b>BAR</b><br/>rBrEs    r�test_formatter_customz$TestFormatters.test_formatter_custompsW��4���y�y�� � ���+�+�*=�*=�+�>�>���$�+�+�,I�J�J�J�J�J�J�J�Jrc�d�d}|�|��}|j}d}||���ksJ�||�d���ksJ�d}||�d���ksJ�||�d���ksJ�d}||�d����ksJ�dS)	Nu%<a href="http://a.com?a=b&c=é">e</a>u)<a href="http://a.com?a=b&amp;c=é">e</a>r?r@z/<a href="http://a.com?a=b&amp;c=&eacute;">e</a>ru%<a href="HTTP://A.COM?A=B&C=É">E</a>c�*�|���SrVrWrYs rr[zJTestFormatters.test_formatter_is_run_on_attribute_values.<locals>.<lambda>�s��A�G�G�I�I�r)r�arC)rrFrr_�expect_minimal�expect_html�expect_uppers       r�)test_formatter_is_run_on_attribute_valuesz8TestFormatters.test_formatter_is_run_on_attribute_valuesxs���8���y�y�� � ���F��D��������+�+�+�+�����I��!>�!>�>�>�>�>�G���a�h�h��h�8�8�8�8�8�8�����D��1�1�1�1�1�1�>���q�x�x�2E�2E�x�F�F�F�F�F�F�F�Frc�Z�d}t|d�����}d|vsJ�dS)NzO
  <script type="text/javascript">
   console.log("< < hey > > ");
  </script>
�html.parser�< < hey > >�rr�r�doc�encodeds   r�2test_formatter_skips_script_tag_for_html_documentszATestFormatters.test_formatter_skips_script_tag_for_html_documents��=����
 ��]�3�3�:�:�<�<����(�(�(�(�(�(rc�Z�d}t|d�����}d|vsJ�dS)NzF
  <style type="text/css">
   console.log("< < hey > > ");
  </style>
rerfrgrhs   r�1test_formatter_skips_style_tag_for_html_documentsz@TestFormatters.test_formatter_skips_style_tag_for_html_documents�rlrc�n�|�d��}d|j���ksJ�dS)NzN<div>  foo  <pre>  	bar
  
  </pre>  baz  <textarea> eee
fff	</textarea></div>zO<div>
 foo
 <pre>  	bar
  
  </pre>
 baz
 <textarea> eee
fff	</textarea>
</div>)r�div�prettify�rrs  r�,test_prettify_leaves_preformatted_text_alonez;TestFormatters.test_prettify_leaves_preformatted_text_alone�sX���y�y�n�o�o��k�nr�nv�n�n�oB�oB�B�	B�	B�	B�	B�	Brc�`�tdd��}|�d����}d|vsJ�dS)Nz<html><body>foo</body></html>rec�*�|���SrVrWrYs rr[zITestFormatters.test_prettify_accepts_formatter_function.<locals>.<lambda>�s��Q�W�W�Y�Y�rr@�FOO)rrq)rr�prettys   r�(test_prettify_accepts_formatter_functionz7TestFormatters.test_prettify_accepts_formatter_function�s?���<�m�L�L�����+>�+>��?�?���������rc��|�d��}tt|�����ksJ�dS)N�<a></a>)r�str�typerqrrs  r�(test_prettify_outputs_unicode_by_defaultz7TestFormatters.test_prettify_outputs_unicode_by_default�s:���y�y��#�#���d�4�=�=�?�?�+�+�+�+�+�+�+�+rc��|�d��}tt|�d����ksJ�dS)Nrzr
)r�bytesr|rqrrs  r�test_prettify_can_encode_dataz,TestFormatters.test_prettify_can_encode_data�s>���y�y��#�#����T�]�]�7�3�3�4�4�4�4�4�4�4�4rc��d}|�|��}|j�d��}||�d��ksJ�dS)Nu<b>Sacré bleu!</b>r
r)rrFrrjs    r�,test_html_entity_substitution_off_by_defaultz;TestFormatters.test_html_entity_substitution_off_by_default�sN��G���y�y�� � ���&�-�-��(�(���&�-�-��0�0�0�0�0�0�0�0rc�X�d}|�|��}|jddksJ�|�d��}d|vsJ�|�d��}d|vsJ�|�d��}d	|vsJ�|�d
���d
��}d|vsJ�dS)NzE<meta content="text/html; charset=x-sjis" http-equiv="Content-type"/>�contentztext/html; charset=x-sjisr
s
charset=utf-8�euc_jpscharset=euc_jpz	shift-jisscharset=shift-jiszutf-16zcharset=utf-16)r�metarrC)r�meta_tagr�utf_8r��	shift_jis�utf_16_us       r�test_encoding_substitutionz)TestFormatters.test_encoding_substitution�s���2���y�y��"�"���y��#�'B�B�B�B�B����G�$�$���5�(�(�(�(����X�&�&�� �F�*�*�*�*��K�K��,�,�	�#�y�0�0�0�0��;�;�x�(�(�/�/��9�9���8�+�+�+�+�+�+rc��d}td��}|�||���}|jdjdksJ�dS)Nz`<head><meta content="text/html; charset=x-sjis" http-equiv="Content-type"/></head><pre>foo</pre>�pre)�
parse_onlyr)rr�contents�name)rrF�strainerrs    r�;test_encoding_substitution_doesnt_happen_if_tag_is_strainedzJTestFormatters.test_encoding_substitution_doesnt_happen_if_tag_is_strained�sO��G�� ��&�&���y�y��H�y�5�5���}�Q��$��-�-�-�-�-�-rN)r5r6r7r8rHrLrOrQrSr\rcrkrnrsrxr}r�r�r�r�r9rrr;r;?s��������
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�K�K�K�G�G�G�")�)�)�)�)�)�B�B�B����
,�,�,�5�5�5�1�1�1�,�,�,�0	.�	.�	.�	.�	.rr;c�p�eZdZdZdZd�Zd�ZeZd�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�Zd�Z d�Z!d�Z"d �Z#d!�Z$d"�Z%d#�Z&d$�Z'd%�Z(d&�Z)d'�Z*d(�Z+d)�Z,d*�Z-d+�Z.d,�Z/d-�Z0d.�Z1d/�Z2d0�Z3d1�Z4d2�Z5d3�Z6d4�Z7d5�Z8d6�Z9d7�Z:d8�Z;d9�Z<d:�Z=d;�Z>d<S)=�TestCSSSelectorsz�Test basic CSS selector functionality.

    This functionality is implemented in soupsieve, which has a much
    more comprehensive test suite, so this is basically an extra check
    that soupsieve works as expected.
    a�
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>The title</title>
<link rel="stylesheet" href="blah.css" type="text/css" id="l1">
</head>
<body>
<custom-dashed-tag class="dashed" id="dash1">Hello there.</custom-dashed-tag>
<div id="main" class="fancy">
<div id="inner">
<h1 id="header1">An H1</h1>
<p>Some text</p>
<p class="onep" id="p1">Some more text</p>
<h2 id="header2">An H2</h2>
<p class="class1 class2 class3" id="pmulti">Another</p>
<a href="http://bob.example.org/" rel="friend met" id="bob">Bob</a>
<h2 id="header3">Another H2</h2>
<a id="me" href="http://simonwillison.net/" rel="me">me</a>
<span class="s1">
<a href="#" id="s1a1">span1a1</a>
<a href="#" id="s1a2">span1a2 <span id="s1a2s1">test</span></a>
<span class="span2">
<a href="#" id="s2a1">span2a1</a>
</span>
<span class="span3"></span>
<custom-dashed-tag class="dashed" id="dash2"/>
<div data-tag="dashedvalue" id="data1"/>
</span>
</div>
<x id="xid">
<z id="zida"/>
<z id="zidab"/>
<z id="zidac"/>
</x>
<y id="yid">
<z id="zidb"/>
</y>
<p lang="en" id="lang-en">English</p>
<p lang="en-gb" id="lang-en-gb">English UK</p>
<p lang="en-us" id="lang-en-us">English US</p>
<p lang="fr" id="lang-fr">French</p>
</div>

<div id="footer">
</div>
c�:�t|jd��|_dS)Nre)r�HTMLr�rs r�setup_methodzTestCSSSelectors.setup_methods��!�$�)�]�;�;��	�	�	rc	��d�|jj|fi|��D��}|���|���||ks:Jd|�dd�|���dd�|���d����dS)Nc��g|]
}|d��S��idr9)�.0�els  r�
<listcomp>z3TestCSSSelectors.assert_selects.<locals>.<listcomp>s��J�J�J�r�"�T�(�J�J�Jrz	Selector z, expected [z, z], got [�])r�select�sort�join)r�selector�expected_ids�kwargs�el_idss     r�assert_selectszTestCSSSelectors.assert_selectss���J�J�%5�T�Y�%5�h�%I�%I�&�%I�%I�J�J�J�����
�
�
��������v�%�	
�	
�	
����$�)�)�L�1�1�1�1�4�9�9�V�3D�3D�3D�3D�(
�	
�	
�	
�	
�	
rc�B�|D]\}}|�||���dSrV�r�)r�testsr�r�s    r�assert_select_multiplez'TestCSSSelectors.assert_select_multiples9��&+�	8�	8�"�H�l�����,�7�7�7�7�	8�	8rc��|j�d��}t|��dksJ�|djdksJ�|djdgksJ�dS)N�titlerrz	The title)rr��lenr�r��r�elss  r�test_one_tag_onez!TestCSSSelectors.test_one_tag_one"sc���i���w�'�'���3�x�x�1�}�����1�v�{�g�%�%�%�%��1�v��;�-�/�/�/�/�/�/rc���|j�d��}t|��dksJ�|D]}|jdksJ��|j�d��}d|dksJ�dS)Nrp��mainr�)rr�r�r��
select_one)rr�rpr�s    r�test_one_tag_manyz"TestCSSSelectors.test_one_tag_many(s����i���u�%�%���3�x�x�1�}�����	%�	%�C��8�u�$�$�$�$�$�
�Y�
!�
!�%�
(�
(����D��!�!�!�!�!�!rc�J�|j�d��}d|ksJ�dS)N�nonexistenttag)rr�)r�matchs  r�(test_select_one_returns_none_if_no_matchz9TestCSSSelectors.test_select_one_returns_none_if_no_match1s.���	�$�$�%5�6�6���u�}�����rc�j�|j�d��}|�dddg��dS)Nzdiv div�inner�data1)rr�r�r�s  r�test_tag_in_tag_onez$TestCSSSelectors.test_tag_in_tag_one6s8���i���y�)�)�����I���'9�:�:�:�:�:rc�@�dD]}|�|gd����dS)N)�html div�
html body div�body div�r�r�r��footerr��rr�s  r�test_tag_in_tag_manyz%TestCSSSelectors.test_tag_in_tag_many:s?��A�	P�	P�H�����*N�*N�*N�O�O�O�O�	P�	Prc��|�ddgd���|�dddgd���|�dgd	�d
���dS)Nr�r�r)�limitr�r��r�r��
r�r�s r�
test_limitzTestCSSSelectors.test_limit?st�����J�����:�:�:����O�g�v�->�a��H�H�H����J�(L�(L�(L�!#�	�	%�	%�	%�	%�	%rc�`�t|j�d����dksJ�dS)N�delr�r�rr�r�s r�test_tag_no_matchz"TestCSSSelectors.test_tag_no_matchEs1���4�9�#�#�E�*�*�+�+�q�0�0�0�0�0�0rc��tjt��5|j�d��ddd��dS#1swxYwYdS)Nztag%t�r"r#rrr�r�s r�test_invalid_tagz!TestCSSSelectors.test_invalid_tagHs���
�]�.�
/�
/�	&�	&��I���W�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&��A�A�	Ac�6�|�dddg��dS)N�custom-dashed-tag�dash1�dash2r�r�s r�test_select_dashed_tag_idsz+TestCSSSelectors.test_select_dashed_tag_idsLs$�����/�'�7�1C�D�D�D�D�Drc��|j�d��}|djdksJ�|dddksJ�dS)Nzcustom-dashed-tag[id="dash2"]rr�r�r�)rr�r�)r�dasheds  r�test_select_dashed_by_idz)TestCSSSelectors.test_select_dashed_by_idOsO����!�!�"C�D�D���a�y�~�!4�4�4�4�4��a�y���'�)�)�)�)�)�)rc�\�|j�d��djdksJ�dS)Nzbody > custom-dashed-tagrzHello there.)rr��textr�s r�test_dashed_tag_textz%TestCSSSelectors.test_dashed_tag_textTs2���y��� :�;�;�A�>�C�~�U�U�U�U�U�Urc�v�|j�d��|j�d��ksJ�dS)Nr�)rr��find_allr�s r�#test_select_dashed_matches_find_allz4TestCSSSelectors.test_select_dashed_matches_find_allWs;���y��� 3�4�4��	�8J�8J�K^�8_�8_�_�_�_�_�_�_rc�@�|�ddgfdddgf��dS)N�h1�header1�h2�header2�header3�r�r�s r�test_header_tagsz!TestCSSSelectors.test_header_tagsZs;���#�#�
�I�;��
�I�y�)�*�	
�	
�	
�	
�	
rc��dD]Y}|j�|��}t|��dksJ�|djdksJ�|dddgksJ��ZdS)N)z.onepzp.onepzhtml p.oneprr�p�class�onep)rr�r�r�)rr�r�s   r�test_class_onezTestCSSSelectors.test_class_one`s{��:�	/�	/�H��)�"�"�8�,�,�C��s�8�8�q�=� � � ��q�6�;�#�%�%�%�%��q�6�'�?�v�h�.�.�.�.�.�		/�	/rc�d�|j�d��}t|��dksJ�dS)Nzdiv.onepr�rr�r�r�s  r�test_class_mismatched_tagz*TestCSSSelectors.test_class_mismatched_taggs3���i���z�*�*���3�x�x�1�}�����rc�>�dD]}|�|dg���dS)N)z	div#innerz#innerz
div div#innerr�r�r�s  r�test_one_idzTestCSSSelectors.test_one_idks6��@�	5�	5�H�����7�)�4�4�4�4�	5�	5rc�d�|j�d��}t|��dksJ�dS)Nz
#doesnotexistrr�r�s  r�test_bad_idzTestCSSSelectors.test_bad_idos3���i����/�/���3�x�x�1�}�����rc���|j�d��}t|��dksJ�|D]}|jdksJ��|dddgksJ�|d�d��rJ�dS)Nzdiv#inner p�r�rr�r�r)rr�r�r��has_attr)rr�r�s   r�test_items_in_idz!TestCSSSelectors.test_items_in_idss����i���}�-�-���3�x�x�1�}�����	"�	"�B��7�c�>�!�!�!�!��1�v�g��6�(�*�*�*�*��q�6�?�?�7�+�+�+�+�+�+�+rc�j�dD]/}t|j�|����dksJ��0dS)N)zdiv#main delzdiv#main div.oopszdiv div#mainrr�r�s  r�test_a_bunch_of_emptysz'TestCSSSelectors.test_a_bunch_of_emptys{sG��M�	8�	8�H��t�y�'�'��1�1�2�2�a�7�7�7�7�7�	8�	8rc�>�dD]}|�|dg���dS)N)z.class1zp.class1z.class2zp.class2z.class3zp.class3z
html p.class2zdiv#inner .class2�pmultir�r�s  r�test_multi_class_supportz)TestCSSSelectors.test_multi_class_supports9��I�	6�	6�H�����8�*�5�5�5�5�	6�	6rc�>�dD]}|�|dg���dS)N)z.class1.class3z.class3.class2z.class1.class2.class3r�r�r�s  r�test_multi_class_selectionz+TestCSSSelectors.test_multi_class_selection�s8��2�	6�	6�H�����8�*�5�5�5�5�	6�	6rc�d�|�dddg��|�ddg��dS)Nz.s1 > a�s1a1�s1a2z.s1 > a span�s1a2s1r�r�s r�test_child_selectorz$TestCSSSelectors.test_child_selector�s;�����I���'7�8�8�8����N�X�J�7�7�7�7�7rc�4�|�ddg��dS)Nz.s1 > a#s1a2 spanrr�r�s r�test_child_selector_idz'TestCSSSelectors.test_child_selector_id�s!�����/�(��<�<�<�<�<rc��|�ddgfddgfddgfddgfddgfddgfd	dgfd
gfddgfddgfd
dgfdgfdgfdgf��dS)Nzp[class="onep"]�p1z
p[id="p1"]z[class="onep"]z	[id="p1"]zlink[rel="stylesheet"]�l1zlink[type="text/css"]zlink[href="blah.css"]zlink[href="no-blah.css"]z[rel="stylesheet"]z[type="text/css"]z[href="blah.css"]z[href="no-blah.css"]zp[href="no-blah.css"]r�r�s r�test_attribute_equalsz&TestCSSSelectors.test_attribute_equals�s����#�#�
���'�
�D�6�"�
��v�&�
�4�&�!�
%��v�.�
$�t�f�-�
$�t�f�-�
'��,�
!�D�6�*�
 �4�&�)�
 �4�&�)�
#�R�(�
$�b�)�
#�R�(�	
�	
�	
�	
�	
rc
�~�|�ddgfddgfddgfddgfddgfddgfdd	gfd
d	gfdd	gfdd	gf�
�
dS)
Nzp[class~="class1"]r�zp[class~="class2"]zp[class~="class3"]z[class~="class1"]z[class~="class2"]z[class~="class3"]za[rel~="friend"]�bobz
a[rel~="met"]z[rel~="friend"]z[rel~="met"]r�r�s r�test_attribute_tildez%TestCSSSelectors.test_attribute_tilde�s����#�#�
!�H�:�.�
!�H�:�.�
!�H�:�.�
 �8�*�-�
 �8�*�-�
 �8�*�-�
�%��)�
�u�g�&�
���(�
�e�W�%�	
�	
�	
�	
�	
rc��|�ddgfddgfdgfdgfdgfddgfdd	d
gfdd	d
gfdd
dgfdd
dgfddgfdd
gfddgf�
�
dS)Nz[rel^="style"]rzlink[rel^="style"]znotlink[rel^="notstyle"]z[rel^="notstyle"]zlink[rel^="notstyle"]zlink[href^="bla"]za[href^="http://"]r�mez[href^="http://"]z	[id^="p"]r�r
z	[id^="m"]r�zdiv[id^="m"]z
a[id^="m"]zdiv[data-tag^="dashed"]r�r�r�s r�test_attribute_startswithz*TestCSSSelectors.test_attribute_startswith�s����#�#�
��v�&�
!�D�6�*�
'��,�
 �"�%�
$�b�)�
 �4�&�)�
!�E�4�=�1�
 �5�$�-�0�
�8�T�*�+�
�4��.�)�
�f�X�&�
�D�6�"�
&��	�2�	
�	
�	
�	
�	
rc	�^�|�ddgfddgfddgfdgd�fddgfd	gf��dS)
Nz[href$=".css"]rzlink[href$=".css"]z
link[id$="1"]z	[id$="1"])r�rr
r�r�s2a1rr�zdiv[id$="1"]r�z[id$="noending"]r�r�s r�test_attribute_endswithz(TestCSSSelectors.test_attribute_endswith�sc���#�#�
��v�&�
!�D�6�*�
�t�f�%�
�]�]�]�^�
�g�Y�'�
��$�
	
�	
�	
�	
�	
rc���|�ddgfddgfdgfdgfdgfddgfdd	d
gfddd
gfddgfdd
gfddgfddgfddgfdgd�fddgfdgfdgd�fdd	d
gfddgfdddgfddgfd dgf��dS)!Nz[rel*="style"]rzlink[rel*="style"]znotlink[rel*="notstyle"]z[rel*="notstyle"]zlink[rel*="notstyle"]zlink[href*="bla"]z[href*="http://"]rrz	[id*="p"]r�r
zdiv[id*="m"]r�z
a[id*="m"]z[href*=".css"]zlink[href*=".css"]z
link[id*="1"]z	[id*="1"])	r�rr
r�rrrrr�zdiv[id*="1"]r�z[id*="noending"]z[href*="."])rrrza[href*="."]zlink[href*="."]zdiv[id*="n"]r�z
div[id*="nn"]zdiv[data-tag*="edval"]r�r�s r�test_attribute_containsz(TestCSSSelectors.test_attribute_contains�s���#�#�
��v�&�
!�D�6�*�
'��,�
 �"�%�
$�b�)�
 �4�&�)�
 �5�$�-�0�
�8�T�*�+�
�f�X�&�
�D�6�"�
��v�&�
!�D�6�*�
�t�f�%�
�e�e�e�f�
�g�Y�'�
��$�
�/�/�/�0�
�e�T�]�+�
���'�
�f�g�.�/�
�w�i�(�
%��y�1�3	
�	
�	
�	
�	
rc�P�|�dgd�fdgd�fddgfdgf��dS)Nz
p[lang|="en"])�lang-en�
lang-en-gb�
lang-en-usz[lang|="en"]z
p[lang|="fr"]�lang-frz
p[lang|="gb"]r�r�s r�test_attribute_exact_or_hypenz.TestCSSSelectors.test_attribute_exact_or_hypen�sT���#�#�
�E�E�E�F�
�D�D�D�E�
�y�k�*�
�b�!�		
�	
�	
�	
�	
rc�r�|�dgd�fddgfdddgfdgd	�fd
ddgfd
gfdgfddgf��dS)Nz[rel])rrrz	link[rel]rza[rel]rrz[lang])rrrrzp[class]r
r�z[blah]zp[blah]z
div[data-tag]r�r�r�s r�test_attribute_existsz&TestCSSSelectors.test_attribute_exists�s}���#�#�
�)�)�)�*�
�4�&�!�
��t�}�%�
�I�I�I�J�
�$��)�*�
�r�N�
��O�
�w�i�(�		
�		
�		
�		
�		
rc�r�d}t|d��}|�d��\}d|jksJ�dS)Nz]<div style="display: wrong">nope</div>
        <div style="display: right">yes</div>
        rezdiv[style="display: right"]�yes)rr�r)rrr�chosens    r�"test_quoted_space_in_selector_namez3TestCSSSelectors.test_quoted_space_in_selector_name�sG�����T�=�1�1���;�;�<�=�=�����
�%�%�%�%�%�%rc�4�tjt��5|j�d��ddd��n#1swxYwYtjt
��5|j�d��ddd��dS#1swxYwYdS)Nza:no-such-pseudoclassza:nth-of-type(a))r"r#�NotImplementedErrorrr�rr�s r�test_unsupported_pseudoclassz-TestCSSSelectors.test_unsupported_pseudoclasss
��
�]�.�
/�
/�	6�	6��I���4�5�5�5�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6��]�.�
/�
/�	1�	1��I���/�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1�#�A�A�A�%B
�
B�Bc���|j�d��}t|��dksJ�|djdksJ�|j�d��}t|��dksJ�|djdksJ�|j�d��}t|��dksJ�|j�d��}t|��dksJ�dS)	Nzdiv#inner p:nth-of-type(1)rr�	Some textzdiv#inner p:nth-of-type(3)�Anotherzdiv#inner p:nth-of-type(4)zdiv p:nth-of-type(0)�rr�r�rr�s  r�test_nth_of_typez!TestCSSSelectors.test_nth_of_types����i���;�<�<���3�x�x�1�}�����1�v�}��+�+�+�+��i���;�<�<���3�x�x�1�}�����1�v�}�	�)�)�)�)��i���;�<�<���3�x�x�1�}�����i���5�6�6���3�x�x�1�}�����rc��|j�d��}t|��dksJ�|djdksJ�dS)Nzdiv#inner > p:nth-of-type(1)rrr)r+r�s  r�"test_nth_of_type_direct_descendantz3TestCSSSelectors.test_nth_of_type_direct_descendantsK���i���=�>�>���3�x�x�1�}�����1�v�}��+�+�+�+�+�+rc�4�|�ddg��dS)Nz#inner > p:nth-of-type(2)r
r�r�s r�"test_id_child_selector_nth_of_typez3TestCSSSelectors.test_id_child_selector_nth_of_type#s!�����7�$��@�@�@�@�@rc��|j�dd���}|�d��}|�|ddg��dS)Nrpr�r�r�r�)r�findr��assert_selects_ids)rr��selecteds   r�test_select_on_elementz'TestCSSSelectors.test_select_on_element&sO���	���u���0�0���<�<��&�&��	
����7�G�*<�=�=�=�=�=rc�`�|�ddg��|�dg��dS)Nz
.fancy #innerr�z.normal #innerr�r�s r�test_overspecified_child_idz,TestCSSSelectors.test_overspecified_child_id/s7�����O�g�Y�7�7�7����,�b�1�1�1�1�1rc���|�ddg��|�ddg��|�ddg��g|j�d��ksJ�dS)Nz#p1 + h2r�z#p1 + h2 + pr�z#p1 + #header2 + .class1z#p1 + p�r�rr�r�s r�test_adjacent_sibling_selectorz/TestCSSSelectors.test_adjacent_sibling_selector3sr�����J���4�4�4����N�X�J�7�7�7����6��
�C�C�C��T�Y�%�%�i�0�0�0�0�0�0�0�0rc��|�dddg��|�ddg��|�ddg��|�ddg��g|j�d��ksJ�dS)	Nz#p1 ~ h2r�r�z#p1 ~ #header2z#p1 ~ h2 + arz#p1 ~ h2 + [rel="me"]z#inner ~ h2r9r�s r�test_general_sibling_selectorz.TestCSSSelectors.test_general_sibling_selector9s������J��I�(>�?�?�?����,�y�k�:�:�:����N�T�F�3�3�3����3�d�V�<�<�<��T�Y�%�%�m�4�4�4�4�4�4�4�4rc��tjt��5|j�d��ddd��dS#1swxYwYdS)Nzh1 >r�r�s r�test_dangling_combinatorz)TestCSSSelectors.test_dangling_combinator@s���
�]�.�
/�
/�	%�	%��I���V�$�$�$�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�	%�	%r�c�6�|�dgd���dS)Nzp[lang] ~ p)rrrr�r�s r�2test_sibling_combinator_wont_select_same_tag_twicezCTestCSSSelectors.test_sibling_combinator_wont_select_same_tag_twiceDs%�����M�+R�+R�+R�S�S�S�S�Src�6�|�dddg��dS)Nzx, y�xid�yidr�r�s r�test_multiple_selectz%TestCSSSelectors.test_multiple_selectHs"�����F�U�E�N�3�3�3�3�3rc�6�|�dddg��dS)Nzx,yrBrCr�r�s r�"test_multiple_select_with_no_spacez3TestCSSSelectors.test_multiple_select_with_no_spaceKs"�����E�E�5�>�2�2�2�2�2rc�6�|�dddg��dS)Nzx,    yrBrCr�r�s r�$test_multiple_select_with_more_spacez5TestCSSSelectors.test_multiple_select_with_more_spaceNs"�����I��u�~�6�6�6�6�6rc�4�|�ddg��dS)Nzx, xrBr�r�s r�test_multiple_select_duplicatedz0TestCSSSelectors.test_multiple_select_duplicatedQs �����F�U�G�,�,�,�,�,rc�6�|�dddg��dS)Nzx, y ~ p[lang=fr]rBrr�r�s r�test_multiple_select_siblingz-TestCSSSelectors.test_multiple_select_siblingTs$�����/�%��1C�D�D�D�D�Drc�6�|�dddg��dS)Nzx, y > zrB�zidbr�r�s r�.test_multiple_select_tag_and_direct_descendantz?TestCSSSelectors.test_multiple_select_tag_and_direct_descendantWs"�����J����8�8�8�8�8rc�6�|�dgd���dS)Nz
div > x, y, z�rBrC�zidarN�zidab�zidacr�r�s r�/test_multiple_select_direct_descendant_and_tagsz@TestCSSSelectors.test_multiple_select_direct_descendant_and_tagsZs%�����O�-]�-]�-]�^�^�^�^�^rc�6�|�dgd���dS)Nzdiv x,y,  zrQr�r�s r�(test_multiple_select_indirect_descendantz9TestCSSSelectors.test_multiple_select_indirect_descendant]s%�����M�+[�+[�+[�\�\�\�\�\rc�4�tjt��5|j�d��ddd��n#1swxYwYtjt��5|j�d��ddd��dS#1swxYwYdS)Nz,x, yzx,,yr�r�s r�test_invalid_multiple_selectz-TestCSSSelectors.test_invalid_multiple_select`s	��
�]�.�
/�
/�	&�	&��I���W�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�
�]�.�
/�
/�	%�	%��I���V�$�$�$�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�	%�	%r'c�6�|�dddg��dS)Nzp[lang=en], p[lang=en-gb]rrr�r�s r�test_multiple_select_attrsz+TestCSSSelectors.test_multiple_select_attrsfs$�����7�)�\�9R�S�S�S�S�Src�6�|�dgd���dS)Nz*x, y > z[id=zida], z[id=zidab], z[id=zidb])rBrNrSr�r�s r�test_multiple_select_idsz)TestCSSSelectors.test_multiple_select_idsis&�����H�Jb�Jb�Jb�c�c�c�c�crc�6�|�dddg��dS)Nzbody > div > x, y > zrBrNr�r�s r�test_multiple_select_nestedz,TestCSSSelectors.test_multiple_select_nestedls#�����3�e�V�_�E�E�E�E�Erc��d}t|d��}|�d��}dt|��ksJ�|�ddg���D]}||vsJ��	dS)Nz3<div class="c1"/><div class="c2"/><div class="c1"/>rez.c1, .c2r��c1�c2)�class_)rr�r�r�)rrFrr4�elements     r�test_select_duplicate_elementsz/TestCSSSelectors.test_select_duplicate_elementsos���G���V�]�3�3���;�;�z�*�*���C��M�M�!�!�!�!�
�}�}�T�4�L�}�9�9�	'�	'�G��h�&�&�&�&�&�	'�	'rN)?r5r6r7r8r�r�r��assertSelectr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrrr#r&r,r.r0r5r7r:r<r>r@rDrFrHrJrLrOrUrWrYr[r]r_rer9rrr�r��s���������/�D�b<�<�<�
�
�
�"�L�8�8�8�0�0�0�"�"�"����
;�;�;�P�P�P�
%�%�%�1�1�1�&�&�&�E�E�E�*�*�*�
V�V�V�`�`�`�
�
�
�/�/�/����5�5�5����,�,�,�8�8�8�6�6�6�
6�6�6�
8�8�8�=�=�=�
�
�
�$
�
�
�
�
�
�"
�
�
�
�
�
�:
�
�
�

�

�

�&�&�&�1�1�1����&,�,�,�
A�A�A�>�>�>�2�2�2�1�1�1�5�5�5�%�%�%�T�T�T�4�4�4�3�3�3�7�7�7�-�-�-�E�E�E�9�9�9�_�_�_�]�]�]�%�%�%�T�T�T�d�d�d�F�F�F�'�'�'�'�'rr�c�N�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dS)
�TestPersistencez*Testing features like pickle and deepcopy.c�R�d|_|�|j��|_dS)Nay<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Beautiful Soup: We called him Tortoise because he taught us.</title>
<link rev="made" href="mailto:leonardr@segfault.org">
<meta name="Description" content="Beautiful Soup: an HTML parser optimized for screen-scraping.">
<meta name="generator" content="Markov Approximation 1.4 (module: leonardr)">
<meta name="author" content="Leonard Richardson">
</head>
<body>
<a href="foo">foo</a>
<a href="foo"><b>bar</b></a>
</body>
</html>)�pager�treer�s rr�zTestPersistence.setup_method�s&����	� �I�I�d�i�(�(��	�	�	rc���tj|jd��}tj|��}|jt
ksJ�|���|j���ksJ�dS)Nr�)�pickle�dumpsrk�loads�	__class__rrC)r�dumped�loadeds   r�!test_pickle_and_unpickle_identityz1TestPersistence.test_pickle_and_unpickle_identity�sg����d�i��+�+����f�%�%����=�0�0�0�0��}�}���$�)�"2�"2�"4�"4�4�4�4�4�4�4rc��tj|j��}|���|j���ksJ�dSrV)�copy�deepcopyrkrC)r�copieds  r�test_deepcopy_identityz&TestPersistence.test_deepcopy_identity�s@����t�y�)�)���}�}���$�)�"2�"2�"4�"4�4�4�4�4�4�4rc��tdd��}|j}|���}dt|��ksJ�||jksJ�dS)Ns
<p>&nbsp;</p>reu	<p> </p>)r�original_encoding�__copy__r{)rrr+rus    r�test_copy_preserves_encodingz,TestPersistence.test_copy_preserves_encoding�sX���-�}�=�=���)���}�}�����c�$�i�i�'�'�'�'��4�1�1�1�1�1�1�1rc�2�|�d��j}d|_d|_|���}|j|jksJ�|j|jksJ�|j|jksJ�|j|jksJ�|j|jksJ�dS)Nz<p></p>r��!)rr��
sourceline�	sourceposr{�can_be_empty_element�cdata_list_attributes�preserve_whitespace_tags)r�tagrws   r�'test_copy_preserves_builder_informationz7TestPersistence.test_copy_preserves_builder_information�s����i�i�	�"�"�$�������
��������~��!2�2�2�2�2��}�� 0�0�0�0�0��'�6�+F�F�F�F�F��(�F�,H�H�H�H�H��+�v�/N�N�N�N�N�N�Nrc���d}|�|��}tj|tj��}tj|��}|���|���ksJ�dSr2)rrmrn�HIGHEST_PROTOCOLrorC)rrrrqrrs     r�test_unicode_picklez#TestPersistence.test_unicode_pickle�s`��#���y�y�������d�F�$;�<�<����f�%�%���}�}���$�+�+�-�-�/�/�/�/�/�/rc��d}|�|��}|�d���}tj|��}||ksJ�d|jksJ�d|jksJ�d|jksJ�d|jksJ�d|jksJ�dS)Nz<b>Foo<a></a></b><b>Bar</b>�Foo�r)rr2ru�parent�next_element�next_sibling�previous_element�rrr�s1�s2s     r�1test_copy_navigablestring_is_not_attached_to_treezATestPersistence.test_copy_navigablestring_is_not_attached_to_tree�s���,���y�y�����
�Y�Y�e�Y�
$�
$��
�Y�r�]�]���R�x�����r�y� � � � ��r��&�&�&�&��r��&�&�&�&��r��&�&�&�&��r�*�*�*�*�*�*�*rc��d}|�|��}|j}tj|��}||ksJ�t|t��sJ�dS)Nz<b><!--Foo--></b>)rrru�
isinstancerr�s     r�0test_copy_navigablestring_subclass_has_same_typez@TestPersistence.test_copy_navigablestring_subclass_has_same_type�sS��"���y�y�����
�[��
�Y�r�]�]���R�x�����"�g�&�&�&�&�&�&�&rc�l�d}|�|��}tj|��}||ksJ�dS)N�)<div><b>Foo<a></a></b><b>Bar</b></div>end)rru)rrr�	soup_copys    r�test_copy_entire_soupz%TestPersistence.test_copy_entire_soup�s:��:���y�y������I�d�O�O�	��y� � � � � � rc��d}|�|��}|j}tj|��}t|��t|��ksJ�||ksJ�||usJ�d|jksJ�d|jksJ�d|�d���jksJ�d|�d���jksJ�dS)Nr��Barr�)rrprur{r�r�r2r�)rrrrp�div_copys     r�test_copy_tag_copies_contentsz-TestPersistence.test_copy_tag_copies_contents�s���:���y�y������h���9�S�>�>���3�x�x�3�x�=�=�(�(�(�(��h������(�"�"�"�"��x��&�&�&�&��x�0�0�0�0�0��x�}�}�E�}�2�2�?�?�?�?�?��s�x�x�u�x�-�-�:�:�:�:�:�:�:rN)r5r6r7r8r�rsrxr|r�r�r�r�r�r�r9rrrhrh~s�������0�0�)�)�)�&5�5�5�5�5�5�
2�2�2�O�O�O�$0�0�0�
+�
+�
+�'�'�'�!�!�!�;�;�;�;�;rrh)r8rurmr"�	soupsiever�bs4r�bs4.elementrr�rr
r;r�rhr9rr�<module>r�sU��0�0�����
�
�
�
�
�
�
�
�)�)�)�)�)�)���������������������,"�,"�,"�,"�,"�8�,"�,"�,"�^V.�V.�V.�V.�V.�X�V.�V.�V.�rc'�c'�c'�c'�c'�x�c'�c'�c'�L
p;�p;�p;�p;�p;�h�p;�p;�p;�p;�p;r