o
    /h                     @   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.CSSRule    N   )basetestc                   @   sH   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S )TestCSSRulea  
    base class for all CSSRule subclass tests

    overwrite setUp with the appriopriate values, will be used in
    test_init and test_readonly
    overwrite all tests as you please, use::

        super(CLASSNAME, self).test_TESTNAME(params)

    to use the base class tests too
    c                 C   s   |    tj | _dS )zz
        self.r is the rule
        self.rRO the readonly rule
        relf.r_type the type as defined in CSSRule
        N)_setup_rulecssutilscssCSSStyleSheetsheetself r   O/var/www/html/myenv/lib/python3.10/site-packages/cssutils/tests/test_cssrule.pysetup_method   s   zTestCSSRule.setup_methodc                 C   s6   t j | _t j | _d| j_t jjj| _d| _d S )NTUNKNOWN_RULE)	r   r   CSSRulerrRO	_readonlyr   r_typer_typeStringr
   r   r   r   r   "   s
   
zTestCSSRule._setup_rulec                 C   sX   | j | jjks	J | j| jjksJ d| jjksJ | jjdu s"J | jjdu s*J dS )zCSSRule.type and init N)r   r   typer   
typeStringcssText
parentRuleparentStyleSheetr
   r   r   r   	test_init)   s
   zTestCSSRule.test_initc           
   
      s  dt jjjfdt jjjfdt jjjfdt jjjfdt jjjfdt jjjfdt jjj	fdt jjj
fd	t jjjfg	}t jjj	t jjj
t jjjg  fd
d}ddd |D }t |}|| t j }||_|| t j }|D ]	\}}|| qr|| t j }|D ]	\}}|| q|| 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g	}t j }t|D ]\}\}}||  }	||	_||	 q|| t j }t|D ]\}\}}||  }	||	_||	 q|| dS )z*CSSRule.parentRule .parentStyleSheet .typez@charset "ascii";z@import "x";z@namespace "x";z@font-face { src: url(x) }zx@media all {
                    @x;
                    a { color: red }
                    /* c  */
                }z@page :left { color: red }	@unknown;b { left: 0 }/*1*/c                    s   t | D ]Q\}}|jd u sJ |j| ksJ |j|jkr<t |D ]\}}|j|ks+J |j| ks2J |j | ks;J q |dkrHd| jksGJ q|dkrUd| jd ksUJ qd S )Nr   ascii   xr   )	enumerater   r   
MEDIA_RULEr   encoding
namespaces)sirulejr   mrtr   r   testK   s   z?TestCSSRule.test_parentRule_parentStyleSheet_type.<locals>.testr   c                 s       | ]}|d  V  qdS r   Nr   .0r   r   r   r   	<genexpr>[       zDTestCSSRule.test_parentRule_parentStyleSheet_type.<locals>.<genexpr>N)r   r   r   CHARSET_RULEIMPORT_RULENAMESPACE_RULEFONT_FACE_RULEr$   	PAGE_RULEr   
STYLE_RULECOMMENTjoinparseStringr   r   add
insertRuleCSSCharsetRuleCSSImportRuleCSSNamespaceRuleCSSFontFaceRuleCSSMediaRuleCSSPageRuleCSSUnknownRuleCSSStyleRule
CSSCommentr#   )
r   rulesr-   r   r'   r   _typesr(   r)   r   r+   r   %test_parentRule_parentStyleSheet_type1   sj   







z1TestCSSRule.test_parentRule_parentStyleSheet_typec                    sp  dt jjjfdt jjjfdt jjjfg  fdd}dddd	  D  }t |}|| t j }||_	|| d
d }| \}} D ]	\}}|
| qF|| | \}} D ]	\}}|| q[|| t jjt jjt jjg}| \}}t D ]\}	\}}||	  }
||
_	|
|
 q}|| | \}}t D ]\}	\}}||	  }
||
_	||
 q|| dS )z8CSSMediaRule.cssRules.parentRule .parentStyleSheet .typer   r   z@x;c                    sb   | j d }t|D ]%\}}|j|ksJ |j| ksJ |j|jks#J |j | d ks.J q	d S )Nr   r   )cssRulesr#   r   r   r   )r'   mrr(   r)   rH   r   r   r-      s   
zUTestCSSRule.test_CSSMediaRule_cssRules_parentRule_parentStyleSheet_type.<locals>.testz@media all { %s }r   c                 s   r.   r/   r   r0   r   r   r   r2      r3   zZTestCSSRule.test_CSSMediaRule_cssRules_parentRule_parentStyleSheet_type.<locals>.<genexpr>c                  S   s   t j } d| _| | jd fS )N@media all {}r   )r   r   r   r   rL   )r'   r   r   r   getMediaSheet   s   
z^TestCSSRule.test_CSSMediaRule_cssRules_parentRule_parentStyleSheet_type.<locals>.getMediaSheetN)r   r   r   r9   r:   r   r;   r<   r   r   r=   r>   rF   rG   rE   r#   )r   r-   r   r'   rP   rM   r   rI   rJ   r(   r)   r   rN   r   ;test_CSSMediaRule_cssRules_parentRule_parentStyleSheet_type   sH   







zGTestCSSRule.test_CSSMediaRule_cssRules_parentRule_parentStyleSheet_typec                 C   s~   t j | _d| j_| jjsJ d| jjksJ ttj	j
 | jd W d   n1 s0w   Y  d| jjks=J dS )zCSSRule readonlyTr   r"   N)r   r   r   r   r   r   pytestraisesxmldomNoModificationAllowedErr_setCssTextr
   r   r   r   test_readonly   s   zTestCSSRule.test_readonlyc              	   C   sR  d}|D ]1}|dv r|dv rq| |rd| }ttjj | j| W d   n1 s0w   Y  qtt | j	dd W d   n1 sMw   Y  tt | j	dd W d   n1 siw   Y  tt | j	dd	 W d   n1 sw   Y  tt | j	d
d W d   dS 1 sw   Y  dS )z
        CSSRule.cssText InvalidModificationErr

        called by subclasses

        startwithspace

        for test starting with this not the test but " test" is tested
        e.g. " @page {}"
        exception is the style rule test
        )
r   /* comment */z@charset "utf-8";z@font-face {}z@import url(x);rO   z@namespace "x";@page {}r   z@variables;a style rule {})za style rule)rY   rZ   z %sNr   r   r   r   r   r   )

startswithrR   rS   rT   rU   InvalidModificationErrr   rW   AttributeError__setattr__)r   startwithspacetestsr-   r   r   r   _test_InvalidModificationErr   s,   
"z(TestCSSRule._test_InvalidModificationErrN)__name__
__module____qualname____doc__r   r   r   rK   rQ   rX   ra   r   r   r   r   r      s    	W=
r   )
re   xml.domrT   rR   cssutils.cssr   r   r   BaseTestCaser   r   r   r   r   <module>   s    