HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: sport3497 (1034)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/lib64/python3.10/site-packages/bs4/tests/__pycache__/test_css.cpython-310.pyc
o

�hC�@svddlZddlZddlmZddlmZmZmZddlm	Z	m
Z
e
r(ddlmZej
je
dd�Gd	d
�d
e	��ZdS)�N)�	MagicMock)�CSS�
BeautifulSoup�	ResultSet�)�SoupTest�SOUP_SIEVE_PRESENT)�SelectorSyntaxErrorzSoup Sieve not installed)�reasonc@seZdZdZdZdd�Zdd�ZeZdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Z d9d:�Z!d;d<�Z"d=d>�Z#d?d@�Z$dAdB�Z%dCdD�Z&dEdF�Z'dGdH�Z(dIdJ�Z)dKdL�Z*dMdN�Z+dOdP�Z,dQdR�Z-dSdT�Z.dUdV�Z/dWdX�Z0dYdZ�Z1d[d\�Z2d]d^�Z3d_d`�Z4dadb�Z5dcdd�Z6dedf�Z7dgdh�Z8didj�Z9dkdl�Z:dmdn�Z;dodp�Z<dqdr�Z=dsdt�Z>dudv�Z?dwdx�Z@dydz�ZAd{d|�ZBd}d~�ZCdd��ZDd�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>
cCst|jd�|_dS)N�html.parser)r�HTML�soup��self�r�E/usr/local/CyberCP/lib/python3.10/site-packages/bs4/tests/test_css.py�setup_methodN�zTestCSSSelectors.setup_methodcKsj|jj|fi|��}t|t�sJ�dd�|D�}|��|��||ks3Jd|d�|�d�|�f��dS)NcSsg|]}|d�qS��idr)�.0�elrrr�
<listcomp>Tsz3TestCSSSelectors.assert_selects.<locals>.<listcomp>z$Selector %s, expected [%s], got [%s]z, )r�select�
isinstancer�sort�join)r�selector�expected_ids�kwargs�results�el_idsrrr�assert_selectsQs�zTestCSSSelectors.assert_selectscGs|D]
\}}|�||�qdS)N�r#)r�testsrrrrr�assert_select_multiple]s�z'TestCSSSelectors.assert_select_multiplecCsb|jj�d�}|j�|�}t|�dksJ�|D]	}|jdks J�q|j�|�}d|dks/J�dS�N�div��mainr)r�css�compiler�len�name�
select_one)r�sel�elsr(rrrr�test_precompiledasz!TestCSSSelectors.test_precompiledcCsF|j�d�}t|�dksJ�|djdksJ�|djdgks!J�dS)N�titlerrz	The title)rrr-r.�contents�rr1rrr�test_one_tag_onelsz!TestCSSSelectors.test_one_tag_onecCsT|j�d�}t|�dksJ�|D]	}|jdksJ�q|j�d�}d|dks(J�dSr')rrr-r.r/)rr1r(rrrr�test_one_tag_manyrsz"TestCSSSelectors.test_one_tag_manycCs|j�d�}d|ksJ�dS)N�nonexistenttag)rr/)r�matchrrr�(test_select_one_returns_none_if_no_match{sz9TestCSSSelectors.test_select_one_returns_none_if_no_matchcCs |j�d�}|�dddg�dS)Nzdiv div�inner�data1)rrr#r5rrr�test_tag_in_tag_one��z$TestCSSSelectors.test_tag_in_tag_onecCsdD]
}|�|gd��qdS)N)�html div�
html body div�body div�r<r*r;�footerr$�rrrrr�test_tag_in_tag_many�s�z%TestCSSSelectors.test_tag_in_tag_manycCs>|jddgdd�|jdddgdd�|jdgd	�d
d�dS)Nr?r*r)�limitr@r;�rArB�
r$rrrr�
test_limit�s

