o
    /h4                     @   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&Testcases for cssutils.css.CSSPageRule    N   )test_cssrulec                       st   e Zd Zdd Z f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  ZS )TestCSSPageRulec                 C   s2   t j | _t jjdd| _t jjj| _d| _d S )NT)readonly	PAGE_RULE)cssutilscssCSSPageRulerrROr   r_typer_typeString)self r   S/var/www/html/myenv/lib/python3.10/site-packages/cssutils/tests/test_csspagerule.py_setup_rule   s   
zTestCSSPageRule._setup_rulec                    s"  t    tj }d|jksJ t|jtjjsJ ||jj	ks#J d|j
ks*J ttjj | jd W d   n1 sBw   Y  dd }|tjjtjdd tj }d|_
|| tj }|jd	d
 || tj }d|jd	< || tj }d|j_|| dS )zCSSPageRule.__init__() xNc                 S   s0   | | j jksJ | j D ]
}| j |jksJ qd S )N)style
parentRuleparent)ffpr   r   r   	checkrefs#   s   
z,TestCSSPageRule.test_init.<locals>.checkrefszfont-family: x)r   z@page { font-family: x }zfont-familyyza)super	test_initr   r   r	   selectorText
isinstancer   CSSStyleDeclarationr   cssTextpytestraisesxmldomInvalidModificationErrr
   _setAtkeywordsetProperty
fontFamily)r   r
   r   	__class__r   r   r      s6   







zTestCSSPageRule.test_initc                 C   s$   |  d dtjji}| | dS )z*CSSPageRule.cssText InvalidModificationErrz@pagez@pag {}N)_test_InvalidModificationErrr%   r&   r'   
do_raise_rr   testsr   r   r   test_InvalidModificationErr>   s   
z+TestCSSPageRule.test_InvalidModificationErrc                 C   s   ddd}|  | dS )zCSSPageRule (incomplete)r   z"@page :left {
    color: red
    })z@page :left { z@page :left { color: redN)
do_equal_pr/   r   r   r   test_incompleteF   s   zTestCSSPageRule.test_incompletec                 C   sD  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ddddd d!d"}|  | | | 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#
}| | |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CSSPageRule.cssTextz@page %s {
    margin: 0
    }@page {}r   z@page:left{}z@page :right {}z@page {margin:0;}z@page {
    margin: 0
    }z@page name { margin: 0 }namez@page name:left { margin: 0 }	name:leftz@page name:right { margin: 0 }
name:rightz@page name:first { margin: 0 }
name:firstz@page :left { margin: 0 }:leftz@page:left { margin: 0 }z@page :right { margin: 0 }:rightz@page :first { margin: 0 }:firstz!@page :UNKNOWNIDENT { margin: 0 }:UNKNOWNIDENTz@PAGE:left{margin:0;}z!@page :left {
    margin: 0
    }z@\page:left{margin:0;}z)@page/*1*//*2*/:left/*3*//*4*/{margin:0;}z9@page /*1*/ /*2*/ :left /*3*/ /*4*/ {
    margin: 0
    }z@page:left{margin:0;}z=@page {
    @top-right {
        content: "2"
        }
    }z@page {
    padding: 1cm;
    margin: 1cm;
    @top-left {
        content: "1"
        }
    @top-right {
        content: "2";
        left: 1
        }
    }z@page {
    @top-right {
        content: "1a";
        content: "1b";
        x: 1;
        content: "2";
        y: 2
        }
    })z@page
	 :left
	 {margin:0;}z9@page {    @top-right {        content: "2"        }    }z\@page {padding: 1cm; margin: 1cm; @top-left {content: "1"}@top-right {content: "2";left: 1}}zZ@page {@top-right { content: "1a"; content: "1b"; x: 1 }@top-right { content: "2"; y: 2 }})
z@page AUto {}z@page AUto:left {}z
@page : {}z@page :/*1*/left {}z@page : left {}z@page :left :right {}z@page :left a {}z@page a :left  {}z@page :left;z@page :left })z@page :right :left {}z@page :right X {}z@page X Y {}z@page :left {z@page :left {}1z@page :left {}/**/z@page :left {} N)
do_equal_rr2   r%   r&   	SyntaxErr
do_raise_pupdater.   )r   EXPr0   r   r   r   test_cssTextN   s   	

 

