144 lines
4.6 KiB
Python
144 lines
4.6 KiB
Python
|
|
"""Testcases for cssutils.css.CSSPageRule"""
|
||
|
|
|
||
|
|
import xml.dom
|
||
|
|
from . import test_cssrule
|
||
|
|
import cssutils
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
|
||
|
|
class TestCSSVariablesRule(test_cssrule.TestCSSRule):
|
||
|
|
def _setup_rule(self):
|
||
|
|
self.r = cssutils.css.CSSVariablesRule()
|
||
|
|
self.rRO = cssutils.css.CSSVariablesRule(readonly=True)
|
||
|
|
self.r_type = cssutils.css.CSSPageRule.VARIABLES_RULE
|
||
|
|
self.r_typeString = 'VARIABLES_RULE'
|
||
|
|
|
||
|
|
cssutils.ser.prefs.resolveVariables = False
|
||
|
|
|
||
|
|
def test_init(self):
|
||
|
|
"CSSVariablesRule.__init__()"
|
||
|
|
super().test_init()
|
||
|
|
|
||
|
|
r = cssutils.css.CSSVariablesRule()
|
||
|
|
assert isinstance(r.variables, cssutils.css.CSSVariablesDeclaration)
|
||
|
|
assert r == r.variables.parentRule
|
||
|
|
|
||
|
|
# until any variables
|
||
|
|
assert '' == r.cssText
|
||
|
|
|
||
|
|
# only possible to set @... similar name
|
||
|
|
with pytest.raises(xml.dom.InvalidModificationErr):
|
||
|
|
self.r._setAtkeyword('x')
|
||
|
|
|
||
|
|
def test_InvalidModificationErr(self):
|
||
|
|
"CSSVariablesRule.cssText InvalidModificationErr"
|
||
|
|
self._test_InvalidModificationErr('@variables')
|
||
|
|
tests = {
|
||
|
|
'@var {}': xml.dom.InvalidModificationErr,
|
||
|
|
}
|
||
|
|
self.do_raise_r(tests)
|
||
|
|
|
||
|
|
def test_incomplete(self):
|
||
|
|
"CSSVariablesRule (incomplete)"
|
||
|
|
tests = {
|
||
|
|
'@variables { ': '', # no } and no content
|
||
|
|
'@variables { x: red': '@variables {\n x: red\n }', # no }
|
||
|
|
}
|
||
|
|
self.do_equal_p(tests) # parse
|
||
|
|
|
||
|
|
def test_cssText(self):
|
||
|
|
"CSSVariablesRule"
|
||
|
|
EXP = '@variables {\n margin: 0\n }'
|
||
|
|
tests = {
|
||
|
|
'@variables {}': '',
|
||
|
|
'@variables {margin:0;}': EXP,
|
||
|
|
'@variables {margin:0}': EXP,
|
||
|
|
'@VaRIables { margin : 0 ; }': EXP,
|
||
|
|
'@\\VaRIables { margin : 0 }': EXP,
|
||
|
|
'@variables {a:1;b:2}': '@variables {\n a: 1;\n b: 2\n }',
|
||
|
|
# comments
|
||
|
|
'@variables /*1*/ {margin:0;}': '@variables /*1*/ {\n margin: 0\n }',
|
||
|
|
'@variables/*1*/{margin:0;}': '@variables /*1*/ {\n margin: 0\n }',
|
||
|
|
}
|
||
|
|
self.do_equal_r(tests)
|
||
|
|
self.do_equal_p(tests)
|
||
|
|
|
||
|
|
def test_media(self):
|
||
|
|
"CSSVariablesRule.media"
|
||
|
|
r = cssutils.css.CSSVariablesRule()
|
||
|
|
with pytest.raises(AttributeError):
|
||
|
|
r.__getattribute__('media')
|
||
|
|
with pytest.raises(AttributeError):
|
||
|
|
r.__setattr__('media', '?')
|
||
|
|
|
||
|
|
def test_variables(self):
|
||
|
|
"CSSVariablesRule.variables"
|
||
|
|
r = cssutils.css.CSSVariablesRule(
|
||
|
|
variables=cssutils.css.CSSVariablesDeclaration('x: 1')
|
||
|
|
)
|
||
|
|
assert r == r.variables.parentRule
|
||
|
|
|
||
|
|
# cssText
|
||
|
|
r = cssutils.css.CSSVariablesRule()
|
||
|
|
r.cssText = '@variables { x: 1 }'
|
||
|
|
vars1 = r.variables
|
||
|
|
assert r == r.variables.parentRule
|
||
|
|
assert vars1 == r.variables
|
||
|
|
assert r.variables.cssText == 'x: 1'
|
||
|
|
assert r.cssText == '@variables {\n x: 1\n }'
|
||
|
|
|
||
|
|
r.cssText = '@variables {y:2}'
|
||
|
|
assert r == r.variables.parentRule
|
||
|
|
assert vars1 != r.variables
|
||
|
|
assert r.variables.cssText == 'y: 2'
|
||
|
|
assert r.cssText == '@variables {\n y: 2\n }'
|
||
|
|
|
||
|
|
vars2 = r.variables
|
||
|
|
|
||
|
|
# fail
|
||
|
|
try:
|
||
|
|
r.cssText = '@variables {$:1}'
|
||
|
|
except xml.dom.DOMException:
|
||
|
|
pass
|
||
|
|
|
||
|
|
assert vars2 == r.variables
|
||
|
|
assert r.variables.cssText == 'y: 2'
|
||
|
|
assert r.cssText == '@variables {\n y: 2\n }'
|
||
|
|
|
||
|
|
# var decl
|
||
|
|
vars3 = cssutils.css.CSSVariablesDeclaration('z: 3')
|
||
|
|
r.variables = vars3
|
||
|
|
|
||
|
|
assert r == r.variables.parentRule
|
||
|
|
assert vars3 == r.variables
|
||
|
|
assert r.variables.cssText == 'z: 3'
|
||
|
|
assert r.cssText == '@variables {\n z: 3\n }'
|
||
|
|
|
||
|
|
# string
|
||
|
|
r.variables = 'a: x'
|
||
|
|
assert vars3 != r.variables
|
||
|
|
assert r == r.variables.parentRule
|
||
|
|
assert r.variables.cssText == 'a: x'
|
||
|
|
assert r.cssText == '@variables {\n a: x\n }'
|
||
|
|
vars4 = r.variables
|
||
|
|
|
||
|
|
# string fail
|
||
|
|
try:
|
||
|
|
r.variables = '$: x'
|
||
|
|
except xml.dom.DOMException:
|
||
|
|
pass
|
||
|
|
assert vars4 == r.variables
|
||
|
|
assert r == r.variables.parentRule
|
||
|
|
assert r.variables.cssText == 'a: x'
|
||
|
|
assert r.cssText == '@variables {\n a: x\n }'
|
||
|
|
|
||
|
|
def test_reprANDstr(self):
|
||
|
|
"CSSVariablesRule.__repr__(), .__str__()"
|
||
|
|
r = cssutils.css.CSSVariablesRule()
|
||
|
|
r.cssText = '@variables { xxx: 1 }'
|
||
|
|
assert 'xxx' in str(r)
|
||
|
|
|
||
|
|
r2 = eval(repr(r))
|
||
|
|
assert isinstance(r2, r.__class__)
|
||
|
|
assert r.cssText == r2.cssText
|