
    MhH                         U d dl Z d dlZd dlmZmZ d dlmZmZmZm	Z	 d dl
mZ ddlmZmZ e	e         ed<   er$d dlmZmZ eZ ee           ed	          k     reZe j                            e d
           G d de                      ZdS )    N)BeautifulSoup	ResultSet)AnyListTupleType)Version   )SoupTestSOUP_SIEVE_PRESENT.SOUPSIEVE_EXCEPTION_ON_UNSUPPORTED_PSEUDOCLASS)__version__SelectorSyntaxErrorz2.6zSoup Sieve not installed)reasonc                      e Zd ZdZdZd Zdedee         deddfd	Z	e	Z
d
eeee         f         f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 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* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdS )HTestCSSSelectorszTest 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          | j        d          | _        d S )Nhtml.parser)r   HTML_soupselfs    R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/bs4/tests/test_css.pysetup_methodzTestCSSSelectors.setup_method^   s    "49m<<


    selectorexpected_idskwargsreturnNc           	      B    | j         j        |fi |}t          |t                    sJ d |D             }|                                 |                                 ||k    s:J d|dd                    |          dd                    |          d            d S )Nc                     g | ]
}|d          S id ).0els     r   
<listcomp>z7TestCSSSelectors.assert_css_selects.<locals>.<listcomp>f   s    ---r"T(---r   z	Selector z, expected [z, z], got [])r   select
isinstancer   sortjoin)r   r   r   r   resultsel_idss         r   assert_css_selectsz#TestCSSSelectors.assert_css_selectsa   s     $$*#H7777'9-------W---v%%%%HHIIl####IIf(
%%%%%r   testsc                 B    |D ]\  }}|                      ||           d S )Nr/   )r   r0   r   r   s       r   assert_css_select_multiplez+TestCSSSelectors.assert_css_select_multipleq   s9    &+ 	< 	<"Hl##Hl;;;;	< 	<r   c                    | j         j                            d          }| j                             |          }t	          |          dk    sJ |D ]}|j        dk    sJ | j                             |          }d|d         k    sJ d S Ndiv   mainr#   )r   csscompiler)   lenname
select_one)r   selelsr6   r&   s        r   test_precompiledz!TestCSSSelectors.test_precompiledu   s    jn$$U++j$$3xx1}}}} 	% 	%C8u$$$$$Z""3''D!!!!!!r   c                     | j                             d          }t          |          dk    sJ |d         j        dk    sJ |d         j        dgk    sJ d S )Ntitler
   r   z	The title)r   r)   r;   r<   contentsr   r?   s     r   test_one_tag_onez!TestCSSSelectors.test_one_tag_one   s`    j((3xx1}}}}1v{g%%%%1v;-//////r   c                     | j                             d          }t          |          dk    sJ |D ]}|j        dk    sJ | j                             d          }d|d         k    sJ d S r5   )r   r)   r;   r<   r=   )r   r?   r6   r&   s       r   test_one_tag_manyz"TestCSSSelectors.test_one_tag_many   s    j&&3xx1}}}} 	% 	%C8u$$$$$Z""5))D!!!!!!r   c                 F    | j                             d          }d |u sJ d S )Nnonexistenttag)r   r=   )r   matchs     r   (test_select_one_returns_none_if_no_matchz9TestCSSSelectors.test_select_one_returns_none_if_no_match   s)    
%%&677u}}}}}}r   c                 6    |                      dddg           d S )Nzdiv divinnerdata1r2   r   s    r   test_tag_in_tag_onez$TestCSSSelectors.test_tag_in_tag_one   s#    	GW+=>>>>>r   c                 @    dD ]}|                      |g d           d S )N)html divhtml body divbody divrN   r8   rM   footerr2   r   r   s     r   test_tag_in_tag_manyz%TestCSSSelectors.test_tag_in_tag_many   s?    A 	T 	TH##H.R.R.RSSSS	T 	Tr   c                     |                      ddgd           |                      dddgd           |                      dg d	d
           d S )NrQ   r8   r
   )limitrR   rM      rS   rT   
   r2   r   s    r   
test_limitzTestCSSSelectors.test_limit   st    
VHA>>>'61B!LLL<<<B 	  	
 	
 	
 	
 	
r   c                 `    t          | j                            d                    dk    sJ d S )Ndelr   r;   r   r)   r   s    r   test_tag_no_matchz"TestCSSSelectors.test_tag_no_match   s1    4:$$U++,,111111r   c                     t          j        t                    5  | j                            d           d d d            d S # 1 swxY w Y   d S )Nztag%tpytestraisesr   r   r)   r   s    r   test_invalid_tagz!TestCSSSelectors.test_invalid_tag   s    ].// 	' 	'Jg&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'   AA	Ac                 6    |                      dddg           d S )Ncustom-dashed-tagdash1dash2r2   r   s    r   test_select_dashed_tag_idsz+TestCSSSelectors.test_select_dashed_tag_ids   s$     3gw5GHHHHHr   c                     | j                             d          }|d         j        dk    sJ |d         d         dk    sJ d S )Nzcustom-dashed-tag[id="dash2"]r   rh   r#   rj   )r   r)   r<   )r   dasheds     r   test_select_dashed_by_idz)TestCSSSelectors.test_select_dashed_by_id   sO    ""#BCCay~!44444ay'))))))r   c                 \    | j                             d          d         j        dk    sJ d S )Nzbody > custom-dashed-tagr   zHello there.)r   r)   textr   s    r   test_dashed_tag_textz%TestCSSSelectors.test_dashed_tag_text   s2    z  !;<<Q?DVVVVVVr   c                 v    | j                             d          | j                             d          k    sJ d S )Nrh   )r   r)   find_allr   s    r   #test_select_dashed_matches_find_allz4TestCSSSelectors.test_select_dashed_matches_find_all   sK    z  !4559L9L:
 :
 
 
 
 
 
 
