o
    /ha                     @   s<   d Z ddlZddlmZ G dd dejZG dd dZdS )	z$Testcases for cssutils.CSSSerializer    N   )basetestc                   @   s   e Zd 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d*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4S )5TestPreferencesz6
    testcases for cssutils.serialize.Preferences
    c                 C   sx   t jjjsJ dt jj_d}ddddd}dt jj_t| D ]\}}t || }| |jks4J q dt jj_d	S )
zPreferences.resolveVariablesFz
            @variables {
                c1: red;
                c2: #0f0;
                px: 1px 2px;
            }
        za {
    color: red
    }z)a {
    color: red;
    color: #0f0
    }za {
    margin: 1px 2px
    }zt@media all {
    a {
        margin: 1px 2px 1px 2px;
        color: red;
        left: var(unknown)
        }
    })za {
    color: var(c1)
    }z1a {
    color: var(c1)
; color: var(  c2   )    }za {
    margin: var(px)
    }z@media all {
                a {
                    margin: var(px) var(px);
                    color: var(c1);
                    left: var(unknown)
                    }
            }TN)	cssutilsserprefsresolveVariableslistitemsparseStringencodecssText)selfvarsteststestexps r   Q/var/www/html/myenv/lib/python3.10/site-packages/cssutils/tests/test_serialize.pytest_resolveVariables   s   

z%TestPreferences.test_resolveVariablesc                 C   s  t jj  t jj  t jjjsJ t jjjsJ t jjjs!J t jjjdu s*J t jjj	dks3J t jjj
s:J t jjjsAJ t jjjsHJ t jjjdu sQJ t jjjsXJ t jjjdu saJ t jjjdu sjJ t jjjdkssJ t jjjdks|J t jjjsJ t jjjsJ t jjjdu sJ t jjjdksJ t jjjdksJ t jjjdksJ t jjjdksJ t jjjdu sJ d}d}t |}|j| ksJ dd	i}t jj  t| D ]\}}t d
| }d|  |jksJ qdS )zPreferences.useDefaults()N    F
 a]  
    /*1*/
    @import url(x) tv , print;
    @namespace prefix "uri";
    @namespace unused "unused";
    @media all {}
    @media all {
        a {}
    }
    @media   all  {
    a { color: red; }
        }
    @page     { left: 0; }
    a {}
    prefix|x, a  +  b  >  c  ~  d  ,  b { top : 1px ;
        font-family : arial ,'some'
        }
    z/*1*/
@import url(x) tv, print;
@namespace prefix "uri";
@namespace unused "unused";
@media all {
    a {
        color: red
        }
    }
@page {
    left: 0
    }
prefix|x, a + b > c ~ d, b {
    top: 1px;
    font-family: arial, "some"
    }\0.1 .1 0.1px .1px 0.1% .1% +0.1 +.1 +0.1px +.1px +0.1% +.1% -0.1 -.1 -0.1px -.1px -0.1% -.1%ze0.1 0.1 0.1px 0.1px 0.1% 0.1% +0.1 +0.1 +0.1px +0.1px +0.1% +0.1% -0.1 -0.1 -0.1px -0.1px -0.1% -0.1%a{x:%s}za {
    x: %s
    }) r   r   r   useMinifieduseDefaultsdefaultAtKeyworddefaultPropertyNamedefaultPropertyPriorityimportHrefFormatindentindentClosingBracekeepAllPropertieskeepCommentskeepEmptyRuleskeepUnknownAtRuleskeepUsedNamespaceRulesOnlylineNumberslineSeparatorlistItemSpacerminimizeColorHashomitLastSemicolonomitLeadingZeroparanthesisSpacerpropertyNameSpacerselectorCombinatorSpacerspacer	validOnlyr   r   r   r	   r
   )r   css	parsedcssr   r   r   r   r   r   r   test_useDefaults/   sH   
