
     h:~                     V    d Z ddlZddlZddlZddlmZ  G d dej                        Z	y)zTests for css.CSSStyleSheet    N   )basetestc                       e 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!dZd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!y )"TestCSSStyleSheetc                     t         j                  j                         | _        | j                  | _        t         j                  j                         | _        y )N)cssutilscssCSSStyleSheetrsCSSStyleRuleruleselfs    a/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/cssutils/tests/test_cssstylesheet.pysetup_methodzTestCSSStyleSheet.setup_method   s5    ++-LL--/	    c                    d| j                   j                  k(  sJ | j                   j                  rJ g | j                   j                  k(  sJ | j                   j                  rJ | j                   j
                  J | j                   j                  J | j                   j                  J | j                   j                  J d| j                   j                  k(  sJ t        j                  t              5  | j                  j                  dd       ddd       t        j                  t              5  | j                  j                  dd       ddd       t        j                  t              5  | j                  j                  dd       ddd       t        j                  t              5  | j                  j                  dd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   yxY w)	zCSSStyleSheet.__init__()ztext/cssN hrefxparentStyleSheet	ownerNodetype)r   r   	_readonlycssRulesdisabledr   mediar   r   titlepytestraisesAttributeErrorr   __setattr__r   s    r   	test_initzTestCSSStyleSheet.test_init   st   TVV[[(((66####TVV__$$$66??""vv{{"""vv||###vv'''vv&&...TVV\\!!! ]]>*FFvs+ +]]>*FF137 +]]>*FF{C0 +]]>*FFvs+ +* +*******s0   ;G9G'7G35G?G$'G03G<?Hc                    t         j                  j                         }d|_        t         j                  j                  j
                  t         j                  j                  j
                  t         j                  j                  j                  g}t        |      D ]-  \  }}||j                  |   k(  sJ |j                  ||   k(  r-J  y)zCSSStyleSheet.__iter__()z'@import "x";@import "y";@namespace "u";N)
r   r	   r
   cssTextCSSRuleIMPORT_RULENAMESPACE_RULE	enumerater   r   )r   r   typesir   s        r   	test_iterzTestCSSStyleSheet.test_iter(   s    LL&&(A	LL  ,,LL  ,,LL  //

 !|GAt1::a=(((99a((( $r   c                 l   t        j                  d      }|j                  }|j                  d   j                  |k(  sJ |d   j                  |k(  sJ d|_        ||j                  k7  sJ t        j                  d      j                  |_        ||j                  k7  sJ |j                  D ]  }|j                  |k(  rJ  t        j                  d      }|j
                  }t        |j
                  j                               dgk(  sJ d|_        ||j
                  k7  sJ t        |j
                  j                               dgk(  sJ t        j                  d	      }|j                  }|d
   dk(  sJ t        j                  d      }|j                  }||k7  sJ |d
   dk(  sJ |d
   dk(  sJ y)zCSSStylesheet referencesa {}r   zb{}a  
            @charset "ascii";
            /**/
            @import "x";
            @namespace "http://example.com/ns0";
            @media all {
                a { color: green; }
                }
            @font-face {
                font-family: x;
                }
            @page {
                font-family: Arial;
                }
            @x;
            b {}').cssRulesz)@namespace "http://example.com/ns1"; a {})r   zhttp://example.com/ns1z-@namespace x "http://example.com/ns2"; x|a {})r   zhttp://example.com/ns2z@variables { a:1}a1z@variables { a:2}2N)	r   parseStringr   r   r&   
namespaceslistitems	variables)r   r   rulesr   r4   vars1vars2s          r   	test_refszTestCSSStyleSheet.test_refs5   s     (

zz!}--222Qx((A--- 	 

""" ))
" (# 	

& 

"""A%%***    !LM\\
ALL&&().L-MMMMC	Q\\)))ALL&&().M-NNNN   !45SzS     !45~~SzS   SzS   r   c                 ,   t        j                  d      }d|j                  j                  k(  sJ |j                  d= d|j                  j                  k(  sJ |j                  j	                  d       d|j                  j                  k(  sJ |j                  j                  t        j                  d      j                         d|j                  j                  k(  sJ d|j                  k(  sJ |j                  D ]  }|j                  |k(  rJ  y	)
zCSSStyleSheet.cssRulesz/*1*/a {x:1}   r   r   z/*2*/z/*3*/x {y:2}   s1   a {
    x: 1
    }
/*2*/
/*3*/
x {
    y: 2
    }N)r   r3   r   lengthappendextendr&   r   )r   r   r   s      r   test_cssRuleszTestCSSStyleSheet.test_cssRulesn   s      0AJJ%%%%%JJqMAJJ%%%%%	

'"AJJ%%%%%	

(..~>GGHAJJ%%%%%JaiiWWWA%%*** r   c                    i ddddddddd	d
dddddddddddddddddddddd }| j                  |       i dd!dd!dd"dd!d	d!dd!dd!dd#dd!dd!dd!dd!dd$dd!dd!dd%}| j                  |       t        j                  j	                         }d&|_        |j                  D ]  }||j                  k(  rJ  y!)'zCSSStyleSheet.cssTextr   r   z@charset "ascii";
@import "x";s   @charset "ascii";
@import "x";z@charset "ascii";
@media all {}s   @charset "ascii";z@charset "ascii";
@x;s   @charset "ascii";
@x;z$@charset "ascii";
a {
    x: 1
    }s$   @charset "ascii";
a {
    x: 1
    }z@x;
@import "x";s   @x;
@import "x";z@import "x";
@import "y";s   @import "x";
@import "y";z@import "x";
@media all {}   @import "x";z@import "x";
@x;s   @import "x";
@x;z@import "x";
a {
    x: 1
    }   @import "x";
a {
    x: 1
    }z@x;
@namespace a "x";s   @x;
@namespace a "x";z#@namespace a "x";
@namespace b "y";s#   @namespace a "x";
@namespace b "y";z,@import "x";
@namespace a "x";
@media all {}s   @import "x";
@namespace a "x";z@namespace a "x";
@x;s   @namespace a "x";
@x;z$@namespace a "x";
a {
    x: 1
    }s$   @namespace a "x";
a {
    x: 1
    }z@namespace url("e1");
                @namespace url("e2");
                @namespace x url("x1");
                @namespace x url("x2");
                test{color: green}
                x|test {color: green}sa   @namespace "e2";
@namespace x "x2";
test {
    color: green
    }
x|test {
    color: green
    }N@charset "ascii";@import "x";z@import "x";
@namespace a "x";za@namespace "e2";
@namespace x "x2";
test {
    color: green
    }
x|test {
    color: green
    }z@charset "ascii";@import "x";@namespace a "x";
        @media all {/*1*/}@page {margin: 0}a {
    x: 1
    }@unknown;/*comment*/)
do_equal_r
do_equal_pr   r	   r
   r&   r   r   )r   testsr   r   s       r   test_cssTextzTestCSSStyleSheet.test_cssText}   s   0
0
 ./Q0
 /0D	0

 %&?0
 67a0
  !50
 )*G0
 *?0
  !50
 12W0
 %&?0
 34[0
  =>`!0
" %&?#0
$ 67a%0
&)
+	10
b 	0
0
 .t0
 /0C	0

 %d0
 6t0
  0
 )$0
 *>0
  0
 1$0
 %d0
 3D0
  =>_!0
" %d#0
$ 6t%0
&)
+	10
b 	LL&&(W	A***** r   c                 <   t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  d}| j                  |       | j	                  |       y)z)CSSStyleSheet.cssText HierarchyRequestErr)z @charset "utf-8";z"@charset "ascii";@charset "ascii";z/*c*/@charset "ascii";z@import "x"; @charset "ascii";z#@namespace a "x"; @charset "ascii";z@media all {} @charset "ascii";z@page {} @charset "ascii";za {} @charset "ascii";z@namespace a "x"; @import "x";z@media all {} @import "x";z@page {} @import "x";za {} @import "x";z@media all {} @namespace a "x";z@page {} @namespace a "x";za {} @namespace a "x";N)xmldomHierarchyRequestErr
do_raise_r
do_raise_pr   rJ   s     r    test_cssText_HierarchyRequestErrz2TestCSSStyleSheet.test_cssText_HierarchyRequestErr   s     #&''"="=25''2M2M&)gg&A&A.1gg.I.I36773N3N/2ww/J/J*-''*E*E&)gg&A&A.1gg.I.I*-''*E*E%(WW%@%@!$!<!</2ww/J/J*-''*E*E&)gg&A&A%
( 	r   c                 z   t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  d}| j                  |       | j	                  |       y)zFCSSStyleSheet.cssText SyntaxErr

        for single {, } or ;
        ){};z@charset "ascii";{z@charset "ascii";}z@charset "ascii";;N)rM   rN   	SyntaxErrrP   rQ   rR   s     r   test_cssText_SyntaxErrz(TestCSSStyleSheet.test_cssText_SyntaxErr  ss     """""""%''"3"3"%''"3"3"%''"3"3
 	r   c                    d| j                   _        d| j                   j                  k(  sJ d| j                   _        d| j                   j                  k(  sJ d| j                   j                  j                  k(  sJ d| j                   j                  d   j                  k(  sJ d| j                   _        d| j                   j                  k(  sJ d| j                   j                  j                  k(  sJ d| j                   _        d| j                   j                  k(  sJ d| j                   j                  j                  k(  sJ t        j                  t        j                  j                        5  | j                   j                  d       ddd       d| j                   j                  k(  sJ d| j                   j                  j                  k(  sJ y# 1 sw Y   JxY w)	zCSSStyleSheet.encodingr   utf-8asciir   r   NzUTF-8zINVALID ENCODING)r   r&   encodingr   r?   r    r!   rM   rN   rX   _setEncodingr   s    r   test_encodingzTestCSSStyleSheet.test_encoding  sd   $&&//)))!$&&//)))DFFOO*****$&&//!,55555$&&//)))DFFOO*****!$&&//)))DFFOO*****]]377,,-FF 23 .$&&//)))DFFOO***** .-s   5GG#c                    t         j                  j                         }dt        |j                        k(  sJ d}d}||_        |j
                  |j                         k(  sJ |j                  j                  dddk(  sJ d|j                  v sJ d|j                  v sJ d	|j                  vsJ t        j                  t        j                  j                        5  |j                  j                  d       d
d
d
       d|j                  d<   |j                  d= t        j                  t        j                  j                        5  |j                  j                  d       d
d
d
       d|j                  d   k(  sJ d|j                  d   k(  sJ t        j                  t        j                  j                        5  |j                  j                  d       d
d
d
       ddgt        t!        |j                              k(  sJ dt        |j                        k(  sJ t        j                  t        j                  j                        5  |j                  j#                  dd       d
d
d
       d|j                  d<   |j                  j                  ddddk(  sJ d|j                  d<   |j                  j                  ddddk(  sJ d|j                  j%                  d      k(  sJ d|j                  j%                  d      k(  sJ t        j                  t&              5  |j                  j%                  d       d
d
d
       t)        |j                  j+                               h dk(  sJ d|j                  j-                  dd      k(  sJ d|j                  j-                  dd      k(  sJ y
# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   xY w# 1 sw Y   wxY w# 1 sw Y   xY w)z#CSSStyleSheet.namespaces.namespacesr   zY@namespace "default";
@namespace ex "example";
@namespace ex2 "example";
ex2|x { top: 0 }zH@namespace "default";
@namespace ex2 "example";
ex2|x {
    top: 0
    }defaultexample)r   ex2r   rc   NOTSETNdelUNSETr=   NEWURInewn1)r   rc   ri   n)r   rc   rj   >   r   rj   rc   r   UNKNOWNznot used defa)r   r	   r
   lenr4   r&   encoder    r!   rM   rN   NoModificationAllowedErr__delitem__NamespaceErr__getitem__sortedr5   __setitem__prefixForNamespaceURI
IndexErrorsetkeysget)r   r   r	   expcsss       r   test_namespaces1z"TestCSSStyleSheet.test_namespaces1+  s1    LL&&(C%%%%	
 	yyFMMO+++||&&y*KKKK Q\\!!!$$$q||+++]]377;;<LL$$U+ =#ULL]]377//0LL$$U+ 1 ALL,,,,ALL////]]377//0LL$$W- 1 E{fT!,,%78888C%%%%]]377;;<LL$$UH5 ="T||&&yRW*XXXX!S||&&yQV*WWWWQ\\77	BBBB::9EEEE]]:&LL..w7 ' 1<<$$&'+;;;;all&&y#6666ALL,,UODDDD? =< 10
 10 =< '&s<   N?OOO&.O3?O	OO#&O03O<c                 
   t         j                  j                         }d}|j                  ||z          |j                  |j                         k(  sJ t         j                  j                  dd      }|j                  |       t         j                  j                  d      }|j                  |       d}|j                  |j                         k(  sJ d|_        d	}|j                  |j                         k(  sJ t        j                  t        j                  j                        5  |j                  d
       ddd       d}|j                  |       |d|z   z  }|j                  |j                         k(  sJ t        j                  t        j                  j                        5  |j                  d       ddd       d}|j                  |       |d|z   z  }|j                  |j                         k(  sJ |j                  d   }|j                  d   }t        j                  t        j                  j                        5  |j                  d   j                  d       ddd       |j                  d   j                   d}
}	|
|j                  d   _        |j#                  |	|
      }|j                  |j                         k(  sJ t        j                  t        j                  j                        5  |j                  d       ddd       |j                   d}
}	|
|_        |j#                  |	|
      }|j                  |j                         k(  sJ t        j                  t        j                  j                        5  |j                  d   j$                  j'                  d       ddd       |j                  d   j                   d}
}	|j                  d   j$                  j'                  |
       |j#                  |	|	dz   |
z         }|j                  |j                         k(  sJ t        j                  t        j                  j                        5  |j$                  j'                  d       ddd       |j                   d}
}	|j$                  j'                  |
       |j#                  |	|	dz   |
z         }|j                  |j                         k(  sJ |j                  dk(  sJ y# 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   {xY w# 1 sw Y   xY w)zCSSStyleSheet.namespacesz@namespace n "new";rc   rb   )prefixnamespaceURIra   )r}   zC@namespace n "new";
@namespace ex2 "example";
@namespace "default";DEFAULTzK@namespace n "new";
@namespace ex2 "example";
@namespace DEFAULT "default";z@media all {x|a {left: 0}}Nz;@media all {
    ex2|SEL1 {
        left: 0
        }
    }
zx|a {top: 0}zn|SEL2 {
    top: 0
    }   r>   r   zx|bz	n|SEL3, azex2|SEL4, az	ex2|SELMRz, z	ex2|SELSRs   @namespace n "new";
@namespace ex2 "example";
@namespace DEFAULT "default";
@media all {
    n|SEL3, a, ex2|SELMR {
        left: 0
        }
    }
ex2|SEL4, a, ex2|SELSR {
    top: 0
    })r   r	   r
   
insertRuler&   rm   CSSNamespaceRuler|   r    r!   rM   rN   rp   addr   _setSelectorTextselectorTextreplaceselectorListr@   )r   r   r	   r   ry   mcssscssmrsroldselnewsels              r   test_namespaces2z"TestCSSStyleSheet.test_namespaces2d  s     LL&&(#	S3YyyCJJL(((LL))Y)O	QLL))y)A	Q yyFMMO+++! yyFMMO+++ ]]377//0EE./ 1P	d$+yyFMMO+++ ]]377//0EE.! 1,	d$+yyFMMO+++ZZ]ZZ] ]]377//0KKN++E2 1Q44k&,A#/yyFMMO+++]]377//0& 1- /yyFMMO+++ ]]377//0KKN''..u5 1Q44k
A##**62(>?yyFMMO+++]]377//0OO""5) 1+
v&(>?yyFMMO+++ II
			
	c 10 10 10 10 10 10sH   -S<.T	TT#)T0&T=<T	TT #T-0T:=Uc                 R   t         j                  j                         }d}t        j                  t
        j                  j                        5  |j                  |       ddd       |j                  d       |j                  d   dk(  sJ t         j                  j                         }|ddif|_        |j                  |       |j                  dk(  sJ t        j                  t
        j                  j                        5  |j                  j                  d       ddd       t        j                  t
        j                  j                        5  |j                  j                  d	       ddd       d|j                  d
<   |j                  j                  d	       |j                  dk(  sJ t        j                  t
        j                  j                        5  |j                  j                  d
       ddd       |j                  dk(  sJ d|j                   d   _        |j                  dk(  sJ d|j                   d   _        d|j                   d   _        |j                  dk(  sJ y# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y    xY w# 1 sw Y   xY w)zCSSStyleSheet.namespaces 3zh|a { top: 0 }Nz@namespace x "html";r   htmlhs+   @namespace x "html";
x|a {
    top: 0
    }zh|bzy|bys0   @namespace y "html";
y|a, y|b {
    top: 0
    }r   r   s*   @namespace "html";
a, b {
    top: 0
    }za, br   s,   @namespace x "html";
a, b {
    top: 0
    })r   r	   r
   r    r!   rM   rN   rp   r   r4   r   r&   r   r@   rn   ro   r   r|   r   )r   r   r	   r   s       r   test_namespaces3z"TestCSSStyleSheet.test_namespaces3  s    LL&&(]]377//0EE#J 1 	
$%||C F***LL%%'3-(		ayyMMMM ]]377//0NN!!%( 1]]377//0NN!!%( 1"S	e$yyRRRR]]377;;<LL$$S) =yyRRRR!

1yyLLLL  #

1%+

1"yyNNNN= 10 1000 =<s0   I6JJ"J6J JJJ&c                 V   t         j                  j                         }i |j                  j                  k(  sJ d|j                  j                  d<   i |j                  j                  k(  sJ d|j                  d<   ddi|j                  j                  k(  sJ |j                  d= i |j                  j                  k(  sJ d|j                  d<   ddi|j                  j                  k(  sJ |j                  d= i |j                  j                  k(  sJ d|j                  d<   |j                  j                  d= ddi|j                  j                  k(  sJ t	        j
                  t        j                  j                  d	      5  |j                  d
= ddd       y# 1 sw Y   yxY w)zCSSStyleSheet.namespaces 4zno setting possibler0   ra   Nr   uripzPrefix undefined not found\.match	undefined)	r   r	   r
   r4   r    r!   rM   rN   rp   r   r   s     r   test_namespaces4z"TestCSSStyleSheet.test_namespaces4  sd    LL&&(Q\\,,,,,'<$Q\\,,,,,&TI!,,"9"9999LLQ\\,,,,,$RI!,,"9"9999LLQ\\,,,,,!SLL##C(U|q||66666]]377//7VW[) XWWs   FF(c                 6   t        j                  d      }|j                  dk(  sJ t         j                  j	                         }t        j                  t        j                  j                  d      5  |j                  d       ddd       y# 1 sw Y   yxY w)zCSSStyleSheet.namespaces 5za|a { color: red }r   zPrefix a not found\.r   N)r   r3   r&   r	   r
   r    r!   rM   rN   rp   _setCssTextr   s     r   test_namespaces5z"TestCSSStyleSheet.test_namespaces5  sl       !56yyCLL&&(]]377//7NOMM./ POOs   4BBc                    d| j                   _        d| j                   j                  j                  k(  sJ t	        j
                  t        j                  j                        5  | j                   j                  d       ddd       | j                   j                  d   }| j                   |j                  k(  sJ | j                   j                  d       |j                  J d| j                   j                  j                  k(  sJ d| j                   j                  k(  sJ | j                   j                  d       d| j                   j                  j                  k(  sJ d	| j                   j                  k(  sJ | j                   j                  d
       d| j                   j                  j                  k(  sJ d| j                   j                  k(  sJ | j                   j                  d
       d
| j                   j                  j                  k(  sJ d| j                   j                  k(  sJ y# 1 sw Y   xY w)zCSSStyleSheet.deleteRule(index)z8@charset "ascii"; @import "x"; @x; a {
    x: 1
    }@y;   Nr>   s5   @charset "ascii";
@import "x";
@x;
a {
    x: 1
    }r   r   s#   @import "x";
@x;
a {
    x: 1
    }r   r=   rE   rD   )r   r&   r   r?   r    r!   rM   rN   IndexSizeErr
deleteRuler   )r   r   s     r   test_deleteRuleIndexz&TestCSSStyleSheet.test_deleteRuleIndex  s   UDFFOO*****]]377//0FFa  1
 FFOOBvv+++++"!!)))DFFOO*****Ivv~~	
 	!DFFOO*****9TVV^^KKK!DFFOO*****4FFF!DFFOO*****$&&..0005 10s   $H77Ic                    t         j                  j                         }d|_        |j                  \  }}}}t         j                  j                         }t        j                  t        j                  j                        5  |j                  |       ddd       d|j                  j                  k(  sJ |j                  |       d|j                  j                  k(  sJ |j                  dk(  sJ t        j                  t        j                  j                        5  |j                  |       ddd       |j                  |       d|j                  j                  k(  sJ |j                  dk(  sJ t        j                  t        j                  j                        5  |j                  |       ddd       y# 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zCSSStyleSheet.deleteRule(rule)z
        @namespace x "http://example.com";
        a { color: red; }
        b { color: blue; }
        c { color: green; }
        Nr>   r   sM   a {
    color: red
    }
b {
    color: blue
    }
c {
    color: green
    }r=   s3   a {
    color: red
    }
c {
    color: green
    })r   r	   r
   r&   r   r   r    r!   rM   rN   r   r   r?   )r   r   rj   s1s2s3r   s          r   test_deleteRulez!TestCSSStyleSheet.test_deleteRule)  sd   LL&&(	 

2r2LL%%']]377//0LLO 1 AJJ%%%%%	QAJJ%%%%%IIgh	
h ]]377//0LLO 1	RAJJ%%%%%yyWWWW]]377//0LL 10 10 10
 10s$   G !G%G G
GG"c                    t         j                  j                  d      | _        t         j                  j	                  d      | _        t         j                  j                  d      | _        t         j                  j                  d      | _	        t         j                  j                  dd      | _        t         j                  j                         | _        d| j                  _        t         j                  j                         | _        d| j                   _        t         j                  j%                         | _        d	| j&                  _        t         j                  j)                         }|j+                  | j                         |j+                  | j                         |j+                  | j                         |j+                  | j                         |j+                  | j&                         |j+                  | j                         |j+                  | j                          |j+                  | j&                         d
|j                  k(  sJ ||j,                  j.                  fS )Nr\   z/*c*/@x;r   r   r   z@media all { @m; }z
margin: 0;a {
    x: 1
    }s   @charset "ascii";
@import url(x);
@namespace p "uri";
@media all {
    @m;
    }
a {
    x: 1
    }
@media all {
    @m;
    }
@page {
    margin: 0
    }
a {
    x: 1
    })r   r	   CSSCharsetRulecr
CSSCommentcCSSUnknownRuleurCSSImportRuleirr   nrCSSMediaRuler   r&   CSSPageRuleprstyler   r   r
   r   r   r?   r   s     r   _getszTestCSSStyleSheet._getsG  s   ,,--g6((1,,--e4,,,,S1,,//s;,,++-.,,**,$,,++-0LL&&(	TWW	TWW	TWW	TWW	TWW	TWW	TWW	TWW Nyy	
 !**####r   c                 x   t         j                  j                         }t         j                  j                         }g d}dj                  |      }||_        |j                  |j                         k(  sJ t        |      D ]  \  }}|d| }||dz   d }dj                  ||z         |_        |j                  |      }	|dk  r&|j                         |j                  k(  sJ ||	k(  sgJ |}
|
j                  |       |
j                  |       dj                  |
      j                         |j                  k(  sJ t        |
      dz
  |	k(  sJ |dk(  rd}|dk(  rd	}||_        |j                  |      }	|dk  r(|j                         |j                  k(  sJ ||	k(  rJ |dk  r6|d|dz    }
|
j                  |       |
j                  ||dz   d        |dz   }n$|dd }
|
j                  |       t        |
      dz
  }dj                  |
      j                         |j                  k(  sJ ||	k(  rJ  y)
zCSSStyleSheet.add())	rF   rG   z@namespace p "u";z@page {
    left: 0
    }z$@font-face {
    src: local(x)
    }z7@media all {
    a {
        color: red
        }
    }za {
    color: green
    }z/*comment*/r   r   Nr   r   r   z@import "x2";r=   z@namespace p2 "u2";)r   r	   r
   joinr&   rm   r*   r   rA   r@   rl   )r   fullsheetr	   fullcssr,   linebeforeafterindexexpectedexpectedindexs               r   test_addzTestCSSStyleSheet.test_addd  s"   ||))+**,

 ))C.||w~~//// ~GAt!WFALEGGFUN3EMIIdOE1u~~'5==888Ez!z "&%yy*113u}}DDD8}q(E111 Av&Av,"DLHHTNE1u~~'5==888Ez!zq5"7QU|HOOD)OOCAL1$%EM  #1vHOOD)$'MA$5Myy*113t||CCC$---Y &r   c                    t        j                  d       }|j                  d      }dt         j                  j	                  d      |j
                  f}|D ]  }|j                  dd      }|j                  |       |j
                  d   }||j                  k(  sJ d|j                  k(  sJ d	|j                  j                  k(  sJ d
|j                  j                  k(  rJ  |j                  d      }dt         j                  j	                  d      df|j
                  d	ff}|D ]  \  }}|j                  ddd      }|j                  |       |j
                  d   }||j                  k(  sJ d|j                  k(  sJ ||j                  j                  k(  sJ |dk(  rd|j                  j                  k(  rJ d
|j                  j                  k(  rJ  |j                  d      }|j
                  d   }|j                  ddd      }|j                  |       |j
                  d   }||j                  k(  sJ d|j                  k(  sJ d	|j                  j                  k(  sJ d
|j                  j                  k(  sJ y )Nc                      y)N)Nz/**/ )urls    r   <lambda>z2TestCSSStyleSheet.test_addimport.<locals>.<lambda>  s    >r   )fetcher@import "example.css";zexample.css)r   r   zhttp://example.comr   r[   s   /**/)r   r\   r\   )r   r]   r   s   @charset "ascii";
/**/)r   	CSSParserr3   r	   r   r   r   r   r   
styleSheetr]   r&   )	r   r   cssrulessheetimportsimpr   addedencimpsheets	            r   test_addimportz TestCSSStyleSheet.test_addimport  s   'AB&>?$LL&&M&:""

 CMM"+?M@EIIcNNN1%EE22222 EJJ...e..77777e..66666  &>?/\\'']';WE##W-	
  HCMM"+?'MREIIcNNN1%EE22222 EJJ...%**33333g~1U5E5E5M5MMMM%"2"2":"::::   ==!9:"b';gN		#q!.....

***%**33333%**22222r   c                    | j                         \  }}t        j                  t        j                  j
                        5  |j                  | j                  d       ddd       t        j                  t        j                  j
                        5  |j                  | j                  |j                  j                  dz          ddd       ||j                  j                  k(  sJ |j                  d       |dz   |j                  j                  k(  sJ |j                  | j                         |dz   |j                  j                  k(  sJ | j                         \  }}|j                  }|dd= |j                  |       |dz   dz   |j                  j                  k(  sJ y# 1 sw Y   MxY w# 1 sw Y   xY w)zCSSStyleSheet.insertRule()r   Nr   r/   r=   )
r   r    r!   rM   rN   r   r   r   r   r?   )r   r   Lr   L2rulelists         r   test_insertRulez!TestCSSStyleSheet.test_insertRule  sK   zz|1 ]]377//0LL"% 1]]377//0LL!**"3"3a"78 1 AJJ%%%%% 	
V1u

)))))	TWW1u

)))))B;;SbSM	X1uqyAJJ-----% 1000s   F)4F6)F36F?c                    |D ]N  }|D ]  }t         j                  j                         }|j                  |       t	        j
                  t        j                  j                        5  |j                  |d       ddd       t         j                  j                         }|j                  |       t	        j
                  t        j                  j                        5  |j                  |d       ddd        |D ]  }t         j                  j                         }|j                  |       t	        j
                  t        j                  j                        5  |j                  |d       ddd       t         j                  j                         }|j                  |       |j                  |       ||j                  k(  rJ  |D ]  }t         j                  j                         }|j                  |       |j                  |d       |j                  |       |r|j                  j                  dk(  sJ ||j                  k(  rJ  Q y# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   xY w)z
        helper
        test if any rule in rules cannot be inserted before rules in before
        or after rules in after but before and after rules in anywhere
        r   Nr   r   )r   r	   r
   r   r    r!   rM   rN   rO   r   r   r   r?   )	r   r8   	notbeforenotafteranywherecheckdoublesr   r   r   s	            r   _insertRulezTestCSSStyleSheet._insertRule  s    DLL..0Q]]377#>#>?LLq) @LL..0a]]377#>#>?LLq) @?  LL..0Q]]377#>#>?LLq) @LL..0adA.....  LL..0QT1%T"::,,111A..... )  @? @?
 @?s$   (II#I0I #I-0I:c                 :   | j                         \  }}| j                  f}| j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  f}d}| j                  | j                  f|||       y)z"CSSStyleSheet.insertRule(@charset)r   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s         r   test_insertRule_charsetz)TestCSSStyleSheet.test_insertRule_charset  s|    zz|1WWJ	GGGGGGGGGGGGFFGG	
 $''Y(Cr   c                 $   | j                         \  }}| j                  f}| j                  | j                  | j                  | j
                  f}| j                  | j                  | j                  f}| j                  | j                  f|||       y)z!CSSStyleSheet.insertRule(@import)N)
r   r   r   r   r   r   r   r   r   r   r   s         r   test_insertRule_importz(TestCSSStyleSheet.test_insertRule_import"  sl    zz|1WWJ	GGTWWdggtww7FFDGGTWW-$''Y(Cr   c                 (   | j                         \  }}| j                  | j                  f}| j                  | j                  | j
                  f}| j                  | j                  | j                  f}| j                  | j                  f|||d       y)z$CSSStyleSheet.insertRule(@namespace)F)r   N)
r   r   r   r   r   r   r   r   r   r   r   s         r   test_insertRule_namespacez+TestCSSStyleSheet.test_insertRule_namespace*  ss    zz|1WWdgg&	GGTWWdgg.FFDGGTWW-$''Y(QVWr   c                 P   | j                         \  }}| j                  | j                  | j                  f}d}| j                  | j
                  | j                  | j                  | j                  f}| j                  | j                  | j                  | j                  f|||       y)z2CSSStyleSheet.insertRule(@media, @page, stylerule)r   N)
r   r   r   r   r   r   r   r   r   r   r   s         r    test_insertRule_media_page_stylez2TestCSSStyleSheet.test_insertRule_media_page_style2  sy    zz|1WWdggtww/	FFDGGTWWdggtww?$''477DGG4i8Tr   c                 $   | j                         \  }}| j                  f}d}| j                  | j                  | j                  | j
                  | j                  | j                  | j                  f}| j                  | j                  f|||       y)z,CSSStyleSheet.insertRule(@ unknown, comment)r   N)
r   r   r   r   r   r   r   r   r   r   r   s         r   !test_insertRule_unknownandcommentz3TestCSSStyleSheet.test_insertRule_unknownandcomment:  sk    zz|1WWJ	FFDGGTWWdggtwwQ$''Y(Cr   c                 t    d}d}t        j                  |      }|j                  |j                         k(  sJ y)zCSSStyleSheet CDO CDCzvbody { color: red }
<!-- comment -->
body { color: blue }
body { color: pink }
<!-- comment -->
body { color: green }
z8body {
    color: red
    }
body {
    color: pink
    }N)r   r3   r&   rm   )r   r	   expr   s       r   test_HTMLCommentsz#TestCSSStyleSheet.test_HTMLCommentsB  s:    	 $$S)}}

,,,r   c                 2    dddd}| j                  |       y)zCSSStyleRule (incomplete)z@import "a";r   z'a {
    font-family: "arial sans"
    })z
@import "aza { x: 1za { font-family: "arial sansN)rI   rR   s     r   test_incompletez!TestCSSStyleSheet.test_incompleteT  s"     ).,W

 	r   c                 "   t         j                  j                  d      }|j                  sJ t	        j
                  t        j                  j                        5  |j                  d       ddd       t	        j
                  t        j                  j                        5  |j                  | j                         ddd       t	        j
                  t        j                  j                        5  |j                  | j                  d       ddd       t	        j
                  t        j                  j                        5  |j                  d       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ixY w# 1 sw Y   yxY w)z&CSSStyleSheet NoModificationAllowedErrT)readonlyr   Nr   )r   r	   r
   r   r    r!   rM   rN   rn   r   r   r   r   )r   r	   s     r   test_NoModificationAllowedErrz/TestCSSStyleSheet.test_NoModificationAllowedErr]  s    ll(($(7}}}]]377;;<OOE" =]]377;;<NN499% =]]377;;<NN499a( =]]377;;<NN1 =< =<<<<<<<s0   E!#E-4E9F!E*-E69FFc                 &   d}d}t         j                  j                  ||      }|t        |      v sJ |t        |      v sJ t	        t        |            }t        ||j                        sJ ||j                  k(  sJ ||j                  k(  sJ y)z$CSSStyleSheet.__repr__(), .__str__()zfile:foo.cssztitle-of-css)r   r   N)
r   r	   r
   strevalrepr
isinstance	__class__r   r   )r   r   r   r   r   s        r   test_reprANDstrz!TestCSSStyleSheet.test_reprANDstrl  s    LL&&D&>s1v~~A$q']"akk***rww   r   c                     g d}|D ]F  \  }}t        j                  |      }dj                  ||rdnd      }|j                  |k(  rAJ |        y )N))zbody { color: red; }T)zbody { color: asd; }F)zbody { foo: 12px; }Fz{!r} should be {}validinvalid)r   r3   formatr   )r   casescaser   r   msgs         r   
test_validzTestCSSStyleSheet.test_valid{  sV    

 $ND(((.E%,,Th7IVC;;(*/C/* $r   N)T)"__name__
__module____qualname__r   r$   r-   r;   rB   rK   rS   rY   r_   rz   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    0
,,)7!r+l+\2 +.7ErV
p#OJ*:01B<$:?.B.3`.2!/FD"DXUD-$!	0r   r   )
__doc__xml.domrM   r    cssutils.cssr   r   r   BaseTestCaser   r   r   r   <module>r     s(    !    x0-- x0r   