
    hH                         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,                  j/                  e d
       G d de             Zy)    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 ZHy)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      | _        y )Nhtml.parser)r   HTML_soupselfs    z/var/labsstorage/home/kalaiyarasan.offl.2004/htdocs/course/socket/myenv/lib/python3.12/site-packages/bs4/tests/test_css.pysetup_methodzTestCSSSelectors.setup_method^   s    "499m<
    selectorexpected_idskwargsreturnNc           	      8    | j                   j                  |fi |}t        |t              sJ |D cg c]  }|d   	 }}|j	                          |j	                          ||k(  s/J d|ddj                  |      ddj                  |      d       y c c}w )Nidz	Selector z, expected [z, z], got [])r   select
isinstancer   sortjoin)r   r   r   r   resultselel_idss          r   assert_css_selectsz#TestCSSSelectors.assert_css_selectsa   s     $$**##H77'9---%,-r"T(--v% 	
IIl#IIf(
 	
% .s   Btestsc                 <    |D ]  \  }}| j                  ||        y )Nr*   )r   r+   r   r   s       r   assert_css_select_multiplez+TestCSSSelectors.assert_css_select_multipleq   s&    &+ 	<"Hl##Hl;	<r   c                    | j                   j                  j                  d      }| j                   j                  |      }t	        |      dk(  sJ |D ]  }|j
                  dk(  rJ  | j                   j                  |      }d|d   k(  sJ y Ndiv   mainr!   )r   csscompiler#   lenname
select_one)r   selelsr1   r(   s        r   test_precompiledz!TestCSSSelectors.test_precompiledu   s    jjnn$$U+jj$3x1}} 	%C88u$$$	% ZZ""3'D!!!r   c                     | j                   j                  d      }t        |      dk(  sJ |d   j                  dk(  sJ |d   j                  dgk(  sJ y )Ntitler
   r   z	The title)r   r#   r6   r7   contentsr   r:   s     r   test_one_tag_onez!TestCSSSelectors.test_one_tag_one   sT    jj(3x1}}1v{{g%%%1v;-///r   c                     | j                   j                  d      }t        |      dk(  sJ |D ]  }|j                  dk(  rJ  | j                   j	                  d      }d|d   k(  sJ y r0   )r   r#   r6   r7   r8   )r   r:   r1   r(   s       r   test_one_tag_manyz"TestCSSSelectors.test_one_tag_many   so    jj&3x1}} 	%C88u$$$	% ZZ""5)D!!!r   c                 F    | j                   j                  d      }d |u sJ y )Nnonexistenttag)r   r8   )r   matchs     r   (test_select_one_returns_none_if_no_matchz9TestCSSSelectors.test_select_one_returns_none_if_no_match   s#    

%%&67u}}r   c                 ,    | j                  dddg       y )Nzdiv divinnerdata1r-   r   s    r   test_tag_in_tag_onez$TestCSSSelectors.test_tag_in_tag_one   s    	GW+=>r   c                 :    dD ]  }| j                  |g d        y )N)html divhtml body divbody divrI   r3   rH   footerr-   r   r   s     r   test_tag_in_tag_manyz%TestCSSSelectors.test_tag_in_tag_many   s$    A 	TH##H.RS	Tr   c                     | j                  ddgd       | j                  dddgd       | j                  dg d	d
       y )NrL   r3   r
   )limitrM   rH      rN   rO   
   r-   r   s    r   
test_limitzTestCSSSelectors.test_limit   sN    
VHA>'61B!L<B 	  	
r   c                 V    t        | j                  j                  d            dk(  sJ y )Ndelr   r6   r   r#   r   s    r   test_tag_no_matchz"TestCSSSelectors.test_tag_no_match   s$    4::$$U+,111r   c                     t        j                  t              5  | j                  j	                  d       d d d        y # 1 sw Y   y xY w)Nztag%tpytestraisesr   r   r#   r   s    r   test_invalid_tagz!TestCSSSelectors.test_invalid_tag   s6    ]]./ 	'JJg&	' 	' 	'	   ?Ac                 ,    | j                  dddg       y )Ncustom-dashed-tagdash1dash2r-   r   s    r   test_select_dashed_tag_idsz+TestCSSSelectors.test_select_dashed_tag_ids   s     3gw5GHr   c                 |    | j                   j                  d      }|d   j                  dk(  sJ |d   d   dk(  sJ y )Nzcustom-dashed-tag[id="dash2"]r   rc   r!   re   )r   r#   r7   )r   dasheds     r   test_select_dashed_by_idz)TestCSSSelectors.test_select_dashed_by_id   sD    ""#BCay~~!4444ay')))r   c                 ^    | j                   j                  d      d   j                  dk(  sJ y )Nzbody > custom-dashed-tagr   zHello there.)r   r#   textr   s    r   test_dashed_tag_textz%TestCSSSelectors.test_dashed_tag_text   s+    zz  !;<Q?DDVVVr   c                 v    | j                   j                  d      | j                   j                  d      k(  sJ y )Nrc   )r   r#   find_allr   s    r   #test_select_dashed_matches_find_allz4TestCSSSelectors.test_select_dashed_matches_find_all   s8    zz  !459L9L:
 
 	
 