z TestPreferences.test_useDefaultsc                 C   s  t jj  t jjjsJ t jjjsJ t jjjdksJ t jjjdks&J t jjjs-J t jjj	du s6J t jjj
du s?J t jjjdu sHJ t jjjsOJ t jjjdu sXJ t jjjdksaJ t jjjdksjJ t jjjsqJ t jjjsxJ t jjjdksJ t jjjdksJ t jjjdksJ t jjjdksJ t jjjdu sJ d}t |}dt jj_|jdksJ dt jj_|jdksJ dd	d
d
ddddddddddd}t| D ]\}}t d| }d|  |jksJ qdS )zPreferences.useMinified()string Fav  
    /*1*/
    @import   url(x) tv , print;
    @namespace   prefix "uri";
    @namespace   unused "unused";
    @media  all {}
    @media  all {
        a {}
    }
    @media all "name" {
        a { color: red; }
    }
    @page:left {
    left: 0
    }
    a {}
    prefix|x, a + b > c ~ d , b { top : 1px ;
        font-family : arial ,  'some'
        }
    @x  x;
    Ts   @import"x"tv,print;@namespace prefix"uri";@media all"name"{a{color:red}}@page :left{left:0}prefix|x,a+b>c~d,b{top:1px;font-family:arial,"some"}@x x;s   @import"x"tv,print;@namespace prefix"uri";@media all"name"{a{color:red}}@page :left{left:0}prefix|x,a+b>c~d,b{top:1px;font-family:arial,"some"}za a1 a-1 a-1aa b 1 c 1em d -1em e1em/5z#a 0 a 0 a 0 a 0 a 0 a 0 a 0 a 0 a 0z7a 1 a .1 a 1 a .1 a -1 a -.1 a -1 a -.1 a +1 a +.1 a +1z
url(x) f()#123#112234#123 url() f()
1 +2 +3 -4zS.1 .1 .1px .1px .1% .1% +.1 +.1 +.1px +.1px +.1% +.1% -.1 -.1 -.1px -.1px -.1% -.1%)z  a  a1  a-1  a-1a  r9   z  1em  /  5  r:   z2a 0 a .0 a 0.0 a -0 a -.0 a -0.0 a +0 a +.0 a +0.0zVa  0px  a  .0px  a  0.0px  a  -0px  a  -.0px  a  -0.0px  a  +0px  a  +.0px  a  +0.0px zTa  1  a  .1  a  1.0  a  0.1  a  -1  a  -.1  a  -1.0  a  -0.1  a  +1  a  +.1  a  +1.0z  url(x)  f()#112233r<   r;   r=   r>   r   r   N)r   r   r   r   r   r   r!   r"   r$   r%   r&   r'   r(   r)   r*   r+   r-   r.   r/   r0   r1   r2   r3   r   r   r	   r
   r   )r   r4   r   
valuetestsr   r   r   r   r   test_useMinifiedx   sb   


z TestPreferences.test_useMinifiedc                 C   sL   t d}d|jksJ dt jj_d|jksJ dt jj_d|jks$J dS )zPreferences.defaultAtKeywordz@im\port "x";s   @import "x";TFs   @im\port "x";N)r   r   r   r   r   r   r   r   r   r   r   test_defaultAtKeyword   s   


z%TestPreferences.test_defaultAtKeywordc                 C   s   dt jj_t d}d|jksJ dt jj_d|jksJ dt jj_d|jks)J t d}d|jks5J dt jj_d|jksAJ dt jj_d|jksMJ dS )zPreferences.defaultPropertyNameFza { c\olor: green; }   a {
    color: green
    }Ts   a {
    c\olor: green
    }z a { color: red; c\olor: green; }N)r   r   r   r$   r   r   r   rB   r   r   r   test_defaultPropertyName   s   






z(TestPreferences.test_defaultPropertyNamec                 C   s<   d}t |}|jdksJ dt jj_|j| ksJ dS )z#Preferences.defaultPropertyPriorityz&a {
    color: green !IM\portant
    }s%   a {
    color: green !important
    }FN)r   r   r   r   r   r    r   r   r4   r   r   r   r   test_defaultPropertyPriority   s
   

z,TestPreferences.test_defaultPropertyPriorityc                 C   s   t j }d|_t j }d|_d|jksJ d|jksJ dt jj_d|jks*J d|jks1J dt jj_d|jks=J d|jksDJ dt jj_d|jksPJ d|jksWJ d	S )
zPreferences.importHrefFormatz@import url("not");z@import "str";z@import url(not);r7   z@import "not";uriz@import url(str);znot definedN)r   r4   CSSImportRuler   r   r   r!   )r   r0r1r   r   r   test_importHrefFormat   s   