�zTestCSSSelectors.test_limitcCst|j�d��dksJ�dS)N�delr�r-rrrrrr�test_tag_no_match�sz"TestCSSSelectors.test_tag_no_matchcC�<t�t��|j�d�Wd�dS1swYdS)Nztag%t��pytest�raisesr	rrrrrr�test_invalid_tag��"�z!TestCSSSelectors.test_invalid_tagcC�|�dddg�dS)N�custom-dashed-tag�dash1�dash2r$rrrr�test_select_dashed_tag_ids��z+TestCSSSelectors.test_select_dashed_tag_idscCs6|j�d�}|djdksJ�|dddksJ�dS)Nzcustom-dashed-tag[id="dash2"]rrTrrV)rrr.)r�dashedrrr�test_select_dashed_by_id�sz)TestCSSSelectors.test_select_dashed_by_idcCs|j�d�djdks
J�dS)Nzbody > custom-dashed-tagrzHello there.)rr�textrrrr�test_dashed_tag_text�sz%TestCSSSelectors.test_dashed_tag_textcCs |j�d�|j�d�ksJ�dS)NrT)rr�find_allrrrr�#test_select_dashed_matches_find_all�s z4TestCSSSelectors.test_select_dashed_matches_find_allcCs|�ddgfdddgf�dS)N�h1�header1�h2�header2�header3�r&rrrr�test_header_tags�s
�z!TestCSSSelectors.test_header_tagscCsRdD]$}|j�|�}t|�dksJ�|djdksJ�|dddgks&J�qdS)N)z.onepzp.onepzhtml p.oneprr�p�class�onep)rrr-r.)rrr1rrr�test_class_one�s�zTestCSSSelectors.test_class_onecC� |j�d�}t|�dksJ�dS)Nzdiv.onepr�rrr-r5rrr�test_class_mismatched_tag�r>z*TestCSSSelectors.test_class_mismatched_tagcC�dD]	}|�|dg�qdS)N)z	div#innerz#innerz
div div#innerr;r$rDrrr�test_one_id�s�zTestCSSSelectors.test_one_idcCrj)Nz
#doesnotexistrrkr5rrr�test_bad_id�r>zTestCSSSelectors.test_bad_idcCs`|j�d�}t|�dksJ�|D]	}|jdksJ�q|dddgks%J�|d�d�r.J�dS)Nzdiv#inner p�rfrrgrhr)rrr-r.�has_attr)rr1rrrr�test_items_in_id�sz!TestCSSSelectors.test_items_in_idcCs&dD]}t|j�|��dksJ�qdS)N)zdiv#main delzdiv#main div.oopszdiv div#mainrrKrDrrr�test_a_bunch_of_emptys�s�z'TestCSSSelectors.test_a_bunch_of_emptyscCrm)N)z.class1zp.class1z.class2zp.class2z.class3zp.class3z
html p.class2zdiv#inner .class2�pmultir$rDrrr�test_multi_class_support���z)TestCSSSelectors.test_multi_class_supportcCrm)N)z.class1.class3z.class3.class2z.class1.class2.class3rtr$rDrrr�test_multi_class_selection�rvz+TestCSSSelectors.test_multi_class_selectioncCs"|�dddg�|�ddg�dS)Nz.s1 > a�s1a1�s1a2z.s1 > a span�s1a2s1r$rrrr�test_child_selector�sz$TestCSSSelectors.test_child_selectorcC�|�ddg�dS)Nz.s1 > a#s1a2 spanrzr$rrrr�test_child_selector_id�rz'TestCSSSelectors.test_child_selector_idcCst|�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"]rdrrrr�test_attribute_equals�s �z&TestCSSSelectors.test_attribute_equalsc
Cs\|�ddgfddgfddgfddgfddgfddgfdd	gfd
d	gfdd	gfdd	gf�
dS)
Nzp[class~="class1"]rtzp[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"]rdrrrr�test_attribute_tilde�s�z%TestCSSSelectors.test_attribute_tildecCsv|�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"]rtr~z	[id^="m"]r*zdiv[id^="m"]z
a[id^="m"]zdiv[data-tag^="dashed"]r<rdrrrr�test_attribute_startswith�s



