File: //usr/local/bin/python37_/lib/python3.7/site-packages/cssutils/tests/test_cssvariablesrule.py
"""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