o
    å/œh:~  ã                   @   s>   d Z ddlZddlZddlZddlmZ G dd„ dejƒZ	dS )zTests for css.CSSStyleSheeté    Né   )Úbasetestc                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ ZdAd*d+„Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@S )BÚTestCSSStyleSheetc                 C   s$   t j ¡ | _| j| _t j ¡ | _d S )N)ÚcssutilsÚcssÚCSSStyleSheetÚrÚsÚCSSStyleRuleÚrule©Úself© r   úU/var/www/html/myenv/lib/python3.10/site-packages/cssutils/tests/test_cssstylesheet.pyÚsetup_method   s   zTestCSSStyleSheet.setup_methodc                 C   sn  d| j jksJ ‚| j jrJ ‚g | j jksJ ‚| j jrJ ‚| j jdu s$J ‚| j jdu s,J ‚| j jdu s4J ‚| j jdu s<J ‚d| j j	ksDJ ‚t
 t¡ | j dd¡ W d  ƒ n1 s[w   Y  t
 t¡ | j dd¡ W d  ƒ n1 sww   Y  t
 t¡ | j dd¡ W d  ƒ n1 s“w   Y  t
 t¡ | j dd¡ W d  ƒ dS 1 s°w   Y  dS )	zCSSStyleSheet.__init__()ztext/cssNÚ ÚhrefÚxÚparentStyleSheetÚ	ownerNodeÚtype)r	   r   Ú	_readonlyÚcssRulesÚdisabledr   Úmediar   r   ÚtitleÚpytestÚraisesÚAttributeErrorr   Ú__setattr__r   r   r   r   Ú	test_init   s*   ÿÿÿ"ÿzTestCSSStyleSheet.test_initc                 C   sf   t j ¡ }d|_t jjjt jjjt jjjg}t|ƒD ]\}}||j| ks'J ‚|j	|| ks0J ‚qdS )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   r   r   r   Ú	test_iter(   s   
ýþzTestCSSStyleSheet.test_iterc                 C   s4  t  d¡}|j}|jd j|ksJ ‚|d j|ksJ ‚d|_||jks%J ‚t  d¡j|_||jks3J ‚|jD ]	}|j|ks?J ‚q6t  d¡}|j}t|j ¡ ƒdgksTJ ‚d|_||jks^J ‚t|j ¡ ƒdgksjJ ‚t  d	¡}|j}|d
 dkszJ ‚t  d¡}|j}||ksˆJ ‚|d
 dksJ ‚|d
 dks˜J ‚dS )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   r.   Úvars1Úvars2r   r   r   Ú	test_refs5   s8   
ÿï



zTestCSSStyleSheet.test_refsc                 C   sž   t  d¡}d|jjksJ ‚|jd= d|jjksJ ‚|j d¡ d|jjks'J ‚|j t  d¡j¡ d|jjks9J ‚d|jks@J ‚|jD ]	}|j|ksLJ ‚qCd	S )
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   r-   r   ÚlengthÚappendÚextendr!   r   )r   r	   r   r   r   r   Útest_cssRulesn   s   

ÿzTestCSSStyleSheet.test_cssRulesc                 C   s
  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 “}|   |¡ 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%“}|  |¡ tj ¡ }d&|_|jD ]	}||jks‚J ‚qyd!S )'zCSSStyleSheet.cssTextr   ó    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   r   r   r   Útest_cssText}   s–   ÿýüûúø	÷
öõôòñðïîè
1ÿýüûúø	÷
öõôòñðïîè
1

ÿzTestCSSStyleSheet.test_cssTextc                 C   sx   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œ}|  |¡ |  |¡ dS )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   rC   r   r   r   Ú test_cssText_HierarchyRequestErrë   s$   î
z2TestCSSStyleSheet.test_cssText_HierarchyRequestErrc                 C   sB   t jjt jjt jjt jjt jjt jjdœ}|  |¡ |  |¡ dS )zFCSSStyleSheet.cssText SyntaxErr

        for single {, } or ;
        )Ú{Ú}ú;z@charset "ascii";{z@charset "ascii";}z@charset "ascii";;N)rE   rF   Ú	SyntaxErrrH   rI   rJ   r   r   r   Útest_cssText_SyntaxErr  s   ú