�z*TestCSSSelectors.test_attribute_startswithc	Cs<|�ddgfddgfddgfdgd�fddgfd	gf�dS)
Nz[href$=".css"]rzlink[href$=".css"]z
link[id$="1"]z	[id$="1"])r<rr~r`rx�s2a1rzrUzdiv[id$="1"]r<z[id$="noending"]rdrrrr�test_attribute_endswiths
�z(TestCSSSelectors.test_attribute_endswithcCs�|�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://"]r�r�z	[id*="p"]rtr~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`rxryr�rzrUzdiv[id*="1"]r<z[id*="noending"]z[href*="."])r�r�rza[href*="."]zlink[href*="."]zdiv[id*="n"]r;z
div[id*="nn"]zdiv[data-tag*="edval"]rdrrrr�test_attribute_containss0





�z(TestCSSSelectors.test_attribute_containscCs.|�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"]rdrrrr�test_attribute_exact_or_hypen2s

�z.TestCSSSelectors.test_attribute_exact_or_hypencCsP|�dgd�fddgfdddgfdgd	�fd
ddgfd
gfdgfddgf�dS)Nz[rel])rr�r�z	link[rel]rza[rel]r�r�z[lang])r�r�r�r�zp[class]r~rtz[blah]zp[blah]z
div[data-tag]r<rdrrrr�test_attribute_exists:s



�z&TestCSSSelectors.test_attribute_existscCs,d}t|d�}|�d�\}d|jksJ�dS)Nz]<div style="display: wrong">nope</div>
        <div style="display: right">yes</div>
        rzdiv[style="display: right"]�yes)rr�string)r�htmlr�chosenrrr�"test_quoted_space_in_selector_nameFs
z3TestCSSSelectors.test_quoted_space_in_selector_namecCsrt�t��|j�d�Wd�n1swYt�t��|j�d�Wd�dS1s2wYdS)Nza:no-such-pseudoclassza:nth-of-type(a))rOrP�NotImplementedErrorrrr	rrrr�test_unsupported_pseudoclassNs�"�z-TestCSSSelectors.test_unsupported_pseudoclasscCs�|j�d�}t|�dksJ�|djdksJ�|j�d�}t|�dks%J�|djdks.J�|j�d�}t|�dks<J�|j�d�}t|�dksJJ�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)�rrr-r�r5rrr�test_nth_of_typeUsz!TestCSSSelectors.test_nth_of_typecCs2|j�d�}t|�dksJ�|djdksJ�dS)Nzdiv#inner > p:nth-of-type(1)rrr�r�r5rrr�"test_nth_of_type_direct_descendanthsz3TestCSSSelectors.test_nth_of_type_direct_descendantcCr|)Nz#inner > p:nth-of-type(2)r~r$rrrr�"test_id_child_selector_nth_of_typemrz3TestCSSSelectors.test_id_child_selector_nth_of_typecCs.|jjddd�}|�d�}|�|ddg�dS)Nr(r*rr;r<)r�findr�assert_selects_ids)rr;�selectedrrr�test_select_on_elementps
z'TestCSSSelectors.test_select_on_elementcCs|�ddg�|�dg�dS)Nz
.fancy #innerr;z.normal #innerr$rrrr�test_overspecified_child_idysz,TestCSSSelectors.test_overspecified_child_idcCsB|�ddg�|�ddg�|�ddg�g|j�d�ksJ�dS)Nz#p1 + h2rbz#p1 + h2 + prtz#p1 + #header2 + .class1z#p1 + p�r#rrrrrr�test_adjacent_sibling_selector}sz/TestCSSSelectors.test_adjacent_sibling_selectorcCsR|�dddg�|�ddg�|�ddg�|�ddg�g|j�d�ks'J�dS)	Nz#p1 ~ h2rbrcz#p1 ~ #header2z#p1 ~ h2 + ar�z#p1 ~ h2 + [rel="me"]z#inner ~ h2r�rrrr�test_general_sibling_selector�s
z.TestCSSSelectors.test_general_sibling_selectorcCrM)Nzh1 >rNrrrr�test_dangling_combinator�rRz)TestCSSSelectors.test_dangling_combinatorcC�|�dgd��dS)Nzp[lang] ~ p)r�r�r�r$rrrr�2test_sibling_combinator_wont_select_same_tag_twice�rXzCTestCSSSelectors.test_sibling_combinator_wont_select_same_tag_twicecCrS)Nzx, y�xid�yidr$rrrr�test_multiple_select�rXz%TestCSSSelectors.test_multiple_selectcCrS)Nzx,yr�r�r$rrrr�"test_multiple_select_with_no_space�rXz3TestCSSSelectors.test_multiple_select_with_no_spacecCrS)Nzx,    yr�r�r$rrrr�$test_multiple_select_with_more_space�rXz5TestCSSSelectors.test_multiple_select_with_more_spacecCr|)Nzx, xr�r$rrrr�test_multiple_select_duplicated�rz0TestCSSSelectors.test_multiple_select_duplicatedcCrS)Nzx, y ~ p[lang=fr]r�r�r$rrrr�test_multiple_select_sibling�rXz-TestCSSSelectors.test_multiple_select_siblingcCrS)Nzx, y > zr��zidbr$rrrr�.test_multiple_select_tag_and_direct_descendant�rXz?TestCSSSelectors.test_multiple_select_tag_and_direct_descendantcCr�)Nz
div > x, y, z�r�r��zidar��zidab�zidacr$rrrr�/test_multiple_select_direct_descendant_and_tags�rXz@TestCSSSelectors.test_multiple_select_direct_descendant_and_tagscCr�)Nzdiv x,y,  zr�r$rrrr�(test_multiple_select_indirect_descendant�rXz9TestCSSSelectors.test_multiple_select_indirect_descendantcCsrt�t��|j�d�Wd�n1swYt�t��|j�d�Wd�dS1s2wYdS)Nz,x, yzx,,yrNrrrr�test_invalid_multiple_select�s�"�z-TestCSSSelectors.test_invalid_multiple_selectcCrS)Nzp[lang=en], p[lang=en-gb]r�r�r$rrrr�test_multiple_select_attrs�rXz+TestCSSSelectors.test_multiple_select_attrscCr�)Nz*x, y > z[id=zida], z[id=zidab], z[id=zidb])r�r�r�r$rrrr�test_multiple_select_ids�rXz)TestCSSSelectors.test_multiple_select_idscCrS)Nzbody > div > x, y > zr�r�r$rrrr�test_multiple_select_nested�rXz,TestCSSSelectors.test_multiple_select_nestedcCsNd}t|d�}|�d�}dt|�ksJ�|jddgd�D]}||vs$J�qdS)Nz3<div class="c1"/><div class="c2"/><div class="c1"/>rz.c1, .c2rp�c1�c2)�class_)rrr-r])r�markuprr��elementrrr�test_select_duplicate_elements�s