r   c                 6    | j                  ddgfdddgf       y )Nh1header1h2header2header3r.   r   s    r   test_header_tagsz!TestCSSSelectors.test_header_tags   s'    ''I;Iy)*	
r   c                     dD ]O  }| j                   j                  |      }t        |      dk(  sJ |d   j                  dk(  sJ |d   d   dgk(  rOJ  y )N)z.onepzp.onepzhtml p.onepr
   r   pclassonep)r   r#   r6   r7   )r   r   r:   s      r   test_class_onezTestCSSSelectors.test_class_one   sc    : 	/H**##H-Cs8q= =q6;;#%%%q6'?vh...		/r   c                 Z    | j                   j                  d      }t        |      dk(  sJ y )Nzdiv.onepr   r   r#   r6   r?   s     r   test_class_mismatched_tagz*TestCSSSelectors.test_class_mismatched_tag   s&    jj
+3x1}}r   c                 8    dD ]  }| j                  |dg        y )N)z	div#innerz#innerzdiv div#innerrH   r-   rQ   s     r   test_one_idzTestCSSSelectors.test_one_id   s#    @ 	9H##Hwi8	9r   c                 Z    | j                   j                  d      }t        |      dk(  sJ y )Nz#doesnotexistr   r~   r?   s     r   test_bad_idzTestCSSSelectors.test_bad_id   s&    jj03x1}}r   c                     | j                   j                  d      }t        |      dk(  sJ |D ]  }|j                  dk(  rJ  |d   d   dgk(  sJ |d   j	                  d      rJ y )Nzdiv#inner p   ry   r
   rz   r{   r   )r   r#   r6   r7   has_attr)r   r:   r(   s      r   test_items_in_idz!TestCSSSelectors.test_items_in_id   sv    jj.3x1}} 	"B77c>!>	"1vg6(***q6??7++++r   c                 d    dD ]+  }t        | j                  j                  |            dk(  r+J  y )N)zdiv#main delzdiv#main div.oopszdiv div#mainr   rZ   rQ   s     r   test_a_bunch_of_emptysz'TestCSSSelectors.test_a_bunch_of_emptys   s3    M 	9Htzz((23q888	9r   c                 8    dD ]  }| j                  |dg        y )N)z.class1zp.class1z.class2zp.class2z.class3zp.class3zhtml p.class2zdiv#inner .class2pmultir-   rQ   s     r   test_multi_class_supportz)TestCSSSelectors.test_multi_class_support   s'    	
 
	:H ##Hxj9
	:r   c                 8    dD ]  }| j                  |dg        y )N)z.class1.class3z.class3.class2z.class1.class2.class3r   r-   rQ   s     r   test_multi_class_selectionz+TestCSSSelectors.test_multi_class_selection   s#    U 	:H##Hxj9	:r   c                 R    | j                  dddg       | j                  ddg       y )Nz.s1 > as1a1s1a2z.s1 > a spans1a2s1r-   r   s    r   test_child_selectorz$TestCSSSelectors.test_child_selector   s)    	FF+;<
;r   c                 *    | j                  ddg       y )Nz.s1 > a#s1a2 spanr   r-   r   s    r   test_child_selector_idz'TestCSSSelectors.test_child_selector_id   s     3hZ@r   c                     | j                  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       y )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"]rv   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                 t    | j                  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
       y )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"]rv   r   s    r   test_attribute_tildez%TestCSSSelectors.test_attribute_tilde  st    ''!H:.!H:.!H:. 8*- 8*- 8*-%)ug&(eW%	