z(TestCSSStyleSheet.test_cssText_SyntaxErrc                 C   s  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s8J ‚d| j jjksAJ ‚d| j _d| j jksMJ ‚d| j jjksVJ ‚t tjj	¡ | j  
d¡ W d  ƒ n1 snw   Y  d| j jks{J ‚d| j jjks„J ‚dS )	zCSSStyleSheet.encodingr   úutf-8Úasciir   r   NzUTF-8zINVALID ENCODING)r	   r!   Úencodingr   r8   r   r   rE   rF   rO   Ú_setEncodingr   r   r   r   Útest_encoding  s"   ÿzTestCSSStyleSheet.test_encodingc                 C   sÂ  t j ¡ }dt|jƒksJ ‚d}d}||_|j| ¡ ksJ ‚|jjdddœks)J ‚d|jv s0J ‚d|jv s7J ‚d	|jvs>J ‚t t	j
j¡ |j d¡ W d
  ƒ n1 sVw   Y  d|jd< |jd= t t	j
j¡ |j d¡ W d
  ƒ n1 s|w   Y  d|jd ksŠJ ‚d|jd ks“J ‚t t	j
j¡ |j d¡ W d
  ƒ n1 s«w   Y  ddgtt|jƒƒks½J ‚dt|jƒksÆJ ‚t t	j
j¡ |j dd¡ W d
  ƒ n1 sßw   Y  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 d¡ksJ ‚d|j d¡ksJ ‚t t¡ |j d¡ W d
  ƒ n	1 s4w   Y  t|j ¡ ƒh d£ksGJ ‚d|j dd¡ksSJ ‚d|j dd¡ks_J ‚d
S )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   rX   ÚNOTSETNÚdelÚUNSETr6   ÚNEWURIÚnewÚn1)r   rX   r^   Ún)r   rX   r_   >   r   r_   rX   r   ÚUNKNOWNznot used defa)r   r   r   Úlenr.   r!   Úencoder   r   rE   rF   ÚNoModificationAllowedErrÚ__delitem__ÚNamespaceErrÚ__getitem__Úsortedr/   Ú__setitem__ÚprefixForNamespaceURIÚ
IndexErrorÚsetÚkeysÚget)r   r	   r   Úexpcssr   r   r   Útest_namespaces1+  sP   
ÿ
ÿÿÿ