�z/TestCSSSelectors.test_select_duplicate_elementscCs8|jjddd�}|j�d�}||jjddd�ksJ�dS)Nr(r;r�div[id=main]r*)rr�r+�closest)rr;r�rrr�test_closest�szTestCSSSelectors.test_closestcCsL|jjddd�}|jjddd�}|j�d�dksJ�|j�d�dks$J�dS)Nr(r;rr*r�FT)rr�r+r9)rr;r*rrr�
test_match�szTestCSSSelectors.test_matchcCsJ|jj�d�}t|tj�sJ�|\}}|ddksJ�|ddks#J�dS)Nrarrbrc)rr+�iselectr�types�
GeneratorType)r�genrbrcrrr�test_iselect�s
zTestCSSSelectors.test_iselectcCsh|jjddd�}|j�d�}t|j�d��dksJ�|j�d�}t|t�s'J�|\}|ddks2J�dS)	Nr(r;rrarGzh2[id=header3]rrc)rr�r+�filterr-rr)rr;r!�resultrrr�test_filter�szTestCSSSelectors.test_filtercCsH|jjj}|d�dks
J�|d�dksJ�|d�|jj�d�ks"J�dS)Nz.foo#barz
\.foo\#barz()[]{}z\(\)\[\]\{\}z.foo)rr+�escape)r�mrrr�test_escape�s
zTestCSSSelectors.test_escapeN)E�__name__�
__module__�__qualname__�__doc__r
rr#�assertSelectr&r2r6r7r:r=rErIrLrQrWrZr\r^rerirlrnrorrrsrurwr{r}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrs�1
	
	
r)rOr��
unittest.mockr�bs4rrr�rr�	soupsiever	�mark�skipifrrrrr�<module>s