o
    /hV                     @   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 )zBTestcases for cssutils.css.cssstyledelaration.CSSStyleDeclaration.    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d)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3S )4TestCSSStyleDeclarationc                 C   s   t j | _d S N)cssutilscssCSSStyleDeclarationr)self r   [/var/www/html/myenv/lib/python3.10/site-packages/cssutils/tests/test_cssstyledeclaration.pysetup_method   s   z$TestCSSStyleDeclaration.setup_methodc                 C   s   t j }d|jksJ d|jksJ |jdu sJ t jjdd}d|jks(J d|dks1J t j }t jj|d}||jksDJ t jd	|}d	|jksRJ ||jksYJ dS )
zCSSStyleDeclaration.__init__() r   Nleft: 0cssText0left)
parentRuletop: 0)r   r   r   r   lengthr   getPropertyValueCSSStyleRule)r
   ssheetr   r   r   	test_init   s   

z!TestCSSStyleDeclaration.test_initc                 C   sp  t j }d\}}}|||< ||| ksJ |||ksJ |||jks)J |||jks3J d\}}}||f||< ||| ksFJ |||  ksPJ t	t
 || W d   n1 sew   Y  |||jkstJ |||jks~J d\}}}|||< ||| ksJ |||jksJ |||jksJ ||= d|| ksJ d|d ksJ dS )zCSSStyleDeclaration[CSSName])colornamer   )zUnKnown-ProPERTYzunknown value	importantN)item1r   r   z	never set)r   r   r   __getattribute__getPropertyvalueprioritylowerpytestraisesAttributeError)r
   r   r   r#   r$   r   r   r   
test_items$   s0   



z"TestCSSStyleDeclaration.test_itemsc                 C   sp   t jjdd}dD ]}||v sJ | |v sJ t j|d|v s$J q	d|vs+J t jdd|vs6J dS )z0CSSStyleDeclaration.__contains__(nameOrProperty)z
x: 1;\y: 2r   )xr*   yr+   r    zN)r   r   r   upperProperty)r
   r   testr   r   r   test__contains__A   s   z(TestCSSStyleDeclaration.test__contains__c                 C   s   t j }d|_g }|D ]}||j|j|jf qt|dks"J |d dks*J |d dks2J |d dks:J |j	dksAJ |
dd	ksJJ |
dd
ksSJ |
ddks\J |
ddkseJ dS )z&CSSStyleDeclaration.__iter__ and .item
            color: red; c\olor: blue; CO\lor: green;
            left: 1px !important; left: 0;
            border: 0;
           r   )zco\lorgreenr   r   )r   1pxr      )borderr   r   r   r   r6   
   r   N)r   r   r   r   appendliteralnamer#   r$   lenr   r   )r
   r   pspr   r   r   test__iter__itemK   s   
z(TestCSSStyleDeclaration.test__iter__itemc                 C   sF   t d}ddgt| ksJ |d dksJ |d dks!J dS )zCSSStyleDeclaration.keys()zx:1; x:2; y:1r*   r+   2r    N)r   
parseStylelistkeysr
   r   r   r   r   	test_keysc   s   
z!TestCSSStyleDeclaration.test_keysc                 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t jj_t| D ]'\}}t d| }|du r`d| }n|dkrhd| }||jd jj	kssJ qLdS )zCSSStyleDeclaration parsezTOP:0r   ztop:0zc\olor: red; color:greenzcolor: greenzcolor:g\reenzcolor: g\reenzcolor:greenzcolor:green; colorzcolor:red;   color; color:greenzcolor:green; color:z color:red;   color:; color:greenz!color:green; color{;color:maroon}z,color:red; color{;color:maroon}; color:greenzFcolor: red;
voice-family: "\"}\"";
voice-family:inherit;
color: green;z#voice-family: inherit;
color: greenzwcol\or: blue;
                font-family: 'Courier New Times
                color: red;
                color: green;z/color: red; color: greenz/ color: red; color: greenz1px: red; color: greenz0: red; color: greenr   Nz
color: red)	z1px:: red; color: greenz$top: 0z$: 0z@x;
color: redz@x {
    }