r   c                 @    |                      ddgfdddgf           d S )Nh1header1h2header2header3r3   r   s    r   test_header_tagsz!TestCSSSelectors.test_header_tags   s;    ''I;Iy)*	
 	
 	
 	
 	
r   c                     dD ]Y}| j                             |          }t          |          dk    sJ |d         j        dk    sJ |d         d         dgk    sJ Zd S )N)z.onepzp.onepzhtml p.onepr
   r   pclassonep)r   r)   r;   r<   )r   r   r?   s      r   test_class_onezTestCSSSelectors.test_class_one   sx    : 	/ 	/H*##H--Cs88q====q6;#%%%%q6'?vh.....		/ 	/r   c                 d    | j                             d          }t          |          dk    sJ d S )Nzdiv.onepr   r   r)   r;   rD   s     r   test_class_mismatched_tagz*TestCSSSelectors.test_class_mismatched_tag   s.    j
++3xx1}}}}}}r   c                 >    dD ]}|                      |dg           d S )N)z	div#innerz#innerzdiv div#innerrM   r2   rV   s     r   test_one_idzTestCSSSelectors.test_one_id   s6    @ 	9 	9H##Hwi8888	9 	9r   c                 d    | j                             d          }t          |          dk    sJ d S )Nz#doesnotexistr   r   rD   s     r   test_bad_idzTestCSSSelectors.test_bad_id   s.    j003xx1}}}}}}r   c                     | j                             d          }t          |          dk    sJ |D ]}|j        dk    sJ |d         d         dgk    sJ |d                             d          rJ d S )Nzdiv#inner p   r~   r
   r   r   r   )r   r)   r;   r<   has_attr)r   r?   r&   s      r   test_items_in_idz!TestCSSSelectors.test_items_in_id   s    j..3xx1}}}} 	" 	"B7c>>>>>1vg6(****q6??7+++++++r   c                 j    dD ]/}t          | j                            |                    dk    sJ 0d S )N)zdiv#main delzdiv#main div.oopszdiv div#mainr   r_   rV   s     r   test_a_bunch_of_emptysz'TestCSSSelectors.test_a_bunch_of_emptys   sG    M 	9 	9Htz((2233q88888	9 	9r   c                 >    dD ]}|                      |dg           d S )N)z.class1zp.class1z.class2zp.class2z.class3zp.class3zhtml p.class2zdiv#inner .class2pmultir2   rV   s     r   test_multi_class_supportz)TestCSSSelectors.test_multi_class_support   s:    	
 
	: 
	:H ##Hxj9999
	: 
	:r   c                 >    dD ]}|                      |dg           d S )N)z.class1.class3z.class3.class2z.class1.class2.class3r   r2   rV   s     r   test_multi_class_selectionz+TestCSSSelectors.test_multi_class_selection   s6    U 	: 	:H##Hxj9999	: 	:r   c                 d    |                      dddg           |                      ddg           d S )Nz.s1 > as1a1s1a2z.s1 > a spans1a2s1r2   r   s    r   test_child_selectorz$TestCSSSelectors.test_child_selector   s;    	FF+;<<<
