
    (phH                        % S SK r S SKrS SKJrJr  S SKJrJrJrJ	r	  S SK
Jr  SSKJrJr  \	\   \S'   \(       a  S SKJrJr  \r\" \5      \" S	5      :  a  \r\ R,                  R/                  \(       + S
S9 " S S\5      5       rg)    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                      \ rS rSrSrSrS rS\S\\   S\	SS	4S
 jr
\
rS\\\\   4   4S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%S% r&S& r'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/S/ r0S0 r1S1 r2S2 r3S3 r4S4 r5S5 r6S6 r7S7 r8S8 r9S9 r:S: r;S; r<S< r=S= r>S> r?S? r@S@ rASA rBSB rCSC rDSD rESE rFSF rGSG rHSH rISIrJg	)JTestCSSSelectors$   zTest 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                 :    [        U R                  S5      U l        g )Nhtml.parser)r   HTML_soupselfs    E/var/www/html/venv/lib/python3.13/site-packages/bs4/tests/test_css.pysetup_methodTestCSSSelectors.setup_method^   s    "499m<
    selectorexpected_idskwargsreturnNc           	      L   U R                   R                  " U40 UD6n[        U[        5      (       d   eU Vs/ s H  oUS   PM	     nnUR	                  5         UR	                  5         X&:X  d2   SU< SSR                  U5      < SSR                  U5      < S35       eg s  snf )Nidz	Selector z, expected [z, z], got [])r   select
isinstancer   sortjoin)r   r   r   r    resultselel_idss          r   assert_css_selects#TestCSSSelectors.assert_css_selectsa   s     **##H77'9----%,-WrT(W-% 	
IIl#IIf(
 	
% .s   B!testsc                 <    U H  u  p#U R                  X#5        M     g )Nr,   )r   r.   r   r   s       r   assert_css_select_multiple+TestCSSSelectors.assert_css_select_multipleq   s    &+"H##H; ',r   c                 (   U R                   R                  R                  S5      nU R                   R                  U5      n[	        U5      S:X  d   eU H  nUR
                  S:X  a  M   e   U R                   R                  U5      nSUS   :X  d   eg Ndiv   mainr#   )r   csscompiler%   lenname
select_one)r   selelsr5   r*   s        r   test_precompiled!TestCSSSelectors.test_precompiledu   s    jjnn$$U+jj$3x1}}C88u$$$  ZZ""3'D!!!r   c                     U R                   R                  S5      n[        U5      S:X  d   eUS   R                  S:X  d   eUS   R                  S/:X  d   eg )Ntitler
   r   z	The title)r   r%   r:   r;   contentsr   r>   s     r   test_one_tag_one!TestCSSSelectors.test_one_tag_one   sT    jj(3x1}}1v{{g%%%1v;-///r   c                     U R                   R                  S5      n[        U5      S:X  d   eU H  nUR                  S:X  a  M   e   U R                   R	                  S5      nSUS   :X  d   eg r4   )r   r%   r:   r;   r<   )r   r>   r5   r*   s       r   test_one_tag_many"TestCSSSelectors.test_one_tag_many   sj    jj&3x1}}C88u$$$  ZZ""5)D!!!r   c                 H    U R                   R                  S5      nS UL d   eg )Nnonexistenttag)r   r<   )r   matchs     r   (test_select_one_returns_none_if_no_match9TestCSSSelectors.test_select_one_returns_none_if_no_match   s#    

%%&67u}}r   c                 ,    U R                  SSS/5        g )Nzdiv divinnerdata1r0   r   s    r   test_tag_in_tag_one$TestCSSSelectors.test_tag_in_tag_one   s    	GW+=>r   c                 >    S H  nU R                  U/ SQ5        M     g )N)html divhtml body divbody divrQ   r7   rP   footerr0   r   r   s     r   test_tag_in_tag_many%TestCSSSelectors.test_tag_in_tag_many   s    AH##H.RS Br   c                 t    U R                  SS/SS9  U R                  SSS/SS9  U R                  S/ S	QS
S9  g )NrU   r7   r
   )limitrV   rP      rW   rX   
   r0   r   s    r   