color: redz/**/
color: redz/**/
color: red;
/**/z;color: redz;;color: red;;Fza { %s }z%sr   )
r   serprefskeepAllPropertiesr@   itemsparseStringcssRulesstyler   )r
   testsr/   expshr   r   r   
test_parsej   sp   	

)
z"TestCSSStyleDeclaration.test_parsec                 C   sj   t j }ddi}t| D ]#\}}||_dt jj_|d |jks$J dt jj_|d |jks2J qdS )zCSSStyleDeclaration serializeza:1 !important; a:2;b:1)za: 1 !important;
b: 1za: 1 !important;
a: 2;
b: 1Fr   Tr   N)	r   r   r   r@   rG   r   rD   rE   rF   r
   r   rK   r/   rL   r   r   r   test_serialize   s   


z&TestCSSStyleDeclaration.test_serializec                    s   d}t jjt jjt jjt jjg  fdd}|t | |t d| d jd j |t d| d jd jd j t |}d	|d
< ||	d
j
ksQJ |dd ||	dj
ksaJ dS )zCSSStyleDeclaration.children()z"/*1*/color: red; color: green; @x;c                    s<   t |  D ]\}} | t|ksJ |j| ksJ qd S r   )	enumeratechildrentypeparent)r   ir*   typesr   r   t   s   z0TestCSSStyleDeclaration.test_children.<locals>.tza {}r   z@media all {a {z}}r   r*   r+   r    N)r   r   
CSSCommentr.   CSSUnknownRuler?   rH   rI   rJ   r"   rT   setProperty)r
   rJ   rX   r   r   rV   r   test_children   s,   
z%TestCSSStyleDeclaration.test_childrenc                 C   s  t j }ddddd}t| D ]\}}d|_||_||jks#J qt j }dddddddddd	dd
ddd}t| D ]\}}||_||jksNJ q@i dtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjdtjjd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CSSStyleDeclaration.cssTextr   /*x*/)r    z 	 
  r^   left: 0;r   left: 0 !importantzleft: 0;
