o
    e4                     @   s>   d Z ddlZddlmZ ddlZddlZG dd dejZdS )z&Testcases for cssutils.css.CSSPageRule    N   )test_cssrulec                       s|   e Zd Zd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   s>   t jj  t j | _t jjdd| _t jjj| _	d| _
d S )NT)readonly	PAGE_RULE)cssutilsserprefsuseDefaultscssCSSPageRulerZrROr   Zr_typeZr_typeStringself r   OD:\Projects\ConvertPro\env\Lib\site-packages\cssutils/tests/test_csspagerule.py_setup_rule
   s
   
zTestCSSPageRule._setup_rulec                 C   s   t jj  d S N)r   r   r	   r
   r   r   r   r   teardown   s   zTestCSSPageRule.teardownc                    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 r   )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   Z_setAtkeywordZsetPropertyZ
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)Z_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_incompleteG   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_rr1   r(   r)   	SyntaxErrZ
do_raise_pupdater-   )r   ZEXPr/   r   r   r   test_cssTextO   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=   Z	_setStyleZ_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.selectorTextr@   r   Nr8   z/*1*/ :left /*a*/z:left /*a*/z/*1*/ :left)r   r4   r9   r:   r;   r5   z :leftr8   z/*1*/:left/*a*/z/*1*/ :left /*a*/ /*b*/z
:left/*a*/z
/*1*/:leftr"   )Zatt):z
:/*1*/leftz: leftz:left :rightz:left az
name :leftrB   )	r   r   r   r"   r<   r(   r)   r=   r-   )r   r   r/   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   r4   r:   r8   r9   r;   r7   r5   r6   zname:Xz@page %s {}N)r   r   r   listitemsr"   Zspecificityr%   )r   r   r/   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.cssRulesr3   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)rM   rO   
@top-rightNzcolor: #f00zj@page {
    @top-left {
        color: #f00
        }
    @top-right {
        color: blue
        }
    }z<@page {
    @top-right {
        color: blue
        }
    }rQ   )r   parseStringZcssRuleslenr   Z
MarginRuleaddr%   Z
insertRulemarginr   rH   keysZ
deleteRule)r   rC   r   m1iZ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
    }rA   zfont-family: zz @page {
    font-family: z
    }N)
r   r   r   r   r   r%   r(   r)   r=   r$   )r   r   s1s2Z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   rK   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__()r8   )r"   N)	r   r   r   strevalreprr#   r,   r"   )r   rJ   rC   r\   r   r   r   test_reprANDstr  s   zTestCSSPageRule.test_reprANDstr)__name__
__module____qualname__r   r   r!   r0   r2   r?   rE   rG   rL   rZ   r]   r^   rb   __classcell__r   r   r+   r   r   	   s    +D! RCr   )	__doc__Zxml.domr(   r   r   r   r&   ZTestCSSRuler   r   r   r   r   <module>   s    