z%TestPreferences.test_importHrefFormatc                 C   sN   t d}d}d}dt jj_| |jksJ dt jj_| |jks%J dS )zPreferences.identza { left: 0 }za {
    left: 0
    }za {
 left: 0
 }r   r   N)r   r   r   r   r"   r   r   )r   r   exp4exp1r   r   r   test_indent  s   


zTestPreferences.test_indentc                 C   sP   t d}d}d}t jj  | |jksJ dt jj_| |jks&J dS )zPreferences.indentClosingBracez%@media all {a {left: 0}} b { top: 0 }zI@media all {
    a {
        left: 0
        }
    }
b {
    top: 0
    }z=@media all {
    a {
        left: 0
    }
}
b {
    top: 0
}FN)r   r   r   r   r   r   r   r#   )r   r   expTexpFr   r   r   test_indentClosingBrace  s   

z'TestPreferences.test_indentClosingBracec                 C   sB   d}t |}dt jj_d|jksJ dt jj_d|jksJ dS )zPreferences.keepAllPropertieszwa {
            color: pink;
            color: red;
            c\olor: blue;
            c\olor: green;
            }FrD   TsN   a {
    color: pink;
    color: red;
    c\olor: blue;
    c\olor: green
    }N)r   r   r   r   r$   r   rF   r   r   r   test_keepAllProperties-  s   


z&TestPreferences.test_keepAllPropertiesc                 C   s>   t d}dt jj_d|jksJ dt jj_d|jksJ dS )zPreferences.keepCommentsz/*1*/ a { /*2*/ }F    Ts   a {}N)r   r   r   r   r%   r   r&   rB   r   r   r   test_keepComments@  s
   


z!TestPreferences.test_keepCommentsc                 C   s   d}t |}t jj  dt jj_| |jksJ dt jj_d|jks'J dt jj_d|jks3J d}t |}t jj  dt jj_dt jj_d|jksQJ dt jj_d|jks]J d	S )
zPreferences.keepEmptyRulesz1a {}
a {
    /*1*/
    }
a {
    color: red
    }TFs,   a {
    /*1*/
    }
a {
    color: red
    }s   a {
    color: red
    }z@media tv {
    }
@media all {
    /*1*/
    }
@media print {
    a {}
    }
@media print {
    a {
        /*1*/
        }
    }
@media all {
    a {
        color: red
        }
    }s   @media all {
    /*1*/
    }
@media print {
    a {
        /*1*/
        }
    }
@media all {
    a {
        color: red
        }
    }s7   @media all {
    a {
        color: red
        }
    }N)	r   r   r   r   r   r&   r   r   r%   rF   r   r   r   test_keepEmptyRulesH  s*   







z#TestPreferences.test_keepEmptyRulesc                 C   sd   ddi}|D ])}t |}|| \}}dt jj_|j| ks!J dt jj_|j| ks/J qdS )zPreferences.keepUnknownAtRulesz@three-dee {
              @background-lighting {
                azimuth: 30deg;
                elevation: 190deg;
              }
              h1 { color: red }
            }
            h1 { color: blue })z@three-dee {
    @background-lighting {
        azimuth: 30deg;
        elevation: 190deg;
        } h1 {
        color: red
        }
    }
h1 {
    color: blue
    }zh1 {
    color: blue
    }TFN)r   r   r   r   r'   r   r   r   r   r   r   expwith
expwithoutr   r   r   test_keepUnknownAtRules  s   


z'TestPreferences.test_keepUnknownAtRulesc                 C   sn   ddddddd}|D ])}t |}|| \}}dt jj_|j| ks&J d	t jj_|j| ks4J qd
S )z&Preferences.keepUsedNamespaceRulesOnly)'@namespace "u";
a, a {
    top: 0
    }r[   )-@namespace p "u";
p|a, p|a {
    top: 0
    }r\   );@namespace p "u";
@namespace "d";
p|a, a {
    top: 0
    }r]   )z8@namespace p "u";
@namespace "d";
p|a {
    top: 0
    }(@namespace p "u";
p|a {
    top: 0
    })z6@namespace p "u";
@namespace "d";
a {
    top: 0
    }z$@namespace "d";
a {
    top: 0
    })z:@namespace p "u";