zTestCSSPageRule.test_cssTextc                 C   s  t j }d}||_|j|ksJ d}||_|jj|ksJ ttj	j
 |d W d   n1 s5w   Y  |j|ksAJ |jj|ksIJ ttj	j
 |d W d   n1 s`w   Y  |j|kslJ |jj|kstJ ttj	j
 |d W d   n1 sw   Y  |j|ksJ |jj|ksJ ttj	j
 |d W d   n1 sw   Y  |j|ksJ |jj|ksJ dS )zCSSPageRule.cssText 2a:leftzsize: a4$Nz@page $ { color: red }z@page b:right { x })r   r   r	   r   r   r"   r#   r$   r%   r&   r>   	_setStyle_setCssText_setSelectorText)r   r
   sstr   r   r   test_cssText2   s6   
zTestCSSPageRule.test_cssText2c                 C   s   t j }d|_|jdksJ ddddddddddddd}| j|d	d
 tjjtjjtjjtjjtjjtjjd}| j|dd
 dS )zCSSPageRule.selectorTextrC   r   Nr9   z/*1*/ :left /*a*/z:left /*a*/z/*1*/ :left)r   r5   r:   r;   r<   r6   z :leftr9   z/*1*/:left/*a*/z/*1*/ :left /*a*/ /*b*/z
:left/*a*/z
/*1*/:leftr   )att):z
:/*1*/leftz: leftz:left :rightz:left az
name :leftrG   )	r   r   r	   r   r=   r%   r&   r>   r.   )r   r
   r0   r   r   r   test_selectorText   s2   
z!TestCSSPageRule.test_selectorTextc                 C   st   t j }ddddddddddd
}t| D ]\}}||_|j|ks&J t j }d| |_|j|ks7J qd	S )
zCSSPageRule.specificity)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )
r   r5   r;   r9   r:   r<   r8   r6   r7   zname:Xz@page %s {}N)r   r   r	   listitemsr   specificityr"   )r   r
   r0   selexpr   r   r   test_specificity   s&   


z TestCSSPageRule.test_specificityc                 C   s  t d}|jd }t|jdksJ t jdd}||}|dks%J t|jdks.J t j }d|_||}|dksAJ t|jdksJJ t j }d|_	d	|_
||d}|dksaJ t|jd
ksjJ |jdksqJ d|v swJ d|vs}J t| g dksJ |d du sJ |d jdksJ d|d< |d jdksJ || t|jdksJ |jdksJ |d t|jdksJ ||jd ksJ |jdksJ |d= t|jdksJ dS )zCSSPageRule.cssRulesr4   r   	@top-leftz
color: redr   z@top-right { color: blue }   @top-centerzcolor: green   z@page {
    @top-left {
        color: red
        }
    @top-center {
        color: green
        }
    @top-right {
        color: blue
        }
    }z@bottom-left)rT   rV   
@top-rightNzcolor: #f00zj@page {
    @top-left {
        color: #f00
        }
    @top-right {
        color: blue
        }
    }z<@page {
    @top-right {
        color: blue
        }
    }rX   )r   parseStringcssRuleslenr   
MarginRuleaddr"   
insertRulemarginr   rN   keys
deleteRule)r   rH   r   m1im3m2r   r   r   test_cssRules   sR   







zTestCSSPageRule.test_cssRulesc                 C   s  t j }|j}||jksJ d|jksJ d|_|j|ks J ||jjks(J |jdks/J |jjdks7J |jdks>J |j}zd|_W n tjjyQ   Y nw |j|ksYJ ||jjksaJ |jdkshJ |jjdkspJ |jdkswJ |j}d|j_|j|ksJ ||jjksJ |jdksJ |jjdksJ t j	d}||_|j|ksJ ||jksJ |jd	ksJ |jdksJ |jjdksJ |jdksJ d
|_|j|ksJ |jdksJ |jjd
ksJ |jdksJ zd|_W n tjjy   Y nw |j|ks
J |jdksJ |jjd
ksJ |jdks#J d|_|j|ks.J |jdks6J |jjdks?J dS )z"CSSPageRule.style (and references)r   z@page { font-family: x1 }z!@page {
    font-family: x1
    }zfont-family: x1z@page { $ }zfont-family: x2z!@page {
    font-family: x2
    }zfont-family: y1z!@page {
    font-family: y1
    }zfont-family: y2z!@page {
    font-family: y2
    }rD   zfont-family: zz @page {
    font-family: z
    }N)
r   r   r	   r   r   r"   r%   r&   r>   r!   )r   r
   s1s2s3r   r   r   
test_style:  sj   


zTestCSSPageRule.test_stylec                 C   s(   t j }d|j_d}||jksJ dS )zCSSPageRule.style propertiesa	  
        margin-top: 0;
        margin-right: 0;
        margin-bottom: 0;
        margin-left: 0;
        margin: 0;

        page-break-before: auto;
        page-break-after: auto;
        page-break-inside: auto;

        orphans: 3;
        widows: 3;
        z@page {
    margin-top: 0;
    margin-right: 0;
    margin-bottom: 0;
    margin-left: 0;
    margin: 0;
    page-break-before: auto;
    page-break-after: auto;
    page-break-inside: auto;
    orphans: 3;
    widows: 3
    }N)r   r   r	   r   r"   )r   r
   rR   r   r   r   test_properties}  s   
zTestCSSPageRule.test_propertiesc                 C   sP   d}t jj|d}|t|v sJ tt|}t||jsJ ||jks&J dS )z"CSSPageRule.__repr__(), .__str__()r9   )r   N)	r   r   r	   strevalreprr    r,   r   )r   rQ   rH   rh   r   r   r   test_reprANDstr  s   zTestCSSPageRule.test_reprANDstr)__name__
__module____qualname__r   r   r1   r3   rB   rJ   rM   rS   rf   rj   rk   ro   __classcell__r   r   r+   r   r      s    +B! RCr   )	__doc__xml.domr%   r#   r   r   r   TestCSSRuler   r   r   r   r   <module>   s    