test_limitTestCSSSelectors.test_limit   sN    
VHA>'61B!L<B 	  	
r   c                 X    [        U R                  R                  S5      5      S:X  d   eg )Ndelr   r:   r   r%   r   s    r   test_tag_no_match"TestCSSSelectors.test_tag_no_match   s$    4::$$U+,111r   c                     [         R                  " [        5         U R                  R	                  S5        S S S 5        g ! , (       d  f       g = f)Nztag%tpytestraisesr   r   r%   r   s    r   test_invalid_tag!TestCSSSelectors.test_invalid_tag   s-    ]]./JJg& 0//   A  
Ac                 ,    U R                  SSS/5        g )Ncustom-dashed-tagdash1dash2r0   r   s    r   test_select_dashed_tag_ids+TestCSSSelectors.test_select_dashed_tag_ids   s     3gw5GHr   c                     U R                   R                  S5      nUS   R                  S:X  d   eUS   S   S:X  d   eg )Nzcustom-dashed-tag[id="dash2"]r   rp   r#   rr   )r   r%   r;   )r   dasheds     r   test_select_dashed_by_id)TestCSSSelectors.test_select_dashed_by_id   sD    ""#BCay~~!4444ay')))r   c                 `    U R                   R                  S5      S   R                  S:X  d   eg )Nzbody > custom-dashed-tagr   zHello there.)r   r%   textr   s    r   test_dashed_tag_text%TestCSSSelectors.test_dashed_tag_text   s+    zz  !;<Q?DDVVVr   c                 x    U R                   R                  S5      U R                   R                  S5      :X  d   eg )Nrp   )r   r%   find_allr   s    r   #test_select_dashed_matches_find_all4TestCSSSelectors.test_select_dashed_matches_find_all   s8    zz  !459L9L:
 
 	
 
r   c                 6    U R                  SS/4SSS/45        g )Nh1header1h2header2header3r1   r   s    r   test_header_tags!TestCSSSelectors.test_header_tags   s'    ''I;Iy)*	
r   c                     S HS  nU R                   R                  U5      n[        U5      S:X  d   eUS   R                  S:X  d   eUS   S   S/:X  a  MS   e   g )N)z.onepzp.onepzhtml p.onepr
   r   pclassonep)r   r%   r:   r;   )r   r   r>   s      r   test_class_oneTestCSSSelectors.test_class_one   s^    :H**##H-Cs8q= =q6;;#%%%q6'?vh...	 ;r   c                 \    U R                   R                  S5      n[        U5      S:X  d   eg )Nzdiv.onepr   r   r%   r:   rD   s     r   test_class_mismatched_tag*TestCSSSelectors.test_class_mismatched_tag   s&    jj
+3x1}}r   c                 <    S H  nU R                  US/5        M     g )N)z	div#innerz#innerzdiv div#innerrP   r0   rZ   s     r   test_one_idTestCSSSelectors.test_one_id   s    @H##Hwi8 Ar   c                 \    U R                   R                  S5      n[        U5      S:X  d   eg )Nz#doesnotexistr   r   rD   s     r   test_bad_idTestCSSSelectors.test_bad_id   s&    jj03x1}}r   c                     U R                   R                  S5      n[        U5      S:X  d   eU H  nUR                  S:X  a  M   e   US   S   S/:X  d   eUS   R	                  S5      (       a   eg )Nzdiv#inner p   r   r
   r   r   r   )r   r%   r:   r;   has_attr)r   r>   r*   s      r   test_items_in_id!TestCSSSelectors.test_items_in_id   st    jj.3x1}}B77c>!> 1vg6(***q6??7+++++r   c                 j    S H-  n[        U R                  R                  U5      5      S:X  a  M-   e   g )N)zdiv#main delzdiv#main div.oopszdiv div#mainr   re   rZ   s     r   test_a_bunch_of_emptys'TestCSSSelectors.test_a_bunch_of_emptys   s/    MHtzz((23q888 Nr   c                 <    S H  nU R                  US/5        M     g )N)z.class1zp.class1z.class2zp.class2z.class3zp.class3zhtml p.class2zdiv#inner .class2pmultir0   rZ   s     r   test_multi_class_support)TestCSSSelectors.test_multi_class_support   s"    	