@namespace d "d";
p|a {
    top: 0
    }r^   )z1@namespace p "u"; @namespace "u"; p|a, a {top: 0}z1@namespace "u"; @namespace p "u"; p|a, a {top: 0}z1@namespace p "u"; @namespace "d"; p|a, a {top: 0}z.@namespace p "u"; @namespace "d"; p|a {top: 0}z,@namespace p "u"; @namespace "d"; a {top: 0}z0@namespace p "u"; @namespace d "d"; p|a {top: 0}FTN)r   r   r   r   r(   r   r   rW   r   r   r   test_keepUsedNamespaceRulesOnly  s   


z/TestPreferences.test_keepUsedNamespaceRulesOnlyc                 C   s`   t d}d}d}t jjjrJ | |jksJ dt jj_t jjjs%J | |jks.J dS )zPreferences.lineNumbersza {top: 1; left: 2}z!a {
    top: 1;
    left: 2
    }z-1: a {
2:     top: 1;
3:     left: 2
4:     }TN)r   r   r   r   r)   r   r   )r   r   exp0rN   r   r   r   test_lineNumbers  s   

z TestPreferences.test_lineNumbersc                 C   sL   t d}d|jksJ dt jj_d|jksJ dt jj_d|jks$J dS )zPreferences.lineSeparatorza { x:1;y:2}   a {
    x: 1;
    y: 2
    }r8   s   a {x: 1;y: 2    }XXXs"   a {XXX    x: 1;XXX    y: 2XXX    }N)r   r   r   r   r   r*   rB   r   r   r   test_lineSeparator  s   


z"TestPreferences.test_lineSeparatorc                 C   sB   dt jj_d}t |}d|jksJ dt jj_d|jksJ dS )zPreferences.listItemSpacerTz'
        @import "x" print, tv;
a, b {}s   @import "x" print, tv;
a, b {}r8   s   @import "x" print,tv;
a,b {}N)r   r   r   r&   r   r   r+   rF   r   r   r   test_listItemSpacer  s   


z#TestPreferences.test_listItemSpacerc                 C   8   d}t |}d|jksJ dt jj_d|jksJ dS )zPreferences.minimizeColorHashza { color: #ffffff }s   a {
    color: #fff
    }Fs   a {
    color: #ffffff
    }N)r   r   r   r   r   r,   rF   r   r   r   test_minimizeColorHash  
   

z&TestPreferences.test_minimizeColorHashc                 C   rf   )zPreferences.omitLastSemicolona { x: 1; y: 2 }rb   Fs   a {
    x: 1;
    y: 2;
    }N)r   r   r   r   r   r-   rF   r   r   r   test_omitLastSemicolon
  rh   z&TestPreferences.test_omitLastSemicolonc                 C   sL   dt jj_d}t |}d|jksJ dt jj_d|jksJ dt jj_dS )zPreferences.normalizedVarNamesFz@variables { A: 1 }s   @variables {
    a: 1
    }s   @variables {
    A: 1
    }TN)r   r   r   r   r   r   normalizedVarNamesrF   r   r   r   test_normalizedVarNames  s   


z'TestPreferences.test_normalizedVarNamesc                 C   rf   )zPreferences.paranthesisSpacerri   rb   r8   s   a{
    x: 1;
    y: 2
    }N)r   r   r   r   r   r/   rF   r   r   r   test_paranthesisSpacer  rh   z&TestPreferences.test_paranthesisSpacerc                 C   rf   )zPreferences.propertyNameSpacerri   rb   r8   s   a {
    x:1;
    y:2
    }N)r   r   r   r   r   r0   rF   r   r   r   test_propertyNameSpacer&  rh   z'TestPreferences.test_propertyNameSpacerc                 C   s8   t jjdd}d|jksJ dt jj_d|jksJ dS )z$Preferences.selectorCombinatorSpacerz
a+b>c~d  e)selectorTextza + b > c ~ d er8   z	a+b>c~d eN)r   r4   Selectorro   r   r   r1   rB   r   r   r   test_selectorCombinatorSpacer.  s   
z-TestPreferences.test_selectorCombinatorSpacerc              	   C   sR   dt jj_dddddddd	d
}t| D ]\}}| t |jks&J qd S )Nr8   z@font-face {
    a: 1
    }z@import url(a);z7@media all {
    a {
        color: red
        }
    }z@namespace"a";z@namespace a"a";z@page :left {
    a: 1
    }z@x x;z@import"x"tv;)z@font-face {a:1}z@import  url( a );z@media  all{a{color:red}}z@namespace "a";z@namespace a  "a";z@page  :left {   a  :1  }z@x  x;z@import"x"tv)	r   r   r   r2   r	   r
   r   r   r   )r   r   r4   r   r   r   r   test_spacer5  s   

zTestPreferences.test_spacerc                 C   s   t jdd}|jdksJ d|_dt jj_|jdksJ dt jj_|jdks)J t j }d|_|jdks8J dt jj_|jdksDJ t jj	  dt jj_
dt jj_d	d
d}| j|dd dS )zPreferences.validOnlycolor1pxz
color: 1pxTr8   Fzleft: x;top: xzleft: x;
top: xzh1 {
    color: red;
    }zimg {
    float: left
    })z&h1 { color: red; rotation: 70minutes }zimg { float: left }       /* correct CSS 2.1 */
img { float: left here }  /* "here" is not a value of 'float' */
img { background: "red" } /* keywords cannot be quoted */
img { border-width: 3 }   /* a unit must be specified for length values */)raisingN)r   r4   Propertyr   valuer   r   r3   CSSStyleDeclarationr   r%   
do_equal_p)r   pr   r   r   r   r   test_validOnlyD  s&   





zTestPreferences.test_validOnlyN)__name__
__module____qualname____doc__r   r6   rA   rC   rE   rG   rL   rO   rR   rS   rU   rV   rZ   r_   ra   rd   re   rg   rj   rl   rm   rn   rq   rr   r{   r   r   r   r   r      s6    "IT	E#)r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestCSSSerializerz.
    testcases for cssutils.CSSSerializer
    c                 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dddddddddddddd }t | D ]\}}tj|}||jksZJ qId S )!N1z+10z+0z-0z0.0z00.0z00.0pxz00.0pcz00.0emz00.0exz00.0cmz00.0mmz00.0inz00.0%z0%z00.0ms0msz00.0s0s0khz0hz0deg0rad0grad0xxza, "b\"", serifzurl("h)i") "\[\]"rgb(18, 52, 86)#123456r;   )z00.0khzz00.0hzz00.0degz00.0radz00.0gradz00.0xxza, 'b"', serifzurl('h)i') '\[\]'r   r   r?   )r	   r
   r   r4   PropertyValuer   )r   r   r   r   vr   r   r   test_canonicali  sf   	
&z TestCSSSerializer.test_canonicalc                 C   sb   d}t |}|t|jdksJ d}t |}|t|jdks"J d|jd _d|jks/J dS )zCSSSerializer.do_CSSStyleSheetu   /* κουρος */zutf-8u$   @charset "utf-8";
/* κουρος */asciir   s6   @charset "ascii";
/* \3BA \3BF \3C5 \3C1 \3BF \3C2  */N)r   r   strr   cssRulesencoding)r   r4   sheetr   r   r   test_CSSStyleSheet  s   

z$TestCSSSerializer.test_CSSStyleSheetc                 C   s^   d}d}d}t jjj|||d}dt j|ksJ t jjj||d}dt j|ks-J dS )	zCSSSerializer.do_Propertyrs   redz
!important)namerw   priorityzcolor: red !important)r   rw   z
color: redN)r   r4   propertyrv   r   do_Property)r   r   rw   r   r   r   r   r   test_Property  s   zTestCSSSerializer.test_Propertyc                 C   s(   d}d}t |}|j| ksJ dS )zCSSSerializer._escapestringz@import url("ABC\a");
@import "ABC\a";
@import 'ABC\a';
a[href='"\a\22\27"'] {
    a: "\a\d\c";
    b: "\a \d \c ";
    c: "\"";
    d: "\22";
    e: '\'';
    f: "\\";
    g: "2\\ 1\ 2\\";
    content: '\27';
    }z@import url("ABC\a ");
@import "ABC\a ";
@import "ABC\a ";
a[href="\"\a \"'\""] {
    a: "\a \d \c ";
    b: "\a \d \c ";
    c: "\"";
    d: "\"";
    e: "'";
    f: "\\";
    g: "2\\ 1\ 2\\";
    content: "'"
    }N)r   r   r   r   )r   r4   r   r   r   r   r   test_escapestring  s   
z#TestCSSSerializer.test_escapestringN)r|   r}   r~   r   r   r   r   r   r   r   r   r   r   d  s    +r   )r   r   r8   r   BaseTestCaser   r   r   r   r   r   <module>   s        `