frappe/env/lib/python3.12/site-packages/cssutils/tests/test_cssvariablesdeclaration.py

353 lines
9.7 KiB
Python
Raw Normal View History

"""Testcases for cssutils.css.cssvariablesdelaration.CSSVariablesDeclaration."""
import xml.dom
from . import basetest
import cssutils
class TestCSSVariablesDeclaration(basetest.BaseTestCase):
def setup_method(self):
self.r = cssutils.css.CSSVariablesDeclaration()
def test_init(self):
"CSSVariablesDeclaration.__init__()"
v = cssutils.css.CSSVariablesDeclaration()
assert '' == v.cssText
assert 0 == v.length
assert v.parentRule is None
v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0')
assert 'x: 0' == v.cssText
assert '0' == v.getVariableValue('x')
rule = cssutils.css.CSSVariablesRule()
v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0', parentRule=rule)
assert rule == v.parentRule
def test__contains__(self):
"CSSVariablesDeclaration.__contains__(name)"
v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0; y: 2')
for test in ('x', 'y'):
assert test in v
assert test.upper() in v
assert 'z' not in v
def test_items(self):
"CSSVariablesDeclaration[variableName]"
v = cssutils.css.CSSVariablesDeclaration()
value = '0'
v['X'] = value
assert value == v['X']
assert value == v.getVariableValue('X')
assert value == v['x']
assert value == v.getVariableValue('x')
assert '' == v['y']
assert '' == v.getVariableValue('y')
v['z'] = '1'
assert 2 == v.length
# unsorted!
assert sorted(v) == ['x', 'z']
del v['z']
assert 1 == v.length
assert 1 == v.length
assert '0' == v.removeVariable('x')
assert '' == v.removeVariable('z')
assert 0 == v.length
v.cssText = 'x:0; y:1'
keys = []
# unsorted!
for i in range(0, v.length):
keys.append(v.item(i))
assert sorted(keys) == ['x', 'y']
def test_keys(self):
"CSSVariablesDeclaration.keys()"
v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0; Y: 2')
assert ['x', 'y'] == sorted(v.keys())
def test_cssText(self):
"CSSVariablesDeclaration.cssText"
# empty
tests = {
'': '',
' ': '',
' \t \n ': '',
'x: 1': None,
'x: "a"': None,
'x: rgb(1, 2, 3)': None,
'x: 1px 2px 3px': None,
'x:1': 'x: 1',
'x:1;': 'x: 1',
'x : 1 ': 'x: 1',
'x : 1 ; ': 'x: 1',
'x:1;y:2': 'x: 1;\ny: 2',
'x:1;y:2;': 'x: 1;\ny: 2',
'x : 1 ; y : 2 ': 'x: 1;\ny: 2',
'x : 1 ; y : 2 ; ': 'x: 1;\ny: 2',
'/*x*/': '/*x*/',
'x555: 5': None,
'xxx:1;yyy:2': 'xxx: 1;\nyyy: 2',
'xxx : 1; yyy : 2': 'xxx: 1;\nyyy: 2',
'x:1;x:2;X:2': 'x: 2',
'same:1;SAME:2;': 'same: 2',
'/**/x/**/:/**/1/**/;/**/y/**/:/**/2/**/': '/**/ \n /**/ \n /**/ \n x: 1 /**/;\n/**/ \n /**/ \n /**/ \n y: 2 /**/',
}
self.do_equal_r(tests)
def test_cssText2(self):
"CSSVariablesDeclaration.cssText"
tests = {
'top': xml.dom.SyntaxErr,
'top:': xml.dom.SyntaxErr,
'top : ': xml.dom.SyntaxErr,
'top:;': xml.dom.SyntaxErr,
'top 0': xml.dom.SyntaxErr,
'top 0;': xml.dom.SyntaxErr,
':': xml.dom.SyntaxErr,
':0': xml.dom.SyntaxErr,
':0;': xml.dom.SyntaxErr,
':;': xml.dom.SyntaxErr,
': ;': xml.dom.SyntaxErr,
'0': xml.dom.SyntaxErr,
'0;': xml.dom.SyntaxErr,
';': xml.dom.SyntaxErr,
}
self.do_raise_r(tests)
def test_xVariable(self):
"CSSVariablesDeclaration.xVariable()"
v = cssutils.css.CSSVariablesDeclaration()
# unset
assert '' == v.getVariableValue('x')
# set
v.setVariable('x', '0')
assert '0' == v.getVariableValue('x')
assert '0' == v.getVariableValue('X')
assert 'x: 0' == v.cssText
v.setVariable('X', '0')
assert '0' == v.getVariableValue('x')
assert '0' == v.getVariableValue('X')
assert 'x: 0' == v.cssText
# remove
assert '0' == v.removeVariable('x')
assert '' == v.removeVariable('x')
assert '' == v.getVariableValue('x')
assert '' == v.cssText
def test_imports(self):
"CSSVariables imports"
def fetcher(url):
url = url.replace('\\', '/')
url = url[url.rfind('/') + 1 :]
return (
None,
{
'3.css': '''
@variables {
over3-2-1-0: 3;
over3-2-1: 3;
over3-2: 3;
over3-2-0: 3;
over3-1: 3;
over3-1-0: 3;
over3-0: 3;
local3: 3;
}
''',
'2.css': '''
@variables {
over3-2-1-0: 2;
over3-2-1: 2;
over3-2-0: 2;
over3-2: 2;
over2-1: 2;
over2-1-0: 2;
over2-0: 2;
local2: 2;
}
''',
'1.css': '''
@import "3.css";
@import "2.css";
@variables {
over3-2-1-0: 1;
over3-2-1: 1;
over3-1: 1;
over3-1-0: 1;
over2-1: 1;
over2-1-0: 1;
over1-0: 1;
local1: 1;
}
''',
}[url],
)
css = '''
@import "1.css";
@variables {
over3-2-1-0: 0;
over3-2-0: 0;
over3-1-0: 0;
over2-1-0: 0;
over3-0: 0;
over2-0: 0;
over1-0: 0;
local0: 0;
}
a {
local0: var(local0);
local1: var(local1);
local2: var(local2);
local3: var(local3);
over1-0: var(over1-0);
over2-0: var(over2-0);
over3-0: var(over3-0);
over2-1: var(over2-1);
over3-1: var(over3-1);
over3-2: var(over3-2);
over2-1-0: var(over2-1-0);
over3-2-0: var(over3-2-0);
over3-2-1: var(over3-2-1);
over3-2-1-0: var(over3-2-1-0);
}
'''
p = cssutils.CSSParser(fetcher=fetcher)
s = p.parseString(css)
# only these in rule of this sheet
assert s.cssRules[1].variables.length == 8
# but all vars in s available!
assert s.variables.length == 15
assert [
'local0',
'local1',
'local2',
'local3',
'over1-0',
'over2-0',
'over2-1',
'over2-1-0',
'over3-0',
'over3-1',
'over3-1-0',
'over3-2',
'over3-2-0',
'over3-2-1',
'over3-2-1-0',
] == sorted(s.variables.keys())
# test with variables rule
cssutils.ser.prefs.resolveVariables = False
assert (
s.cssText
== b'''@import "1.css";
@variables {
over3-2-1-0: 0;
over3-2-0: 0;
over3-1-0: 0;
over2-1-0: 0;
over3-0: 0;
over2-0: 0;
over1-0: 0;
local0: 0
}
a {
local0: var(local0);
local1: var(local1);
local2: var(local2);
local3: var(local3);
over1-0: var(over1-0);
over2-0: var(over2-0);
over3-0: var(over3-0);
over2-1: var(over2-1);
over3-1: var(over3-1);
over3-2: var(over3-2);
over2-1-0: var(over2-1-0);
over3-2-0: var(over3-2-0);
over3-2-1: var(over3-2-1);
over3-2-1-0: var(over3-2-1-0)
}'''
)
# test with resolved vars
cssutils.ser.prefs.resolveVariables = True
assert (
s.cssText
== b'''@import "1.css";
a {
local0: 0;
local1: 1;
local2: 2;
local3: 3;
over1-0: 0;
over2-0: 0;
over3-0: 0;
over2-1: 1;
over3-1: 1;
over3-2: 2;
over2-1-0: 0;
over3-2-0: 0;
over3-2-1: 1;
over3-2-1-0: 0
}'''
)
s = cssutils.resolveImports(s)
assert (
s.cssText
== b'''/* START @import "1.css" */
/* START @import "3.css" */
/* START @import "2.css" */
a {
local0: 0;
local1: 1;
local2: 2;
local3: 3;
over1-0: 0;
over2-0: 0;
over3-0: 0;
over2-1: 1;
over3-1: 1;
over3-2: 2;
over2-1-0: 0;
over3-2-0: 0;
over3-2-1: 1;
over3-2-1-0: 0
}'''
)
def test_parentRule(self):
"CSSVariablesDeclaration.parentRule"
s = cssutils.parseString('@variables { a:1}')
r = s.cssRules[0]
d = r.variables
assert r == d.parentRule
d2 = cssutils.css.CSSVariablesDeclaration('b: 2')
r.variables = d2
assert r == d2.parentRule
def test_reprANDstr(self):
"CSSVariablesDeclaration.__repr__(), .__str__()"
s = cssutils.css.CSSVariablesDeclaration(cssText='a:1;b:2')
assert "2" in str(s) # length
s2 = eval(repr(s))
assert isinstance(s2, s.__class__)