r   c                     | j                  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       y )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"]r3   zdiv[id^="m"]z
a[id^="m"]zdiv[data-tag^="dashed"]rI   rv   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           	      T    | j                  ddgfddgfddgfdg dfddgfd	g f       y )
Nz[href$=".css"]r   zlink[href$=".css"]zlink[id$="1"]z	[id$="1"])rI   r   r   rr   r   s2a1r   rd   zdiv[id$="1"]rI   z[id$="noending"]rv   r   s    r   test_attribute_endswithz(TestCSSSelectors.test_attribute_endswith&  sM    ''v&!D6*tf%S gY'$
	
r   c                     | j                  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       y )!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"]r3   z
a[id*="m"]z[href*=".css"]zlink[href*=".css"]zlink[id*="1"]z	[id*="1"])	rI   r   r   rr   r   r   r   r   rd   zdiv[id*="1"]rI   z[id*="noending"]z[href*="."])r   r   r   za[href*="."]zlink[href*="."]zdiv[id*="n"]rH   zdiv[id*="nn"]zdiv[data-tag*="edval"]rv   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                 F    | j                  dg dfdg dfddgfdg f       y )Nzp[lang|="en"])lang-en
lang-en-gb
lang-en-usz[lang|="en"]zp[lang|="fr"]lang-frzp[lang|="gb"]rv   r   s    r   test_attribute_exact_or_hypenz.TestCSSSelectors.test_attribute_exact_or_hypen]  s4    ''EFDEyk*b!		
r   c                 h    | j                  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       y )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]rI   rv   r   s    r   test_attribute_existsz&TestCSSSelectors.test_attribute_existse  s]    '')*4&!t}%IJ$)*rNOwi(		
r   c                 h    d}t        |d      }|j                  d      \  }d|j                  k(  sJ y )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  s:     T=1;;<=%%%r   c                 (   t        j                  t              5  | j                  j	                  d       d d d        t        j                  t
              5  | j                  j	                  d       d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)Nza:no-such-pseudoclassza:nth-of-type(a))r^   r_   r   r   r#   r   r   s    r   test_unsupported_pseudoclassz-TestCSSSelectors.test_unsupported_pseudoclassy  ss    ]]IJ 	7JJ56	7 ]]./ 	2JJ01	2 	2	7 	7	2 	2   A<B<BBc                    | j                   j                  d      }t        |      dk(  sJ |d   j                  dk(  sJ | j                   j                  d      }t        |      dk(  sJ |d   j                  dk(  sJ | j                   j                  d      }t        |      dk(  sJ | j                   j                  d      }t        |      dk(  sJ y )	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#   r6   r   r?   s     r   test_nth_of_typez!TestCSSSelectors.test_nth_of_type  s    jj <=3x1}}1v}}+++ jj <=3x1}}1v}}	))) jj <=3x1}} jj 673x1}}r   c                     | j                   j                  d      }t        |      dk(  sJ |d   j                  dk(  sJ y )Nzdiv#inner > p:nth-of-type(1)r
   r   r   r   r?   s     r   "test_nth_of_type_direct_descendantz3TestCSSSelectors.test_nth_of_type_direct_descendant  s=    jj >?3x1}}1v}}+++r   c                 *    | j                  ddg       y )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     ;dVDr   c                     | j                   j                  dd      }|j                  d      }| j                  |ddg       y )Nr1   r3   r!   rH   rI   )r   findr#   assert_selects_ids)r   rH   selecteds      r   test_select_on_elementz'TestCSSSelectors.test_select_on_element  s?     