;;;;;r   c                 4    |                      ddg           d S )Nz.s1 > a#s1a2 spanr   r2   r   s    r   test_child_selector_idz'TestCSSSelectors.test_child_selector_id   s!     3hZ@@@@@r   c                     |                      ddgfddgfddgfddgfddgfddgfd	dgfd
g fddgfddgfddgfdg fdg fdg f           d S )Nzp[class="onep"]p1z
p[id="p1"]z[class="onep"]z	[id="p1"]zlink[rel="stylesheet"]l1zlink[type="text/css"]zlink[href="blah.css"]zlink[href="no-blah.css"]z[rel="stylesheet"]z[type="text/css"]z[href="blah.css"]z[href="no-blah.css"]zp[href="no-blah.css"]r{   r   s    r   test_attribute_equalsz&TestCSSSelectors.test_attribute_equals   s    '''D6"v&4&!%v.$tf-$tf-',!D6* 4&) 4&)#R($b)#R(	
 	
 	
 	
 	
r   c                 ~    |                      ddgfddgfddgfddgfddgfddgfdd	gfd
d	gfdd	gfdd	gf
  
         d S )Nzp[class~="class1"]r   zp[class~="class2"]zp[class~="class3"]z[class~="class1"]z[class~="class2"]z[class~="class3"]za[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*-%)ug&(eW%	
 	
 	
 	
 	
r   c                     |                      ddgfddgfdg fdg fdg fddgfdd	d
gfdd	d
gfdddgfdd
dgfddgfdd
gfddgf           d S )Nz[rel^="style"]r   zlink[rel^="style"]znotlink[rel^="notstyle"]z[rel^="notstyle"]zlink[rel^="notstyle"]zlink[href^="bla"]za[href^="http://"]r   mez[href^="http://"]z	[id^="p"]r   r   z	[id^="m"]r8   zdiv[id^="m"]z
a[id^="m"]zdiv[data-tag^="dashed"]rN   r{   r   s    r   test_attribute_startswithz*TestCSSSelectors.test_attribute_startswith  s    ''v&!D6*', "%$b) 4&)!E4=1 5$-08T*+4.)fX&D6"&	2	
 	
 	
 	
 	
r   c           	      ^    |                      ddgfddgfddgfdg dfddgfd	g f           d S )
Nz[href$=".css"]r   zlink[href$=".css"]zlink[id$="1"]z	[id$="1"])rN   r   r   rw   r   s2a1r   ri   zdiv[id$="1"]rN   z[id$="noending"]r{   r   s    r   test_attribute_endswithz(TestCSSSelectors.test_attribute_endswith&  sg    ''v&!D6*tf%SSS gY'$
	
 
	
 
	
 
	
 
	
r   c                     |                      ddgfddgfdg fdg fdg fddgfdd	d
gfdddgfddgfdd
gfddgfddgfddgfdg dfddgfdg fdg dfdd	d
gfddgfdddgfddgfd dgf           d S )!Nz[rel*="style"]r   zlink[rel*="style"]znotlink[rel*="notstyle"]z[rel*="notstyle"]zlink[rel*="notstyle"]zlink[href*="bla"]z[href*="http://"]r   r   z	[id*="p"]r   r   zdiv[id*="m"]r8   z
a[id*="m"]z[href*=".css"]zlink[href*=".css"]zlink[id*="1"]z	[id*="1"])	rN   r   r   rw   r   r   r   r   ri   zdiv[id*="1"]rN   z[id*="noending"]z[href*="."])r   r   r   za[href*="."]zlink[href*="."]zdiv[id*="n"]rM   zdiv[id*="nn"]zdiv[data-tag*="edval"]r{   r   s    r   test_attribute_containsz(TestCSSSelectors.test_attribute_contains3  s   ''v&!D6*', "%$b) 4&) 5$-08T*+fX&D6"v&!D6*tf%
 
 
 gY'$///0eT]+'fg./wi(%y1M'	
 '	
 '	
 '	
 '	
r   c                 P    |                      dg dfdg dfddgfdg f           d S )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yk*b!		
 	
 	
 	
 	
r   c                 r    |                      dg dfddgfdddgfdg d	fd
ddgfdg fdg fddgf           d S )Nz[rel])r   r   r   z	link[rel]r   za[rel]r   r   z[lang])r   r   r   r   zp[class]r   r   z[blah]zp[blah]zdiv[data-tag]rN   r{   r   s    r   test_attribute_existsz&TestCSSSelectors.test_attribute_existse  s}    '')))*4&!t}%IIIJ$)*rNOwi(		
 		
 		
 		
 		
r   c                 r    d}t          |d          }|                    d          \  }d|j        k    sJ d S )Nz]<div style="display: wrong">nope</div>
        <div style="display: right">yes</div>
        r   zdiv[style="display: right"]yes)r   r)   string)r   htmlsoupchosens       r   "test_quoted_space_in_selector_namez3TestCSSSelectors.test_quoted_space_in_selector_nameq  sG     T=11;;<==%%%%%%r   c                 4   t          j        t                    5  | j                            d           d d d            n# 1 swxY w Y   t          j        t
                    5  | j                            d           d d d            d S # 1 swxY w Y   d S )Nza:no-such-pseudoclassza:nth-of-type(a))rc   rd   r   r   r)   r   r   s    r   test_unsupported_pseudoclassz-TestCSSSelectors.test_unsupported_pseudoclassy  s   ]IJJ 	7 	7J5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 ].// 	2 	2J0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2#   AAA%BBBc                    | j                             d          }t          |          dk    sJ |d         j        dk    sJ | j                             d          }t          |          dk    sJ |d         j        dk    sJ | j                             d          }t          |          dk    sJ | j                             d          }t          |          dk    sJ d S )	Nzdiv#inner p:nth-of-type(1)r
   r   	Some textzdiv#inner p:nth-of-type(3)Anotherzdiv#inner p:nth-of-type(4)zdiv p:nth-of-type(0)r   r)   r;   r   rD   s     r   test_nth_of_typez!TestCSSSelectors.test_nth_of_type  s    j <==3xx1}}}}1v}++++ j <==3xx1}}}}1v}	)))) j <==3xx1}}}} j 6773xx1}}}}}}r   c                     | j                             d          }t          |          dk    sJ |d         j        dk    sJ d S )Nzdiv#inner > p:nth-of-type(1)r
   r   r   r   rD   s     r   "test_nth_of_type_direct_descendantz3TestCSSSelectors.test_nth_of_type_direct_descendant  sH    j >??3xx1}}}}1v}++++++r   c                 4    |                      ddg           d S )Nz#inner > p:nth-of-type(2)r   r2   r   s    r   "test_id_child_selector_nth_of_typez3TestCSSSelectors.test_id_child_selector_nth_of_type  s!     ;dVDDDDDr   c                     | j                             dd          }|                    d          }|                     |ddg           d S )Nr6   r8   r"   rM   rN   )r   findr)   assert_selects_ids)r   rM   selecteds      r   test_select_on_elementz'TestCSSSelectors.test_select_on_element  sO     
&11<<&& 	7G*<=====r   c                 `    |                      ddg           |                      dg            d S )Nz.fancy #innerrM   z.normal #innerr2   r   s    r   test_overspecified_child_idz,TestCSSSelectors.test_overspecified_child_id  s7    ';;; 0"55555r   c                     |                      ddg           |                      ddg           |                      ddg           g | j                            d          k    sJ d S )Nz#p1 + h2ry   z#p1 + h2 + pr   z#p1 + #header2 + .class1z#p1 + pr/   r   r)   r   s    r   test_adjacent_sibling_selectorz/TestCSSSelectors.test_adjacent_sibling_selector  sr    
YK888
;;; :XJGGGTZ&&y11111111r   c                     |                      dddg           |                      ddg           |                      ddg           |                      ddg           g | j                            d          k    sJ d S )	Nz#p1 ~ h2ry   rz   z#p1 ~ #header2z#p1 ~ h2 + ar   z#p1 ~ h2 + [rel="me"]z#inner ~ h2r   r   s    r   test_general_sibling_selectorz.TestCSSSelectors.test_general_sibling_selector  s    
Y	,BCCC 09+>>>777 7$@@@TZ&&}55555555r   c                     t          j        t                    5  | j                            d           d d d            d S # 1 swxY w Y   d S )Nzh1 >rb   r   s    r   test_dangling_combinatorz)TestCSSSelectors.test_dangling_combinator  s    ].// 	& 	&Jf%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&rf   c                 6    |                      dg d           d S )Nzp[lang] ~ p)r   r   r   r2   r   s    r   2test_sibling_combinator_wont_select_same_tag_twicezCTestCSSSelectors.test_sibling_combinator_wont_select_same_tag_twice  s%    /V/V/VWWWWWr   c                 6    |                      dddg           d S )Nzx, yxidyidr2   r   s    r   test_multiple_selectz%TestCSSSelectors.test_multiple_select  s"    77777r   c                 6    |                      dddg           d S )Nzx,yr   r   r2   r   s    r   "test_multiple_select_with_no_spacez3TestCSSSelectors.test_multiple_select_with_no_space  s"    u~66666r   c                 6    |                      dddg           d S )Nzx,    yr   r   r2   r   s    r   $test_multiple_select_with_more_spacez5TestCSSSelectors.test_multiple_select_with_more_space  s"    	E5>:::::r   c                 4    |                      ddg           d S )Nzx, xr   r2   r   s    r   test_multiple_select_duplicatedz0TestCSSSelectors.test_multiple_select_duplicated  s     00000r   c                 6    |                      dddg           d S )Nzx, y ~ p[lang=fr]r   r   r2   r   s    r   test_multiple_select_siblingz-TestCSSSelectors.test_multiple_select_sibling  s$     3eY5GHHHHHr   c                 6    |                      dddg           d S )Nzx, y > zr   zidbr2   r   s    r   .test_multiple_select_tag_and_direct_descendantz?TestCSSSelectors.test_multiple_select_tag_and_direct_descendant  s"    
UFO<<<<<r   c                 6    |                      dg d           d S )Nzdiv > x, y, zr   r   zidar   zidabzidacr2   r   s    r   /test_multiple_select_direct_descendant_and_tagsz@TestCSSSelectors.test_multiple_select_direct_descendant_and_tags  s0    MMM	
 	
 	
 	
 	
r   c                 6    |                      dg d           d S )Nzdiv x,y,  zr   r2   r   s    r   (test_multiple_select_indirect_descendantz9TestCSSSelectors.test_multiple_select_indirect_descendant  s0    KKK	
 	
 	
 	
 	
r   c                 4   t          j        t                    5  | j                            d           d d d            n# 1 swxY w Y   t          j        t                    5  | j                            d           d d d            d S # 1 swxY w Y   d S )Nz,x, yzx,,yrb   r   s    r   test_invalid_multiple_selectz-TestCSSSelectors.test_invalid_multiple_select  s	   ].// 	' 	'Jg&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'].// 	& 	&Jf%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r   c                 6    |                      dddg           d S )Nzp[lang=en], p[lang=en-gb]r   r   r2   r   s    r   test_multiple_select_attrsz+TestCSSSelectors.test_multiple_select_attrs  s$     ;i=VWWWWWr   c                 6    |                      dg d           d S )Nz*x, y > z[id=zida], z[id=zidab], z[id=zidb])r   r   r   r2   r   s    r   test_multiple_select_idsz)TestCSSSelectors.test_multiple_select_ids  s0    8:R:R:R	
 	
 	
 	
 	
r   c                 6    |                      dddg           d S )Nzbody > div > x, y > zr   r   r2   r   s    r   test_multiple_select_nestedz,TestCSSSelectors.test_multiple_select_nested  s#     7%IIIIIr   c                     d}t          |d          }|                    d          }dt          |          k    sJ |                    ddg          D ]}||v sJ 	d S )Nz3<div class="c1"/><div class="c2"/><div class="c1"/>r   z.c1, .c2r   c1c2)class_)r   r)   r;   rs   )r   markupr   r   elements        r   test_select_duplicate_elementsz/TestCSSSelectors.test_select_duplicate_elements  s     GV]33;;z**CMM!!!!
 }}T4L}99 	' 	'Gh&&&&&	' 	'r   c                     | j                             dd          }|j                            d          }|| j                             dd          k    sJ d S )Nr6   rM   r"   div[id=main]r8   )r   r   r9   closest)r   rM   r   s      r   test_closestzTestCSSSelectors.test_closest  sW    
'22)##N33$*//%F/;;;;;;;;r   c                     | j                             dd          }| j                             dd          }|j                            d          du sJ |j                            d          du sJ d S )Nr6   rM   r"   r8   r   FT)r   r   r9   rJ   )r   rM   r8   s      r   
test_matchzTestCSSSelectors.test_match  st    
'22zu00y~..%7777x~~n--555555r   c                     | j         j                            d          }t          |t          j                  sJ |\  }}|d         dk    sJ |d         dk    sJ d S )Nrx   r#   ry   rz   )r   r9   iselectr*   typesGeneratorType)r   genry   rz   s       r   test_iselectzTestCSSSelectors.test_iselect  sl    jn$$T**#u233333 't}	))))t}	))))))r   c                 R   | j                             dd          }|j                            d          }t	          |j                            d                    dk    sJ |j                            d          }t          |t                    sJ |\  }|d         dk    sJ d S )	Nr6   rM   r"   rx   rZ   zh2[id=header3]r#   rz   )r   r   r9   filterr;   r*   r   )r   rM   r-   results       r   test_filterzTestCSSSelectors.test_filter
  s    
'22)""4((59##D))**a////)""#344'9-----d|y((((((r   c                     | j         j        j        } |d          dk    sJ  |d          dk    sJ  |d          | j         j                            d          k    sJ d S )Nz.foo#barz
\.foo\#barz()[]{}z\(\)\[\]\{\}z.foo)r   r9   escape)r   ms     r   test_escapezTestCSSSelectors.test_escape  sr    JN!q}}....q{{22222qyyDJN11&99999999r   )I__name__
__module____qualname____doc__r   r   strr   r   r/   assertSelectr   r3   r@   rE   rG   rK   rO   rW   r\   r`   re   rk   rn   rq   rt   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   r   r   r   r   r   r   r   r  r
  r  r$   r   r   r   r   $   s<        /Db= = =

+/9
@C
	
 
 
 
 &L<sDI~1F < < < <	" 	" 	"0 0 0" " "  ? ? ?T T T
 
 
2 2 2' ' 'I I I* * *
W W W
 
 


 
 
/ / /  9 9 9  , , ,9 9 9: : :: : :< < <A A A
 
 
$
 
 

 
 
"
 
 
(
 (
 (
T
 
 


 

 

& & &2 2 2  &, , ,
E E E> > >6 6 62 2 26 6 6& & &X X X8 8 87 7 7; ; ;1 1 1I I I= = =
 
 


 
 

& & &X X X
 
 

J J J' ' '< < <
6 6 6* * *) ) ): : : : :r   r   )rc   r  bs4r   r   typingr   r   r   r   packaging.versionr	    r   r   	Exception__annotations__	soupsiever   r   r   NotImplementedErrormarkskipifr   r$   r   r   <module>r     s~           
            & % % % % %       
 15Y ? ? ? 	M:::::::: 6I2w{ggenn,,9L6 **3MNNs: s: s: s: s:x s: s: ONs: s: s:r   