o
    Q+ i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rZrROr   Zr_typeZr_typeString)self r   k/home/app/PaddleOCR-VL-test/.venv_paddleocr/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
   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_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_rr+   r"   r#   	SyntaxErrZ
do_raise_pupdater'   )r   ZEXPr)   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#   r7   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   Nr2   z/*1*/ :left /*a*/z:left /*a*/z/*1*/ :left)r   r.   r3   r4   r5   r/   z :leftr2   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 :leftr<   )	r   r   r	   r   r6   r"   r#   r7   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   r.   r4   r2   r3   r5   r1   r/   r0   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.cssRulesr-   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)rG   rI   
@top-rightNzcolor: #f00zj@page {
    @top-left {
        color: #f00
        }
    @top-right {
        color: blue
        }
    }z<@page {
    @top-right {
        color: blue
        }
    }rK   )r   parseStringZcssRuleslenr   Z
MarginRuleaddr   Z
insertRulemarginr   rB   keysZ
deleteRule)r   r=   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
    }r;   zfont-family: zz @page {
    font-family: z
    }N)
r   r   r	   r   r   r   r"   r#   r7   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
   rE   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__()r2   )r   N)	r   r   r	   strevalreprr   r&   r   )r   rD   r=   rV   r   r   r   test_reprANDstr  s   zTestCSSPageRule.test_reprANDstr)__name__
__module____qualname__r   r   r*   r,   r9   r?   rA   rF   rT   rW   rX   r\   __classcell__r   r   r%   r   r      s    +B! RCr   )	__doc__Zxml.domr"   r    r   r   r   ZTestCSSRuler   r   r   r   r   <module>   s    