&1<<& 	7G*<=r   c                 N    | j                  ddg       | j                  dg        y )Nz.fancy #innerrH   z.normal #innerr-   r   s    r   test_overspecified_child_idz,TestCSSSelectors.test_overspecified_child_id  s%    '; 0"5r   c                     | j                  ddg       | j                  ddg       | j                  ddg       g | j                  j                  d      k(  sJ y )Nz#p1 + h2rt   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  sV    
YK8
; :XJGTZZ&&y1111r   c                     | j                  dddg       | j                  ddg       | j                  ddg       | j                  ddg       g | j                  j                  d      k(  sJ y )	Nz#p1 ~ h2rt   ru   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  sl    
Y	,BC 09+>7 7$@TZZ&&}5555r   c                     t        j                  t              5  | j                  j	                  d       d d d        y # 1 sw Y   y xY w)Nzh1 >r]   r   s    r   test_dangling_combinatorz)TestCSSSelectors.test_dangling_combinator  s6    ]]./ 	&JJf%	& 	& 	&ra   c                 ,    | j                  dg d       y )Nzp[lang] ~ p)r   r   r   r-   r   s    r   2test_sibling_combinator_wont_select_same_tag_twicezCTestCSSSelectors.test_sibling_combinator_wont_select_same_tag_twice  s    /VWr   c                 ,    | j                  dddg       y )Nzx, yxidyidr-   r   s    r   test_multiple_selectz%TestCSSSelectors.test_multiple_select  s    7r   c                 ,    | j                  dddg       y )Nzx,yr   r   r-   r   s    r   "test_multiple_select_with_no_spacez3TestCSSSelectors.test_multiple_select_with_no_space  s    u~6r   c                 ,    | j                  dddg       y )Nzx,    yr   r   r-   r   s    r   $test_multiple_select_with_more_spacez5TestCSSSelectors.test_multiple_select_with_more_space  s    	E5>:r   c                 *    | j                  ddg       y )Nzx, xr   r-   r   s    r   test_multiple_select_duplicatedz0TestCSSSelectors.test_multiple_select_duplicated  s    0r   c                 ,    | j                  dddg       y )Nzx, y ~ p[lang=fr]r   r   r-   r   s    r   test_multiple_select_siblingz-TestCSSSelectors.test_multiple_select_sibling  s     3eY5GHr   c                 ,    | j                  dddg       y )Nzx, y > zr   zidbr-   r   s    r   .test_multiple_select_tag_and_direct_descendantz?TestCSSSelectors.test_multiple_select_tag_and_direct_descendant  s    
UFO<r   c                 ,    | j                  dg d       y )Nzdiv > x, y, zr   r   zidar   zidabzidacr-   r   s    r   /test_multiple_select_direct_descendant_and_tagsz@TestCSSSelectors.test_multiple_select_direct_descendant_and_tags  s    M	
r   c                 ,    | j                  dg d       y )Nzdiv x,y,  zr   r-   r   s    r   (test_multiple_select_indirect_descendantz9TestCSSSelectors.test_multiple_select_indirect_descendant  s    K	
r   c                 (   t        j                  t              5  | j                  j	                  d       d d d        t        j                  t              5  | j                  j	                  d       d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)Nz,x, yzx,,yr]   r   s    r   test_invalid_multiple_selectz-TestCSSSelectors.test_invalid_multiple_select  so    ]]./ 	'JJg&	']]./ 	&JJf%	& 	&	' 	'	& 	&r   c                 ,    | j                  dddg       y )Nzp[lang=en], p[lang=en-gb]r   r   r-   r   s    r   test_multiple_select_attrsz+TestCSSSelectors.test_multiple_select_attrs  s     ;i=VWr   c                 ,    | j                  dg d       y )Nz*x, y > z[id=zida], z[id=zidab], z[id=zidb])r   r   r   r-   r   s    r   test_multiple_select_idsz)TestCSSSelectors.test_multiple_select_ids  s    8:R	
r   c                 ,    | j                  dddg       y )Nzbody > div > x, y > zr   r   r-   r   s    r   test_multiple_select_nestedz,TestCSSSelectors.test_multiple_select_nested  s     7%Ir   c                     d}t        |d      }|j                  d      }dt        |      k(  sJ |j                  ddg      D ]  }||v rJ  y )Nz3<div class="c1"/><div class="c2"/><div class="c1"/>r   z.c1, .c2r   c1c2)class_)r   r#   r6   rn   )r   markupr   r   elements        r   test_select_duplicate_elementsz/TestCSSSelectors.test_select_duplicate_elements  sd     GV]3;;z*CM!!!
 }}T4L}9 	'Gh&&&	'r   c                     | j                   j                  dd      }|j                  j                  d      }|| j                   j                  dd      k(  sJ y )Nr1   rH   r   div[id=main]r3   )r   r   r4   closest)r   rH   r   s      r   test_closestzTestCSSSelectors.test_closest  sK    

'2))##N3$**//%F/;;;;r   c                     | j                   j                  dd      }| j                   j                  dd      }|j                  j                  d      du sJ |j                  j                  d      du sJ y )Nr1   rH   r   r3   r   FT)r   r   r4   rE   )r   rH   r3   s      r   
test_matchzTestCSSSelectors.test_match  sd    

'2zzu0yy~.%777xx~~n-555r   c                     | j                   j                  j                  d      }t        |t        j
                        sJ |\  }}|d   dk(  sJ |d   dk(  sJ y )Nrs   r!   rt   ru   )r   r4   iselectr$   typesGeneratorType)r   genrt   ru   s       r   test_iselectzTestCSSSelectors.test_iselect  s^    jjnn$$T*#u22333 't}	)))t}	)))r   c                 <   | j                   j                  dd      }|j                  j                  d      }t	        |j                  j                  d            dk(  sJ |j                  j                  d      }t        |t              sJ |\  }|d   dk(  sJ y )	Nr1   rH   r   rs   rU   zh2[id=header3]r!   ru   )r   r   r4   filterr6   r$   r   )r   rH   r'   results       r   test_filterzTestCSSSelectors.test_filter
  s    

'2))""4(599##D)*a///))""#34'9---d|y(((r   c                     | j                   j                  j                  } |d      dk(  sJ  |d      dk(  sJ  |d      | j                   j                  j                  d      k(  sJ y )Nz.foo#barz
\.foo\#barz()[]{}z\(\)\[\]\{\}z.foo)r   r4   escape)r   ms     r   test_escapezTestCSSSelectors.test_escape  s_    JJNN!!}...{2222yDJJNN11&9999r   )I__name__
__module____qualname____doc__r   r   strr   r   r*   assertSelectr   r.   r;   r@   rB   rF   rJ   rR   rW   r[   r`   rf   ri   rl   ro   rw   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"?T
2'I*
W

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



&X

J'<
6*):r   r   )r^   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 ?: 6I2{gen,9L6 **3MNs:x s: Os:r   