ÿz"TestCSSStyleSheet.test_namespaces1c                 C   sr  t j ¡ }d}| || ¡ |j| ¡ ksJ ‚t jjddd}| |¡ t jjdd}| |¡ d}|j| ¡ ks;J ‚d|_d	}|j| ¡ ksIJ ‚t 	t
jj¡ | d
¡ W d  ƒ n1 s`w   Y  d}| |¡ |d| 7 }|j| ¡ ks{J ‚t 	t
jj¡ | d¡ W d  ƒ n1 s’w   Y  d}| |¡ |d| 7 }|j| ¡ ks­J ‚|jd }|jd }t 	t
jj¡ |jd  d¡ W d  ƒ n1 sÑw   Y  |jd jd}	}
|
|jd _| |	|
¡}|j| ¡ ksôJ ‚t 	t
jj¡ | d¡ W d  ƒ n	1 sw   Y  |jd}	}
|
|_| |	|
¡}|j| ¡ ks*J ‚t 	t
jj¡ |jd j d¡ W d  ƒ n	1 sFw   Y  |jd jd}	}
|jd j |
¡ | |	|	d |
 ¡}|j| ¡ ksqJ ‚t 	t
jj¡ |j d¡ W d  ƒ n	1 sŠw   Y  |jd}	}
|j |
¡ | |	|	d |
 ¡}|j| ¡ ks¯J ‚|jdks·J ‚dS )zCSSStyleSheet.namespacesz@namespace n "new";rX   rW   )ÚprefixÚnamespaceURIrV   )rq   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
    }é   r7   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!   rb   ÚCSSNamespaceRulerp   r   r   rE   rF   re   Úaddr   Ú_setSelectorTextÚselectorTextÚreplaceÚselectorListr9   )r   r	   r   r   rn   ÚmcssÚscssÚmrÚsrÚoldselÚnewselr   r   r   Útest_namespaces2d  sx   


ÿ
ÿ


ÿÿÿÿÿz"TestCSSStyleSheet.test_namespaces2c                 C   s¶  t j ¡ }d}t tjj¡ | |¡ W d  ƒ n1 sw   Y  | d¡ |j	d dks1J ‚t j 
¡ }|ddif|_| |¡ |jdksIJ ‚t tjj¡ |j d¡ W d  ƒ n1 saw   Y  t tjj¡ |j d	¡ W d  ƒ n1 s~w   Y  d|j	d
< |j d	¡ |jdks•J ‚t tjj¡ |j	 d
¡ W d  ƒ n1 s­w   Y  |jdks¹J ‚d|jd _|jdksÆJ ‚d|jd _d|jd _|jdksÙJ ‚dS )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   rE   rF   re   rw   r.   r
   r!   r{   r9   rc   rd   r   rp   ry   )r   r	   r   r   r   r   r   Útest_namespaces3¼  s:   
ÿ


ÿÿ
ÿz"TestCSSStyleSheet.test_namespaces3c                 C   s
  t 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s6J ‚d|jd< ddi|jjksEJ ‚|jd= i |jjksQJ ‚d|jd< |jjd= ddi|jjkseJ ‚tjtjjdd	 |jd
= W d  ƒ dS 1 s~w   Y  dS )zCSSStyleSheet.namespaces 4zno setting possibler*   rV   Nr   ÚuriÚpzPrefix undefined not found\.©ÚmatchÚ	undefined)	r   r   r   r.   r   r   rE   rF   re   ©r   r	   r   r   r   Útest_namespaces4á  s$   





"ÿz"TestCSSStyleSheet.test_namespaces4c                 C   sd   t  d¡}|jdksJ ‚t j ¡ }tjtjj	dd | 
d¡ W d  ƒ dS 1 s+w   Y  dS )zCSSStyleSheet.namespaces 5za|a { color: red }r<   zPrefix a not found\.r‰   N)r   r-   r!   r   r   r   r   rE   rF   re   Ú_setCssTextrŒ   r   r   r   Útest_namespaces5þ  s   

"ÿz"TestCSSStyleSheet.test_namespaces5c                 C   s:  d| j _d| j jjksJ ‚t tjj¡ | j  	d¡ W d  ƒ n1 s%w   Y  | j jd }| j |j
ks8J ‚| j  	d¡ |j
du sEJ ‚d| j jjksNJ ‚d| j jksVJ ‚| j  	d¡ d| j jjkseJ ‚d	| j jksmJ ‚| j  	d
¡ d| j jjks|J ‚d| j jks„J ‚| j  	d
¡ d
| j jjks“J ‚d| j jks›J ‚dS )zCSSStyleSheet.deleteRule(index)z8@charset "ascii"; @import "x"; @x; a {
    x: 1
    }@y;é   Néÿÿÿÿr7   s5   @charset "ascii";
@import "x";
@x;
a {
    x: 1
    }r   rt   s#   @import "x";
@x;
a {
    x: 1
    }r   r6   r>   r=   )r	   r!   r   r8   r   r   rE   rF   ÚIndexSizeErrÚ
deleteRuler   )r   r   r   r   r   Útest_deleteRuleIndex  s,   ÿÿz&TestCSSStyleSheet.test_deleteRuleIndexc                 C   s6  t j ¡ }d|_|j\}}}}t j ¡ }t tj	j
¡ | |¡ W d  ƒ n1 s+w   Y  d|jjks8J ‚| |¡ d|jjksEJ ‚|jdksLJ ‚t tj	j
¡ | |¡ W d  ƒ n1 scw   Y  | |¡ d|jjksuJ ‚|jdks|J ‚t tj	j
¡ | |¡ W d  ƒ dS 1 s”w   Y  dS )zCSSStyleSheet.deleteRule(rule)z…
        @namespace x "http://example.com";
        a { color: red; }
        b { color: blue; }
        c { color: green; }
        Nr7   rt   sM   a {
    color: red
    }
b {
    color: blue
    }
c {
    color: green
    }r6   s3   a {
    color: red
    }
c {
    color: green
    })r   r   r   r!   r   r
   r   r   rE   rF   r’   r“   r8   )r   r	   r_   Ús1Ús2Ús3r   r   r   r   Útest_deleteRule)  s,   

ÿ
ÿÿ
"ÿz!TestCSSStyleSheet.test_deleteRulec                 C   s  t j d¡| _t j d¡| _t j d¡| _t j d¡| _	t j 
dd¡| _t j ¡ | _d| j_t j ¡ | _d| j_t j ¡ | _d	| j_t j ¡ }| | j¡ | | j	¡ | | j¡ | | j¡ | | j¡ | | j¡ | | j¡ | | j¡ d
|jks~J ‚||jjfS )NrR   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Úirrv   ÚnrÚCSSMediaRuler~   r!   ÚCSSPageRuleÚprÚstyler
   r   r   ru   r   r8   rŒ   r   r   r   Ú_getsG  s0   
ÿzTestCSSStyleSheet._getsc                 C   sÎ  t j ¡ }t j ¡ }g d¢}d |¡}||_|j| ¡ ksJ ‚t|ƒD ]Á\}}|d|… }||d d… }d || ¡|_| |¡}	|dk rV| ¡ |jksOJ ‚||	ksUJ ‚n"|}
|
 |¡ |
 	|¡ d |
¡ ¡ |jksnJ ‚t
|
ƒd |	ksxJ ‚|dkr~d}|dkr„d	}||_| |¡}	|dk r | ¡ |jks™J ‚||	ksŸJ ‚q#|dk rÁ|d|d … }
|
 	|¡ |
 ||d d… ¡ |d }n|dd… }
|
 	|¡ t
|
ƒd }d |
¡ ¡ |jksÞJ ‚||	ksäJ ‚q#dS )
zCSSStyleSheet.add())	r?   r@   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™   rs   Nr   r   rt   z@import "x2";r6   z@namespace p2 "u2";)r   r   r   Újoinr!   rb   r%   rw   r:   r9   ra   )r   ÚfullÚsheetr   Úfullcssr'   ÚlineÚbeforeÚafterÚindexÚexpectedÚexpectedindexr   r   r   Útest_addd  sN   









ÔzTestCSSStyleSheet.test_addc           	      C   sÀ  t jdd„ d}| d¡}dt jjdd|jf}|D ]1}|jddd}| |¡ |jd	 }||jks4J ‚d|jks;J ‚d
|j	j
ksCJ ‚d|j	jksKJ ‚q| d¡}dt jjdddf|jd
ff}|D ]A\}}|jdddd}| |¡ |jd }||jksJ ‚d|jks†J ‚||j	j
ksŽJ ‚|dkr›d|j	jksšJ ‚qbd|j	jks£J ‚qb| d¡}|jd	 }|jdddd}| |¡ |jd }||jksÇJ ‚d|jksÎJ ‚d
|j	j
ksÖJ ‚d|j	jksÞJ ‚d S )Nc                 S   s   dS )N)Nz/**/r   )Úurlr   r   r   Ú<lambda>¦  s    z2TestCSSStyleSheet.test_addimport.<locals>.<lambda>)Úfetcherú@import "example.css";zexample.css)r   r   zhttp://example.comr   rQ   s   /**/)r·   rR   rR   )r   rS   r   s   @charset "ascii";
/**/)r   Ú	CSSParserr-   r   r¡   r   rw   r   r   Ú
styleSheetrS   r!   )	r   rˆ   ÚcssrulessheetÚimportsÚimpr«   ÚaddedÚencÚimpsheetr   r   r   Útest_addimport¥  sL   
ý


ü





z TestCSSStyleSheet.test_addimportc                 C   s  |   ¡ \}}t tjj¡ | | jd¡ W d  ƒ n1 sw   Y  t tjj¡ | | j|jj	d ¡ W d  ƒ n1 sAw   Y  ||jj	ksNJ ‚| d¡ |d |jj	ks]J ‚| | j¡ |d |jj	ksmJ ‚|   ¡ \}}|j}|dd…= | |¡ |d d |jj	ksŒJ ‚dS )zCSSStyleSheet.insertRule()r‘   Nr   r)   r6   éþÿÿÿ)
r¨   r   r   rE   rF   r’   ru   r   r   r8   )r   r	   ÚLr–   ÚL2Úrulelistr   r   r   Útest_insertRuleÕ  s"   ÿÿ


z!TestCSSStyleSheet.test_insertRuleTc           	   
   C   sŽ  |D ]Â}|D ]P}t j ¡ }| |¡ t tjj¡ | |d¡ W d  ƒ n1 s*w   Y  t j ¡ }| 	|¡ t tjj¡ | |d¡ W d  ƒ n1 sQw   Y  q|D ]?}t j ¡ }| |¡ t tjj¡ | |d¡ W d  ƒ n1 s}w   Y  t j ¡ }| 	|¡ | 	|¡ ||j
ks˜J ‚qY|D ](}t j ¡ }| |¡ | |d¡ | |¡ |r¼|jjdks¼J ‚||j
ksÃJ ‚q›qdS )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   rt   )r   r   r   ru   r   r   rE   rF   rG   rw   r   r   r8   )	r   r2   Ú	notbeforeÚnotafterÚanywhereÚcheckdoublesr   r   r	   r   r   r   Ú_insertRuleî  sB   

ÿ

ÿ€

ÿ





ùìzTestCSSStyleSheet._insertRulec                 C   sT   |   ¡ \}}| jf}| j| j| j| j| j| j| j| jf}d}|  	| jf|||¡ dS )z"CSSStyleSheet.insertRule(@charset)r   N)
r¨   rœ   r¢   r£   r~   r¦   r   rž   r    rÊ   ©r   r	   rÂ   rÆ   rÇ   rÈ   r   r   r   Útest_insertRule_charset  s   ø
z)TestCSSStyleSheet.test_insertRule_charsetc                 C   sP   |   ¡ \}}| jf}| j| j| j| jf}| j| j| jf}|  	| jf|||¡ dS )z!CSSStyleSheet.insertRule(@import)N)
r¨   rœ   r£   r¦   r~   r   rž   r    r¢   rÊ   rË   r   r   r   Útest_insertRule_import"  s
   z(TestCSSStyleSheet.test_insertRule_importc                 C   sT   |   ¡ \}}| j| jf}| j| j| jf}| j| j| jf}| j	| jf|||dd dS )z$CSSStyleSheet.insertRule(@namespace)F)rÉ   N)
r¨   rœ   r¢   r¦   r~   r   rž   r    r£   rÊ   rË   r   r   r   Útest_insertRule_namespace*  s
   z+TestCSSStyleSheet.test_insertRule_namespacec                 C   sX   |   ¡ \}}| j| j| jf}d}| j| j| j| j| jf}|  	| j| j| jf|||¡ dS )z2CSSStyleSheet.insertRule(@media, @page, stylerule)r   N)
r¨   rœ   r¢   r£   rž   r    r~   r¦   r   rÊ   rË   r   r   r   Ú test_insertRule_media_page_style2  s
    z2TestCSSStyleSheet.test_insertRule_media_page_stylec                 C   sP   |   ¡ \}}| jf}d}| j| j| j| j| j| j| jf}|  	| jf|||¡ dS )z,CSSStyleSheet.insertRule(@ unknown, comment)r   N)
r¨   rœ   rž   r    r¢   r£   r~   r¦   r   rÊ   rË   r   r   r   Ú!test_insertRule_unknownandcomment:  s
    z3TestCSSStyleSheet.test_insertRule_unknownandcommentc                 C   s(   d}d}t  |¡}|j| ¡ ksJ ‚dS )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   r-   r!   rb   )r   r   Úexpr«   r   r   r   Útest_HTMLCommentsB  s   
z#TestCSSStyleSheet.test_HTMLCommentsc                 C   s   ddddœ}|   |¡ dS )zCSSStyleRule (incomplete)z@import "a";rš   z'a {
    font-family: "arial sans"
    })z
@import "aza { x: 1za { font-family: "arial sansN)rB   rJ   r   r   r   Útest_incompleteT  s
   ýz!TestCSSStyleSheet.test_incompletec                 C   s  t jjdd}|jsJ ‚t tjj¡ | 	d¡ W d  ƒ n1 s#w   Y  t tjj¡ | 
| j¡ W d  ƒ n1 s@w   Y  t tjj¡ | 
| jd¡ W d  ƒ n1 s^w   Y  t tjj¡ | d¡ W d  ƒ dS 1 s{w   Y  dS )z&CSSStyleSheet NoModificationAllowedErrT)Úreadonlyr™   Nr   )r   r   r   r   r   r   rE   rF   rc   rŽ   ru   r   r“   )r   r   r   r   r   Útest_NoModificationAllowedErr]  s   
ÿÿÿ"ÿz/TestCSSStyleSheet.test_NoModificationAllowedErrc                 C   st   d}d}t jj||d}|t|ƒv sJ ‚|t|ƒv sJ ‚tt|ƒƒ}t||jƒs*J ‚||jks1J ‚||j	ks8J ‚dS )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–   r   r   r   Útest_reprANDstrl  s   z!TestCSSStyleSheet.test_reprANDstrc                 C   sJ   g d¢}|D ]\}}t  |¡}d ||rdnd¡}|j|ks"J |ƒ‚qd S )N))zbody { color: red; }T)zbody { color: asd; }F)zbody { foo: 12px; }Fz{!r} should be {}ÚvalidÚinvalid)r   r-   ÚformatrÜ   )r   ÚcasesÚcaser±   r«   Úmsgr   r   r   Ú
test_valid{  s   
ýzTestCSSStyleSheet.test_validN)T)"Ú__name__Ú
__module__Ú__qualname__r   r    r(   r5   r;   rD   rK   rP   rU   ro   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@    9n9X%
!A0
#	r   )
Ú__doc__Úxml.domrE   r   Úcssutils.cssr   r   r   ÚBaseTestCaser   r   r   r   r   Ú<module>   s    