top: 1zT/*1*/
/*2*/
left/*3*//*4*/: /*5*/ /*6*/ 0 /*7*/ /*8*/ !/*9*//*a*/important/*b*//*c*/z!/*1*/
left: 0;
/*2*/
top: 1 /*3*/z"/*1*/
left: 0;
/*2*/
top: 1;
/*3*/z6left: 0 !important;
margin: 1px 2px 3px 4px !importantz+left: 0 !important;
margin: 1px 2px 3px 4px);r   zleft:0z
 left : 0 r`   zleft: 0 !important zleft:0!importantzleft: 0; top: 1zM/*1*//*2*/left/*3*//*4*/:/*5*//*6*/0/*7*//*8*/!/*9*//*a*/important/*b*//*c*/;z/*1*/left: 0;/*2*/ top: 1/*3*/zleft:0; top:1;z/*1*/left: 0;/*2*/ top: 1;/*3*/z2left:0!important;margin:1px 2px 3px 4px!important;za
	 left
	 :
	 0
	 !
	 important
	 ;
	 margin
	 :
	 1px
	 2px
	 3px
	 4px;zcolor: #xyztopztop:ztop : ztop:!importantztop:!important;ztop:;ztop 0ztop 0;:z:0z:0;z:0!importantz:;z: ;z:!important;z: !important;)r   z0!importantz0!important;z0;
!importantz!important;N)
r   r   r   r@   rG   r   xmldom	SyntaxErr
do_raise_rrO   r   r   r   test_cssText   s   

	
z$TestCSSStyleDeclaration.test_cssTextc                 C   sJ   t jjdd}d| ksJ d|jddksJ d|jddks#J d	S )
z)CSSStyleDeclaration.getCssText(separator)a:1;b:2r   z
a: 1;
b: 2z	a: 1;b: 2r   	separatorza: 1;/*x*/b: 2r^   N)r   r   r   
getCssTextrB   r   r   r   test_getCssText  s   z'TestCSSStyleDeclaration.test_getCssTextc                 C   sx   t j }t j }||_||jksJ t d}|jd }|j}||jks(J t d}|D ]
}|jj|ks9J q/dS )zCSSStyleDeclaration.parentRuleza{x:1}r   z
        @font-face {
            font-weight: bold;
            }
        a {
            font-weight: bolder;
            }
        @page {
            font-weight: bolder;
            }
        N)r   r   r   r   r   rH   rI   rJ   )r
   r   r   dr	   r   r   r   test_parentRule  s   



z'TestCSSStyleDeclaration.test_parentRulec                 C   sd   t j }d|_|djdksJ |djdksJ |djdks&J |djdks0J d	S )
zCSSStyleDeclaration.getPropertyr1   r   zco\lor: greenzCOLO\rr   zleft: 1px !importantr6   z	border: 0N)r   r   r   r   r"   rB   r   r   r   test_getProperty/  s   
z(TestCSSStyleDeclaration.test_getPropertyc                 C   s   t jjdd}ddgg ddgdgddgddgd}|D ]3}|\}}|| }|||}t|t|ks6J t|D ]\}}	|| }
|	|
j|
j|
jfksNJ q:qt jjdd}d	d
	dd |D kseJ dS )z#CSSStyleDeclaration.getProperties()z"/*1*/y:0;x:a !important;y:1; \x:b;r   r+   r    r   r*   ar   ))r+   r   r   rt   rs   \xbr   rv   ))NF)NT)r*   F)rw   F)r*   T)rw   Tza:0;b:1;a:1bar   c                 S   s   g | ]}|j qS r   )r   ).0r<   r   r   r   
<listcomp>Z  s    z>TestCSSStyleDeclaration.test_getProperties.<locals>.<listcomp>N)
r   r   r   getPropertiesr:   rQ   r9   r#   r$   join)r
   r   rK   r/   r   allexpectedactualrU   exru   r   r   r   test_getProperties<  s*    z*TestCSSStyleDeclaration.test_getPropertiesc                 C   sf   t jjdd}d|djksJ d|djksJ d|ddjks&J d|ddjks1J dS )	z)CSSStyleDeclaration.getPropertyCSSValue()color: red;c\olor: greenr   r3   r   c\olorredFN)r   r   r   getPropertyCSSValuer   rB   r   r   r   test_getPropertyCSSValue\  s
   z0TestCSSStyleDeclaration.test_getPropertyCSSValuec                 C   s   t j }d|dksJ |dd d|dksJ |dd d|dks,J t jjdd	}d
|dks<J d
|dksEJ d|ddksOJ d
|ddksYJ d
d
d
d
d
d}|D ]}t jj|d	}|| |dkswJ qcdS )z&CSSStyleDeclaration.getPropertyValue()r   unsetr   r   r6   z1px  solid  greenz1px solid greenr   r   r3   r   r   r   F)zcolor: red; color: greenzc\olor: red; c\olor: greenzcolor: red; c\olor: greenz.color: red !important; color: green !importantz#color: green !important; color: redN)r   r   r   r   r\   )r
   r   rK   r/   r   r   r   test_getPropertyValuev  s*   
z-TestCSSStyleDeclaration.test_getPropertyValuec                 C   s   t j }d|dksJ |ddd d|dksJ t jjdd}d|d	ks.J d|d
ks7J d|d	dksAJ d|d
dksKJ dS )z)CSSStyleDeclaration.getPropertyPriority()r   r   r   r   re   r   z+x: 1 !important;\x: 2;x: 3 !important;\x: 4r   r*   rw   TFN)r   r   r   getPropertyPriorityr\   rB   r   r   r   test_getPropertyPriority  s   
z0TestCSSStyleDeclaration.test_getPropertyPriorityc                 C   s   t j }d}||_d|dksJ d|jksJ ||_d|jdddks(J d|jdd	ks2J d|jd
ddks=J d|jksDJ ||_d|jd
ddksRJ d|jdd	ks\J d|jdddksgJ d|jksnJ dS )z$CSSStyleDeclaration.removeProperty()z\x:0 !important; x:1; \x:2; x:3r   r*   r   3F	normalizez\x: 0 !important;\x: 2rl   rw   z	x: 1;x: 3N)r   r   r   r   removePropertyrn   )r
   r   r   r   r   r   test_removeProperty  s   
z+TestCSSStyleDeclaration.test_removePropertyc                 C   s  t j }|ddd d|dksJ d|dksJ |dd d|dks-J d|dks6J |dd d|dksEJ |dd	 d	|dksTJ |jdd
dd d
|dkseJ d
|ddksoJ d	|ddksyJ |ddd d|dksJ d|dksJ dddd}t| D ].\}}t j }|\}}}|||| ||jksJ |||ksJ |||ksJ qt j }d|j	ksJ d|_	d|j	ksJ d|_	d|j	ksJ d|_	d|j	ksJ dS )z!CSSStyleDeclaration.setProperty()rc   r   re   r   r4   r   2pxz\top3px4pxFr   TOPz
!IMPORTANTr   ra   ))r   r   r   )r   r   r   )LEFTr   r   N)
r   r   r   r\   r   r   r@   rG   r   rc   )r
   r   rK   r/   rL   nvr<   r   r   r   test_setProperty  sJ   



z(TestCSSStyleDeclaration.test_setPropertyc                 C   s   t j }|dd t|jddddksJ |dd t|jddddks+J |ddks4J |jdddd	 t|jdddd
ksIJ |ddksRJ dS )z)CSSStyleDeclaration.setProperty(replace=)rc   r4   T)r~   r   r   r   F)replacer5   N)r   r   r   r\   r:   r|   r   rB   r   r   r   test_setProperty2  s   
z)TestCSSStyleDeclaration.test_setProperty2c                 C   s   t j }d|_d|jksJ dt|jksJ d|_d|jks"J dt|jks+J t j }|ddd d|jks>J |dd	 d|jksKJ |d
d	 dS )zCSSStyleDeclaration.lengthr   r   z-/*1*/left/*x*/:/*x*/0/*x*/;/*2*/ top: 1;/*3*/r5      rc   r   re   r4   r   N)r   r   r   r   r   r:   seqr\   rB   r   r   r   test_length  s   

z#TestCSSStyleDeclaration.test_lengthc                 C   s   t j }|ddd d|dksJ d|dksJ d|dks'J d|dks0J d|dks9J d|dksBJ |ddd d|dksRJ |ddd d|dksbJ |ddd d|dksrJ dS )	zCSSStyleDeclaration.XXX(name)rc   r4   re   r   zT\opr   r   N)r   r   r   r\   r   r   r   rB   r   r   r   test_nameParameter  s   
z*TestCSSStyleDeclaration.test_nameParameterc                 C   sZ  t jjdd}d|_d|_d|jksJ d|jksJ d|dks$J d|dks-J d|jks4J |`d|jks=J |`d	|jksFJ tt	 |
d
d W d   n1 s\w   Y  |d
d tt	 |d
 W d   n1 s|w   Y  tt	 |d
 W d   n1 sw   Y  d|d
ksJ d|jksJ dS )z-CSSStyleDeclaration.$css2property get set delz(left: 1px;color: red; font-style: italicr   r3   normalr   z
font-stylez+left: 1px;
color: green;
font-style: normalzleft: 1px;
font-style: normalz	left: 1pxUNKNOWNr   Nzleft: 1px;
unknown: red)r   r   r   r   	fontStyler   r   r&   r'   r(   __setattr__r\   r!   __delattr__rB   r   r   r   test_css2properties   s4   z+TestCSSStyleDeclaration.test_css2propertiesc                 C   s>   t jjdd}dt|v sJ tt|}t||jsJ dS )z*CSSStyleDeclaration.__repr__(), .__str__()rk   r   r>   N)r   r   r   strevalrepr
isinstance	__class__)r
   r   s2r   r   r   test_reprANDstr@  s   z'TestCSSStyleDeclaration.test_reprANDstrc                 C   sN   g d}|D ]\}}t jj|d}d||rdnd}|j|ks$J |qdS )zCSSStyleDeclaration.valid))zcolor: red;T)zcolor: asd;F)z	foo: red;F)zcolor: red; foo: red;Fr   z{!r} should be {}validinvalidN)r   r   r   formatr   )r
   casescaser   r   msgr   r   r   
test_validI  s   z"TestCSSStyleDeclaration.test_validN)__name__
__module____qualname__r   r   r)   r0   r=   rC   rN   rP   r]   rj   ro   rq   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s4    
5? 1 	r   )	__doc__xml.domrf   r&   r   r   r   BaseTestCaser   r   r   r   r   <module>   s    