H ##Hxj9	
r   c                 <    S H  nU R                  US/5        M     g )N)z.class1.class3z.class3.class2z.class1.class2.class3r   r0   rZ   s     r   test_multi_class_selection+TestCSSSelectors.test_multi_class_selection   s    UH##Hxj9 Vr   c                 R    U R                  SSS/5        U R                  SS/5        g )Nz.s1 > as1a1s1a2z.s1 > a spans1a2s1r0   r   s    r   test_child_selector$TestCSSSelectors.test_child_selector   s)    	FF+;<
;r   c                 *    U R                  SS/5        g )Nz.s1 > a#s1a2 spanr   r0   r   s    r   test_child_selector_id'TestCSSSelectors.test_child_selector_id   s     3hZ@r   c                     U R                  SS/4SS/4SS/4SS/4SS/4SS/4S	S/4S
/ 4SS/4SS/4SS/4S/ 4S/ 4S/ 45        g )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_equals&TestCSSSelectors.test_attribute_equals   s    '''D6"v&4&!%v.$tf-$tf-',!D6* 4&) 4&)#R($b)#R(	
r   c                 t    U R                  SS/4SS/4SS/4SS/4SS/4SS/4SS	/4S
S	/4SS	/4SS	/45
        g )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_tilde%TestCSSSelectors.test_attribute_tilde  st    ''!H:.!H:.!H:. 8*- 8*- 8*-%)ug&(eW%	
r   c                     U R                  SS/4SS/4S/ 4S/ 4S/ 4SS/4SS	S
/4SS	S
/4SSS/4SS
S/4SS/4SS
/4SS/45        g )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"]r7   zdiv[id^="m"]z
a[id^="m"]zdiv[data-tag^="dashed"]rQ   r   r   s    r   test_attribute_startswith*TestCSSSelectors.test_attribute_startswith  s    ''v&!D6*', "%$b) 4&)!E4=1 5$-08T*+4.)fX&D6"&	2	
r   c           	      T    U R                  SS/4SS/4SS/4S/ SQ4SS/4S	/ 45        g )
Nz[href$=".css"]r   zlink[href$=".css"]zlink[id$="1"]z	[id$="1"])rQ   r   r   r   r   s2a1r   rq   zdiv[id$="1"]rQ   z[id$="noending"]r   r   s    r   test_attribute_endswith(TestCSSSelectors.test_attribute_endswith&  sM    ''v&!D6*tf%S gY'$
	
r   c                     U R                  SS/4SS/4S/ 4S/ 4S/ 4SS/4SS	S
/4SSS/4SS/4SS
/4SS/4SS/4SS/4S/ SQ4SS/4S/ 4S/ SQ4SS	S
/4SS/4SSS/4SS/4S S/45        g )!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"]r7   z
a[id*="m"]z[href*=".css"]zlink[href*=".css"]zlink[id*="1"]z	[id*="1"])	rQ   r   r   r   r   r   r   r   rq   zdiv[id*="1"]rQ   z[id*="noending"]z[href*="."])r   r   r   za[href*="."]zlink[href*="."]zdiv[id*="n"]rP   zdiv[id*="nn"]zdiv[data-tag*="edval"]r   r   s    r   test_attribute_contains(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    U R                  S/ SQ4S/ SQ4SS/4S/ 45        g )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_hypen.TestCSSSelectors.test_attribute_exact_or_hypen]  s4    ''EFDEyk*b!		
r   c                 h    U R                  S/ SQ4SS/4SSS/4S/ S	Q4S
SS/4S/ 4S/ 4SS/45        g )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]rQ   r   r   s    r   test_attribute_exists&TestCSSSelectors.test_attribute_existse  s]    '')*4&!t}%IJ$)*rNOwi(		
r   c                 j    Sn[        US5      nUR                  S5      u  nSUR                  :X  d   eg )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_name3TestCSSSelectors.test_quoted_space_in_selector_nameq  s:     T=1;;<=%%%r   c                 @   [         R                  " [        5         U R                  R	                  S5        S S S 5        [         R                  " [
        5         U R                  R	                  S5        S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = f)Nza:no-such-pseudoclassza:nth-of-type(a))rj   rk   r   r   r%   r   r   s    r   test_unsupported_pseudoclass-TestCSSSelectors.test_unsupported_pseudoclassy  se    ]]IJJJ56 K ]]./JJ01 0/ KJ 0/   A>B>
B
Bc                    U R                   R                  S5      n[        U5      S:X  d   eUS   R                  S:X  d   eU R                   R                  S5      n[        U5      S:X  d   eUS   R                  S:X  d   eU R                   R                  S5      n[        U5      S:X  d   eU R                   R                  S5      n[        U5      S:X  d   eg )	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_type!TestCSSSelectors.test_nth_of_type  s    jj <=3x1}}1v}}+++ jj <=3x1}}1v}}	))) jj <=3x1}} jj 673x1}}r   c                     U R                   R                  S5      n[        U5      S:X  d   eUS   R                  S:X  d   eg )Nzdiv#inner > p:nth-of-type(1)r
   r   r   r   rD   s     r   "test_nth_of_type_direct_descendant3TestCSSSelectors.test_nth_of_type_direct_descendant  s=    jj >?3x1}}1v}}+++r   c                 *    U R                  SS/5        g )Nz#inner > p:nth-of-type(2)r   r0   r   s    r   "test_id_child_selector_nth_of_type3TestCSSSelectors.test_id_child_selector_nth_of_type  s     ;dVDr   c                     U R                   R                  SSS9nUR                  S5      nU R                  USS/5        g )Nr5   r7   r#   rP   rQ   )r   findr%   assert_selects_ids)r   rP   selecteds      r   test_select_on_element'TestCSSSelectors.test_select_on_element  s?     

&1<<& 	7G*<=r   c                 N    U R                  SS/5        U R                  S/ 5        g )Nz.fancy #innerrP   z.normal #innerr0   r   s    r   test_overspecified_child_id,TestCSSSelectors.test_overspecified_child_id  s%    '; 0"5r   c                     U R                  SS/5        U R                  SS/5        U R                  SS/5        / U R                  R                  S5      :X  d   eg )Nz#p1 + h2r   z#p1 + h2 + pr   z#p1 + #header2 + .class1z#p1 + pr,   r   r%   r   s    r   test_adjacent_sibling_selector/TestCSSSelectors.test_adjacent_sibling_selector  sV    
YK8
; :XJGTZZ&&y1111r   c                     U R                  SSS/5        U R                  SS/5        U R                  SS/5        U R                  SS/5        / U R                  R                  S5      :X  d   eg )	Nz#p1 ~ h2r   r   z#p1 ~ #header2z#p1 ~ h2 + ar   z#p1 ~ h2 + [rel="me"]z#inner ~ h2r   r   s    r   test_general_sibling_selector.TestCSSSelectors.test_general_sibling_selector  sl    
Y	,BC 09+>7 7$@TZZ&&}5555r   c                     [         R                  " [        5         U R                  R	                  S5        S S S 5        g ! , (       d  f       g = f)Nzh1 >ri   r   s    r   test_dangling_combinator)TestCSSSelectors.test_dangling_combinator  s-    ]]./JJf% 0//rn   c                 ,    U R                  S/ SQ5        g )Nzp[lang] ~ p)r   r   r   r0   r   s    r   2test_sibling_combinator_wont_select_same_tag_twiceCTestCSSSelectors.test_sibling_combinator_wont_select_same_tag_twice  s    /VWr   c                 ,    U R                  SSS/5        g )Nzx, yxidyidr0   r   s    r   test_multiple_select%TestCSSSelectors.test_multiple_select  s    7r   c                 ,    U R                  SSS/5        g )Nzx,yr   r  r0   r   s    r   "test_multiple_select_with_no_space3TestCSSSelectors.test_multiple_select_with_no_space  s    u~6r   c                 ,    U R                  SSS/5        g )Nzx,    yr   r  r0   r   s    r   $test_multiple_select_with_more_space5TestCSSSelectors.test_multiple_select_with_more_space  s    	E5>:r   c                 *    U R                  SS/5        g )Nzx, xr   r0   r   s    r   test_multiple_select_duplicated0TestCSSSelectors.test_multiple_select_duplicated  s    0r   c                 ,    U R                  SSS/5        g )Nzx, y ~ p[lang=fr]r   r   r0   r   s    r   test_multiple_select_sibling-TestCSSSelectors.test_multiple_select_sibling  s     3eY5GHr   c                 ,    U R                  SSS/5        g )Nzx, y > zr   zidbr0   r   s    r   .test_multiple_select_tag_and_direct_descendant?TestCSSSelectors.test_multiple_select_tag_and_direct_descendant  s    
UFO<r   c                 ,    U R                  S/ SQ5        g )Nzdiv > x, y, zr   r  zidar  zidabzidacr0   r   s    r   /test_multiple_select_direct_descendant_and_tags@TestCSSSelectors.test_multiple_select_direct_descendant_and_tags  s    M	
r   c                 ,    U R                  S/ SQ5        g )Nzdiv x,y,  zr  r0   r   s    r   (test_multiple_select_indirect_descendant9TestCSSSelectors.test_multiple_select_indirect_descendant  s    K	
r   c                 @   [         R                  " [        5         U R                  R	                  S5        S S S 5        [         R                  " [        5         U R                  R	                  S5        S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = f)Nz,x, yzx,,yri   r   s    r   test_invalid_multiple_select-TestCSSSelectors.test_invalid_multiple_select  s]    ]]./JJg& 0]]./JJf% 0/ 0///r   c                 ,    U R                  SSS/5        g )Nzp[lang=en], p[lang=en-gb]r   r   r0   r   s    r   test_multiple_select_attrs+TestCSSSelectors.test_multiple_select_attrs  s     ;i=VWr   c                 ,    U R                  S/ SQ5        g )Nz*x, y > z[id=zida], z[id=zidab], z[id=zidb])r   r  r  r0   r   s    r   test_multiple_select_ids)TestCSSSelectors.test_multiple_select_ids  s    8:R	
r   c                 ,    U R                  SSS/5        g )Nzbody > div > x, y > zr   r  r0   r   s    r   test_multiple_select_nested,TestCSSSelectors.test_multiple_select_nested  s     7%Ir   c                     Sn[        US5      nUR                  S5      nS[        U5      :X  d   eUR                  SS/S9 H
  nXC;   a  M
   e   g )Nz3<div class="c1"/><div class="c2"/><div class="c1"/>r   z.c1, .c2r   c1c2)class_)r   r%   r:   r~   )r   markupr   r   elements        r   test_select_duplicate_elements/TestCSSSelectors.test_select_duplicate_elements  s]     GV]3;;z*CM!!!
 }}T4L}9G&&& :r   c                     U R                   R                  SSS9nUR                  R                  S5      nX R                   R                  SSS9:X  d   eg )Nr5   rP   r   div[id=main]r7   )r   r   r8   closest)r   rP   r4  s      r   test_closestTestCSSSelectors.test_closest  sI    

'2))##N3**//%F/;;;;r   c                     U R                   R                  SSS9nU R                   R                  SSS9nUR                  R                  S5      SL d   eUR                  R                  S5      SL d   eg )Nr5   rP   r   r7   r3  FT)r   r   r8   rL   )r   rP   r7   s      r   
test_matchTestCSSSelectors.test_match  sd    

'2zzu0yy~.%777xx~~n-555r   c                     U R                   R                  R                  S5      n[        U[        R
                  5      (       d   eUu  p#US   S:X  d   eUS   S:X  d   eg )Nr   r#   r   r   )r   r8   iselectr&   typesGeneratorType)r   genr   r   s       r   test_iselectTestCSSSelectors.test_iselect  s_    jjnn$$T*#u223333 t}	)))t}	)))r   c                 D   U R                   R                  SSS9nUR                  R                  S5      n[	        UR                  R                  S5      5      S:X  d   eUR                  R                  S5      n[        U[        5      (       d   eUu  nUS   S:X  d   eg )	Nr5   rP   r   r   r_   zh2[id=header3]r#   r   )r   r   r8   filterr:   r&   r   )r   rP   r)   results       r   test_filterTestCSSSelectors.test_filter
  s    

'2))""4(599##D)*a///))""#34'9----d|y(((r   c                     U R                   R                  R                  nU" S5      S:X  d   eU" S5      S:X  d   eU" S5      U R                   R                  R                  S5      :X  d   eg )Nz.foo#barz
\.foo\#barz()[]{}z\(\)\[\]\{\}z.foo)r   r8   escape)r   ms     r   test_escapeTestCSSSelectors.test_escape  s_    JJNN!!}...{2222yDJJNN11&9999r   )r   )K__name__
__module____qualname____firstlineno____doc__r   r   strr   r   r,   assertSelectr   r1   r?   rE   rH   rM   rR   r[   ra   rf   rl   rs   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(  r0  r5  r8  r?  rD  rI  __static_attributes__ 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   )rj   r<  bs4r   r   typingr   r   r   r   packaging.versionr	    r   r   	Exception__annotations__	soupsiever   r   r   NotImplementedErrormarkskipifr   rS  r   r   <module>r^     s     
  &
 15Y ?: 6I2{gen,9L6 **3MNs:x s: Os:r   