From b1136b5c52b4ad548bdd338654ee6ae1370e1f0d Mon Sep 17 00:00:00 2001
From: Hugo van Kemenade <hugovk@users.noreply.github.com>
Date: Fri, 31 Dec 2021 00:41:28 +0200
Subject: [PATCH 1/2] Replace removed assertEquals with assertEqual
---
css_parser_tests/basetest.py | 2 +-
css_parser_tests/test_util.py | 32 ++++++++++++++++----------------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/css_parser_tests/basetest.py b/css_parser_tests/basetest.py
index 115053f..f45a620 100644
--- a/css_parser_tests/basetest.py
+++ b/css_parser_tests/basetest.py
@@ -261,7 +261,7 @@ class GenerateTests(type):
Example::
def gen_test_length(self, string, expected):
- self.assertEquals(len(string), expected)
+ self.assertEqual(len(string), expected)
gen_test_length.cases = [
("a", 1),
("aa", 2),
diff --git a/css_parser_tests/test_util.py b/css_parser_tests/test_util.py
index 9ccd151..7ab1388 100644
--- a/css_parser_tests/test_util.py
+++ b/css_parser_tests/test_util.py
@@ -442,12 +442,12 @@ def test_ensure(self):
def test_calling(self):
self.assertIsNone(self.lazyre('bar'))
match = self.lazyre('foobar')
- self.assertEquals(match.group(), 'foo')
+ self.assertEqual(match.group(), 'foo')
def test_matching(self):
self.assertIsNone(self.lazyre.match('bar'))
match = self.lazyre.match('foobar')
- self.assertEquals(match.group(), 'foo')
+ self.assertEqual(match.group(), 'foo')
def test_matching_with_position_parameters(self):
self.assertIsNone(self.lazyre.match('foo', 1))
@@ -456,56 +456,56 @@ def test_matching_with_position_parameters(self):
def test_searching(self):
self.assertIsNone(self.lazyre.search('rafuubar'))
match = self.lazyre.search('rafoobar')
- self.assertEquals(match.group(), 'foo')
+ self.assertEqual(match.group(), 'foo')
def test_searching_with_position_parameters(self):
self.assertIsNone(self.lazyre.search('rafoobar', 3))
self.assertIsNone(self.lazyre.search('rafoobar', 0, 4))
match = self.lazyre.search('rafoofuobar', 4)
- self.assertEquals(match.group(), 'fuo')
+ self.assertEqual(match.group(), 'fuo')
def test_split(self):
- self.assertEquals(self.lazyre.split('rafoobarfoobaz'),
+ self.assertEqual(self.lazyre.split('rafoobarfoobaz'),
['ra', 'bar', 'baz'])
- self.assertEquals(self.lazyre.split('rafoobarfoobaz', 1),
+ self.assertEqual(self.lazyre.split('rafoobarfoobaz', 1),
['ra', 'barfoobaz'])
def test_findall(self):
- self.assertEquals(self.lazyre.findall('rafoobarfuobaz'),
+ self.assertEqual(self.lazyre.findall('rafoobarfuobaz'),
['foo', 'fuo'])
def test_finditer(self):
result = self.lazyre.finditer('rafoobarfuobaz')
- self.assertEquals([m.group() for m in result], ['foo', 'fuo'])
+ self.assertEqual([m.group() for m in result], ['foo', 'fuo'])
def test_sub(self):
- self.assertEquals(self.lazyre.sub('bar', 'foofoo'), 'barbar')
- self.assertEquals(self.lazyre.sub(lambda x: 'baz', 'foofoo'), 'bazbaz')
+ self.assertEqual(self.lazyre.sub('bar', 'foofoo'), 'barbar')
+ self.assertEqual(self.lazyre.sub(lambda x: 'baz', 'foofoo'), 'bazbaz')
def test_subn(self):
subbed = self.lazyre.subn('bar', 'foofoo')
- self.assertEquals(subbed, ('barbar', 2))
+ self.assertEqual(subbed, ('barbar', 2))
subbed = self.lazyre.subn(lambda x: 'baz', 'foofoo')
- self.assertEquals(subbed, ('bazbaz', 2))
+ self.assertEqual(subbed, ('bazbaz', 2))
def test_groups(self):
lazyre = LazyRegex('(.)(.)')
self.assertIsNone(lazyre.groups)
lazyre.ensure()
- self.assertEquals(lazyre.groups, 2)
+ self.assertEqual(lazyre.groups, 2)
def test_groupindex(self):
lazyre = LazyRegex('(?P<foo>.)')
self.assertIsNone(lazyre.groupindex)
lazyre.ensure()
- self.assertEquals(lazyre.groupindex, {'foo': 1})
+ self.assertEqual(lazyre.groupindex, {'foo': 1})
def test_flags(self):
self.lazyre.ensure()
- self.assertEquals(self.lazyre.flags, re.compile('.').flags)
+ self.assertEqual(self.lazyre.flags, re.compile('.').flags)
def test_pattern(self):
- self.assertEquals(self.lazyre.pattern, 'f.o')
+ self.assertEqual(self.lazyre.pattern, 'f.o')
if __name__ == '__main__':
From 9857454707a3687ff6617f4f7afdaf30f75b53ea Mon Sep 17 00:00:00 2001
From: Hugo van Kemenade <hugovk@users.noreply.github.com>
Date: Fri, 31 Dec 2021 00:42:50 +0200
Subject: [PATCH 2/2] Upgrade other unittest asserts for clearer error messages
---
css_parser_tests/basetest.py | 9 +-
css_parser_tests/test_codec.py | 4 +-
css_parser_tests/test_csscharsetrule.py | 8 +-
css_parser_tests/test_csscomment.py | 4 +-
css_parser_tests/test_cssfontfacerule.py | 484 ++++++------
css_parser_tests/test_cssimportrule.py | 10 +-
css_parser_tests/test_cssmediarule.py | 6 +-
css_parser_tests/test_cssnamespacerule.py | 10 +-
css_parser_tests/test_csspagerule.py | 6 +-
css_parser_tests/test_cssstyledeclaration.py | 14 +-
css_parser_tests/test_cssstylerule.py | 6 +-
css_parser_tests/test_cssstylesheet.py | 18 +-
css_parser_tests/test_cssunknownrule.py | 2 +-
css_parser_tests/test_cssutils.py | 14 +-
.../test_cssvariablesdeclaration.py | 700 +++++++++---------
css_parser_tests/test_cssvariablesrule.py | 310 ++++----
css_parser_tests/test_domimplementation.py | 90 +--
css_parser_tests/test_marginrule.py | 6 +-
css_parser_tests/test_medialist.py | 6 +-
css_parser_tests/test_mediaquery.py | 216 +++---
css_parser_tests/test_property.py | 14 +-
css_parser_tests/test_selector.py | 6 +-
css_parser_tests/test_selectorlist.py | 4 +-
css_parser_tests/test_value.py | 48 +-
24 files changed, 998 insertions(+), 997 deletions(-)
diff --git a/css_parser_tests/basetest.py b/css_parser_tests/basetest.py
index f45a620..ecb79a3 100644
--- a/css_parser_tests/basetest.py
+++ b/css_parser_tests/basetest.py
@@ -131,10 +131,11 @@ def assertRaisesEx(self, exception, callable, *args, **kwargs):
callable(*args, **kwargs)
except exception as exc:
if exc_args is not None:
- self.failIf(exc.args != exc_args,
- "%s raised %s with unexpected args: "
- "expected=%r, actual=%r"
- % (callsig, exc.__class__, exc_args, exc.args))
+ self.assertEqual(
+ exc.args,
+ exc_args,
+ '%s raised %s with unexpected args: expected=%r, actual=%r' % (callsig, exc.__class__, exc_args, exc.args)
+ )
if exc_pattern is not None:
self.assertTrue(exc_pattern.search(str(exc)),
"%s raised %s, but the exception "
diff --git a/css_parser_tests/test_codec.py b/css_parser_tests/test_codec.py
index 1771162..d72499c 100644
--- a/css_parser_tests/test_codec.py
+++ b/css_parser_tests/test_codec.py
@@ -117,10 +117,10 @@ def test_detectencoding_unicode(self):
def test_fixencoding(self):
"codec._fixencoding()"
s = '@charset "'
- self.assertTrue(codec._fixencoding(s, "utf-8") is None)
+ self.assertIsNone(codec._fixencoding(s, 'utf-8'))
s = '@charset "x'
- self.assertTrue(codec._fixencoding(s, "utf-8") is None)
+ self.assertIsNone(codec._fixencoding(s, 'utf-8'))
s = '@charset "x'
self.assertEqual(codec._fixencoding(s, "utf-8", True), s)
diff --git a/css_parser_tests/test_csscharsetrule.py b/css_parser_tests/test_csscharsetrule.py
index 5a8a29e..cc5f347 100644
--- a/css_parser_tests/test_csscharsetrule.py
+++ b/css_parser_tests/test_csscharsetrule.py
@@ -107,7 +107,7 @@ def test_cssText(self):
def test_repr(self):
"CSSCharsetRule.__repr__()"
self.r.encoding = 'utf-8'
- self.assertTrue('utf-8' in repr(self.r))
+ self.assertIn('utf-8', repr(self.r))
def test_reprANDstr(self):
"CSSCharsetRule.__repr__(), .__str__()"
@@ -115,11 +115,11 @@ def test_reprANDstr(self):
s = css_parser.css.CSSCharsetRule(encoding=encoding)
- self.assertTrue(encoding in str(s))
+ self.assertIn(encoding, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(encoding == s2.encoding)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(encoding, s2.encoding)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_csscomment.py b/css_parser_tests/test_csscomment.py
index 25bd920..864257d 100644
--- a/css_parser_tests/test_csscomment.py
+++ b/css_parser_tests/test_csscomment.py
@@ -66,8 +66,8 @@ def test_reprANDstr(self):
s = css_parser.css.CSSComment(cssText=text)
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(text == s2.cssText)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(text, s2.cssText)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_cssfontfacerule.py b/css_parser_tests/test_cssfontfacerule.py
index e5112c7..244e27f 100644
--- a/css_parser_tests/test_cssfontfacerule.py
+++ b/css_parser_tests/test_cssfontfacerule.py
@@ -1,244 +1,244 @@
-"""Testcases for css_parser.css.CSSFontFaceRule"""
-
+"""Testcases for css_parser.css.CSSFontFaceRule"""
+
from __future__ import absolute_import
from __future__ import unicode_literals
-import xml.dom
-from . import test_cssrule
-import css_parser
-
-
-class CSSFontFaceRuleTestCase(test_cssrule.CSSRuleTestCase):
-
- def setUp(self):
- super(CSSFontFaceRuleTestCase, self).setUp()
- self.r = css_parser.css.CSSFontFaceRule()
- self.rRO = css_parser.css.CSSFontFaceRule(readonly=True)
- self.r_type = css_parser.css.CSSFontFaceRule.FONT_FACE_RULE
- self.r_typeString = 'FONT_FACE_RULE'
-
- def test_init(self):
- "CSSFontFaceRule.__init__()"
- super(CSSFontFaceRuleTestCase, self).test_init()
-
- r = css_parser.css.CSSFontFaceRule()
- self.assertTrue(isinstance(r.style, css_parser.css.CSSStyleDeclaration))
- self.assertEqual(r, r.style.parentRule)
-
- # until any properties
- self.assertEqual('', r.cssText)
-
- # only possible to set @... similar name
- self.assertRaises(xml.dom.InvalidModificationErr, self.r._setAtkeyword, 'x')
-
- def checkrefs(ff):
- self.assertEqual(ff, ff.style.parentRule)
- for p in ff.style:
- self.assertEqual(ff.style, p.parent)
-
- checkrefs(css_parser.css.CSSFontFaceRule(
- style=css_parser.css.CSSStyleDeclaration('font-family: x')))
-
- r = css_parser.css.CSSFontFaceRule()
- r.cssText = '@font-face { font-family: x }'
- checkrefs(r)
-
- r = css_parser.css.CSSFontFaceRule()
- r.style.setProperty('font-family', 'y')
- checkrefs(r)
-
- r = css_parser.css.CSSFontFaceRule()
- r.style['font-family'] = 'z'
- checkrefs(r)
-
- r = css_parser.css.CSSFontFaceRule()
- r.style.fontFamily = 'a'
- checkrefs(r)
-
- def test_cssText(self):
- "CSSFontFaceRule.cssText"
- tests = {
- '''@font-face {
- font-family: x;
- src: url(../fonts/LateefRegAAT.ttf) format("truetype-aat"), url(../fonts/LateefRegOT.ttf) format("opentype");
- font-style: italic;
- font-weight: 500;
- font-stretch: condensed;
- unicode-range: u+1-ff, u+111
- }''': None,
- '@font-face{font-family: x;}': '@font-face {\n font-family: x\n }',
- '@font-face { font-family: x; }': '@font-face {\n font-family: x\n }',
- '@f\\ont\\-face{font-family : x;}': '@font-face {\n font-family: x\n }',
- # comments
- '@font-face/*1*//*2*/{font-family: x;}':
- '@font-face /*1*/ /*2*/ {\n font-family: x\n }',
- # WS
- '@font-face\n\t\f {\n\t\f font-family:x;\n\t\f }':
- '@font-face {\n font-family: x\n }',
- }
- self.do_equal_r(tests)
- self.do_equal_p(tests)
-
- tests = {
- '@font-face;': xml.dom.SyntaxErr,
- '@font-face }': xml.dom.SyntaxErr,
- }
- self.do_raise_p(tests) # parse
- tests.update({
- '@font-face {': xml.dom.SyntaxErr, # no }
- # trailing
- '@font-face {}1': xml.dom.SyntaxErr,
- '@font-face {}/**/': xml.dom.SyntaxErr,
- '@font-face {} ': xml.dom.SyntaxErr,
- })
- self.do_raise_r(tests) # set cssText
-
- def test_style(self):
- "CSSFontFaceRule.style (and references)"
- r = css_parser.css.CSSFontFaceRule()
- s1 = r.style
- self.assertEqual(r, s1.parentRule)
- self.assertEqual('', s1.cssText)
-
- # set rule.cssText
- r.cssText = '@font-face { font-family: x1 }'
- self.assertNotEqual(r.style, s1)
- self.assertEqual(r, r.style.parentRule)
- self.assertEqual(r.cssText, '@font-face {\n font-family: x1\n }')
- self.assertEqual(r.style.cssText, 'font-family: x1')
- self.assertEqual(s1.cssText, '')
- s2 = r.style
-
- # set invalid rule.cssText
- try:
- r.cssText = '@font-face { $ }'
- except xml.dom.SyntaxErr as e:
- pass
- self.assertEqual(r.style, s2)
- self.assertEqual(r, s2.parentRule)
- self.assertEqual(r.cssText, '@font-face {\n font-family: x1\n }')
- self.assertEqual(s2.cssText, 'font-family: x1')
- self.assertEqual(r.style.cssText, 'font-family: x1')
-
- # set rule.style.cssText
- r.style.cssText = 'font-family: x2'
- self.assertEqual(r.style, s2)
- self.assertEqual(r, s2.parentRule)
- self.assertEqual(r.cssText, '@font-face {\n font-family: x2\n }')
- self.assertEqual(s2.cssText, 'font-family: x2')
- self.assertEqual(r.style.cssText, 'font-family: x2')
-
- # set new style object s2
- sn = css_parser.css.CSSStyleDeclaration('font-family: y1')
- r.style = sn
- self.assertEqual(r.style, sn)
- self.assertEqual(r, sn.parentRule)
- self.assertEqual(r.cssText, '@font-face {\n font-family: y1\n }')
- self.assertEqual(sn.cssText, 'font-family: y1')
- self.assertEqual(r.style.cssText, 'font-family: y1')
- self.assertEqual(s2.cssText, 'font-family: x2') # old
-
- # set s2.cssText
- sn.cssText = 'font-family: y2'
- self.assertEqual(r.style, sn)
- self.assertEqual(r.cssText, '@font-face {\n font-family: y2\n }')
- self.assertEqual(r.style.cssText, 'font-family: y2')
- self.assertEqual(s2.cssText, 'font-family: x2') # old
-
- # set invalid s2.cssText
- try:
- sn.cssText = '$'
- except xml.dom.SyntaxErr as e:
- pass
- self.assertEqual(r.style, sn)
- self.assertEqual(r.style.cssText, 'font-family: y2')
- self.assertEqual(r.cssText, '@font-face {\n font-family: y2\n }')
-
- # set r.style with text
- r.style = 'font-family: z'
- self.assertNotEqual(r.style, sn)
- self.assertEqual(r.cssText, '@font-face {\n font-family: z\n }')
- self.assertEqual(r.style.cssText, 'font-family: z')
- self.assertEqual(sn.cssText, 'font-family: y2')
-
- def test_properties(self):
- "CSSFontFaceRule.style properties"
- r = css_parser.css.CSSFontFaceRule()
- r.style.cssText = '''
- src: url(x)
- '''
- exp = '''@font-face {
- src: url(x)
- }'''
- self.assertEqual(exp, r.cssText)
-
- tests = {
- 'font-family': [ # ('serif', True),
- # ('x', True),
- # ('"x"', True),
- ('x, y', False),
- ('"x", y', False),
- ('x, "y"', False),
- # ('"x", "y"', False)
- ]
- }
- for n, t in tests.items():
- for (v, valid) in t:
- r = css_parser.css.CSSFontFaceRule()
- r.style[n] = v
- self.assertEqual(r.style.getProperty(n).parent, r.style)
- self.assertEqual(r.style.getProperty(n).valid, valid)
-
- def test_incomplete(self):
- "CSSFontFaceRule (incomplete)"
- tests = {
- '@font-face{':
- '', # no } and no content
- '@font-face { ':
- '', # no } and no content
- '@font-face { font-family: x':
- '@font-face {\n font-family: x\n }', # no }
- }
- self.do_equal_p(tests) # parse
-
- def test_InvalidModificationErr(self):
- "CSSFontFaceRule.cssText InvalidModificationErr"
- self._test_InvalidModificationErr('@font-face')
- tests = {
- '@font-fac {}': xml.dom.InvalidModificationErr,
- }
- self.do_raise_r(tests)
-
- def test_valid(self):
- "CSSFontFaceRule.valid"
- r = css_parser.css.CSSFontFaceRule()
- self.assertEqual(False, r.valid)
- N = 'font-family: x; src: local(x);'
- tests = {
- True: (N,
- N + 'font-style: italic; font-weight: bold',
- ),
- False: ('',
- 'font-family: x, y; src: local(x);',
- N + 'font-style: inherit',
- N + 'invalid: 1')
- }
- for valid, testlist in tests.items():
- for test in testlist:
- r.style.cssText = test
- self.assertEqual(valid, r.valid)
-
- def test_reprANDstr(self):
- "CSSFontFaceRule.__repr__(), .__str__()"
- style = 'src: url(x)'
- s = css_parser.css.CSSFontFaceRule(style=style)
-
- self.assertTrue(style in str(s))
-
- s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(style == s2.style.cssText)
-
-
-if __name__ == '__main__':
- import unittest
- unittest.main()
+import xml.dom
+from . import test_cssrule
+import css_parser
+
+
+class CSSFontFaceRuleTestCase(test_cssrule.CSSRuleTestCase):
+
+ def setUp(self):
+ super(CSSFontFaceRuleTestCase, self).setUp()
+ self.r = css_parser.css.CSSFontFaceRule()
+ self.rRO = css_parser.css.CSSFontFaceRule(readonly=True)
+ self.r_type = css_parser.css.CSSFontFaceRule.FONT_FACE_RULE
+ self.r_typeString = 'FONT_FACE_RULE'
+
+ def test_init(self):
+ "CSSFontFaceRule.__init__()"
+ super(CSSFontFaceRuleTestCase, self).test_init()
+
+ r = css_parser.css.CSSFontFaceRule()
+ self.assertIsInstance(r.style, css_parser.css.CSSStyleDeclaration)
+ self.assertEqual(r, r.style.parentRule)
+
+ # until any properties
+ self.assertEqual('', r.cssText)
+
+ # only possible to set @... similar name
+ self.assertRaises(xml.dom.InvalidModificationErr, self.r._setAtkeyword, 'x')
+
+ def checkrefs(ff):
+ self.assertEqual(ff, ff.style.parentRule)
+ for p in ff.style:
+ self.assertEqual(ff.style, p.parent)
+
+ checkrefs(css_parser.css.CSSFontFaceRule(
+ style=css_parser.css.CSSStyleDeclaration('font-family: x')))
+
+ r = css_parser.css.CSSFontFaceRule()
+ r.cssText = '@font-face { font-family: x }'
+ checkrefs(r)
+
+ r = css_parser.css.CSSFontFaceRule()
+ r.style.setProperty('font-family', 'y')
+ checkrefs(r)
+
+ r = css_parser.css.CSSFontFaceRule()
+ r.style['font-family'] = 'z'
+ checkrefs(r)
+
+ r = css_parser.css.CSSFontFaceRule()
+ r.style.fontFamily = 'a'
+ checkrefs(r)
+
+ def test_cssText(self):
+ "CSSFontFaceRule.cssText"
+ tests = {
+ '''@font-face {
+ font-family: x;
+ src: url(../fonts/LateefRegAAT.ttf) format("truetype-aat"), url(../fonts/LateefRegOT.ttf) format("opentype");
+ font-style: italic;
+ font-weight: 500;
+ font-stretch: condensed;
+ unicode-range: u+1-ff, u+111
+ }''': None,
+ '@font-face{font-family: x;}': '@font-face {\n font-family: x\n }',
+ '@font-face { font-family: x; }': '@font-face {\n font-family: x\n }',
+ '@f\\ont\\-face{font-family : x;}': '@font-face {\n font-family: x\n }',
+ # comments
+ '@font-face/*1*//*2*/{font-family: x;}':
+ '@font-face /*1*/ /*2*/ {\n font-family: x\n }',
+ # WS
+ '@font-face\n\t\f {\n\t\f font-family:x;\n\t\f }':
+ '@font-face {\n font-family: x\n }',
+ }
+ self.do_equal_r(tests)
+ self.do_equal_p(tests)
+
+ tests = {
+ '@font-face;': xml.dom.SyntaxErr,
+ '@font-face }': xml.dom.SyntaxErr,
+ }
+ self.do_raise_p(tests) # parse
+ tests.update({
+ '@font-face {': xml.dom.SyntaxErr, # no }
+ # trailing
+ '@font-face {}1': xml.dom.SyntaxErr,
+ '@font-face {}/**/': xml.dom.SyntaxErr,
+ '@font-face {} ': xml.dom.SyntaxErr,
+ })
+ self.do_raise_r(tests) # set cssText
+
+ def test_style(self):
+ "CSSFontFaceRule.style (and references)"
+ r = css_parser.css.CSSFontFaceRule()
+ s1 = r.style
+ self.assertEqual(r, s1.parentRule)
+ self.assertEqual('', s1.cssText)
+
+ # set rule.cssText
+ r.cssText = '@font-face { font-family: x1 }'
+ self.assertNotEqual(r.style, s1)
+ self.assertEqual(r, r.style.parentRule)
+ self.assertEqual(r.cssText, '@font-face {\n font-family: x1\n }')
+ self.assertEqual(r.style.cssText, 'font-family: x1')
+ self.assertEqual(s1.cssText, '')
+ s2 = r.style
+
+ # set invalid rule.cssText
+ try:
+ r.cssText = '@font-face { $ }'
+ except xml.dom.SyntaxErr as e:
+ pass
+ self.assertEqual(r.style, s2)
+ self.assertEqual(r, s2.parentRule)
+ self.assertEqual(r.cssText, '@font-face {\n font-family: x1\n }')
+ self.assertEqual(s2.cssText, 'font-family: x1')
+ self.assertEqual(r.style.cssText, 'font-family: x1')
+
+ # set rule.style.cssText
+ r.style.cssText = 'font-family: x2'
+ self.assertEqual(r.style, s2)
+ self.assertEqual(r, s2.parentRule)
+ self.assertEqual(r.cssText, '@font-face {\n font-family: x2\n }')
+ self.assertEqual(s2.cssText, 'font-family: x2')
+ self.assertEqual(r.style.cssText, 'font-family: x2')
+
+ # set new style object s2
+ sn = css_parser.css.CSSStyleDeclaration('font-family: y1')
+ r.style = sn
+ self.assertEqual(r.style, sn)
+ self.assertEqual(r, sn.parentRule)
+ self.assertEqual(r.cssText, '@font-face {\n font-family: y1\n }')
+ self.assertEqual(sn.cssText, 'font-family: y1')
+ self.assertEqual(r.style.cssText, 'font-family: y1')
+ self.assertEqual(s2.cssText, 'font-family: x2') # old
+
+ # set s2.cssText
+ sn.cssText = 'font-family: y2'
+ self.assertEqual(r.style, sn)
+ self.assertEqual(r.cssText, '@font-face {\n font-family: y2\n }')
+ self.assertEqual(r.style.cssText, 'font-family: y2')
+ self.assertEqual(s2.cssText, 'font-family: x2') # old
+
+ # set invalid s2.cssText
+ try:
+ sn.cssText = '$'
+ except xml.dom.SyntaxErr as e:
+ pass
+ self.assertEqual(r.style, sn)
+ self.assertEqual(r.style.cssText, 'font-family: y2')
+ self.assertEqual(r.cssText, '@font-face {\n font-family: y2\n }')
+
+ # set r.style with text
+ r.style = 'font-family: z'
+ self.assertNotEqual(r.style, sn)
+ self.assertEqual(r.cssText, '@font-face {\n font-family: z\n }')
+ self.assertEqual(r.style.cssText, 'font-family: z')
+ self.assertEqual(sn.cssText, 'font-family: y2')
+
+ def test_properties(self):
+ "CSSFontFaceRule.style properties"
+ r = css_parser.css.CSSFontFaceRule()
+ r.style.cssText = '''
+ src: url(x)
+ '''
+ exp = '''@font-face {
+ src: url(x)
+ }'''
+ self.assertEqual(exp, r.cssText)
+
+ tests = {
+ 'font-family': [ # ('serif', True),
+ # ('x', True),
+ # ('"x"', True),
+ ('x, y', False),
+ ('"x", y', False),
+ ('x, "y"', False),
+ # ('"x", "y"', False)
+ ]
+ }
+ for n, t in tests.items():
+ for (v, valid) in t:
+ r = css_parser.css.CSSFontFaceRule()
+ r.style[n] = v
+ self.assertEqual(r.style.getProperty(n).parent, r.style)
+ self.assertEqual(r.style.getProperty(n).valid, valid)
+
+ def test_incomplete(self):
+ "CSSFontFaceRule (incomplete)"
+ tests = {
+ '@font-face{':
+ '', # no } and no content
+ '@font-face { ':
+ '', # no } and no content
+ '@font-face { font-family: x':
+ '@font-face {\n font-family: x\n }', # no }
+ }
+ self.do_equal_p(tests) # parse
+
+ def test_InvalidModificationErr(self):
+ "CSSFontFaceRule.cssText InvalidModificationErr"
+ self._test_InvalidModificationErr('@font-face')
+ tests = {
+ '@font-fac {}': xml.dom.InvalidModificationErr,
+ }
+ self.do_raise_r(tests)
+
+ def test_valid(self):
+ "CSSFontFaceRule.valid"
+ r = css_parser.css.CSSFontFaceRule()
+ self.assertEqual(False, r.valid)
+ N = 'font-family: x; src: local(x);'
+ tests = {
+ True: (N,
+ N + 'font-style: italic; font-weight: bold',
+ ),
+ False: ('',
+ 'font-family: x, y; src: local(x);',
+ N + 'font-style: inherit',
+ N + 'invalid: 1')
+ }
+ for valid, testlist in tests.items():
+ for test in testlist:
+ r.style.cssText = test
+ self.assertEqual(valid, r.valid)
+
+ def test_reprANDstr(self):
+ "CSSFontFaceRule.__repr__(), .__str__()"
+ style = 'src: url(x)'
+ s = css_parser.css.CSSFontFaceRule(style=style)
+
+ self.assertIn(style, str(s))
+
+ s2 = eval(repr(s))
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(style, s2.style.cssText)
+
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main()
diff --git a/css_parser_tests/test_cssimportrule.py b/css_parser_tests/test_cssimportrule.py
index c475617..ba426f4 100644
--- a/css_parser_tests/test_cssimportrule.py
+++ b/css_parser_tests/test_cssimportrule.py
@@ -428,14 +428,14 @@ def test_reprANDstr(self):
s = css_parser.css.CSSImportRule(href=href, mediaText=mediaText, name=name)
# str(): mediaText nor name are present here
- self.assertTrue(href in str(s))
+ self.assertIn(href, str(s))
# repr()
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(href == s2.href)
- self.assertTrue(mediaText == s2.media.mediaText)
- self.assertTrue(name == s2.name)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(href, s2.href)
+ self.assertEqual(mediaText, s2.media.mediaText)
+ self.assertEqual(name, s2.name)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_cssmediarule.py b/css_parser_tests/test_cssmediarule.py
index 028d880..fd3a007 100644
--- a/css_parser_tests/test_cssmediarule.py
+++ b/css_parser_tests/test_cssmediarule.py
@@ -439,11 +439,11 @@ def test_reprANDstr(self):
s = css_parser.css.CSSMediaRule(mediaText=mediaText)
- self.assertTrue(mediaText in str(s))
+ self.assertIn(mediaText, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(mediaText == s2.media.mediaText)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(mediaText, s2.media.mediaText)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_cssnamespacerule.py b/css_parser_tests/test_cssnamespacerule.py
index 6058134..0a5d20b 100644
--- a/css_parser_tests/test_cssnamespacerule.py
+++ b/css_parser_tests/test_cssnamespacerule.py
@@ -222,13 +222,13 @@ def test_reprANDstr(self):
s = css_parser.css.CSSNamespaceRule(namespaceURI=namespaceURI, prefix=prefix)
- self.assertTrue(namespaceURI in str(s))
- self.assertTrue(prefix in str(s))
+ self.assertIn(namespaceURI, str(s))
+ self.assertIn(prefix, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(namespaceURI == s2.namespaceURI)
- self.assertTrue(prefix == s2.prefix)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(namespaceURI, s2.namespaceURI)
+ self.assertEqual(prefix, s2.prefix)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_csspagerule.py b/css_parser_tests/test_csspagerule.py
index 226cfe5..9a9a98d 100644
--- a/css_parser_tests/test_csspagerule.py
+++ b/css_parser_tests/test_csspagerule.py
@@ -422,11 +422,11 @@ def test_reprANDstr(self):
s = css_parser.css.CSSPageRule(selectorText=sel)
- self.assertTrue(sel in str(s))
+ self.assertIn(sel, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(sel == s2.selectorText)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(sel, s2.selectorText)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_cssstyledeclaration.py b/css_parser_tests/test_cssstyledeclaration.py
index 0f16b11..a37f4c1 100644
--- a/css_parser_tests/test_cssstyledeclaration.py
+++ b/css_parser_tests/test_cssstyledeclaration.py
@@ -64,11 +64,11 @@ def test__contains__(self):
"CSSStyleDeclaration.__contains__(nameOrProperty)"
s = css_parser.css.CSSStyleDeclaration(cssText=r'x: 1;\y: 2')
for test in ('x', r'x', 'y', r'y'):
- self.assertTrue(test in s)
- self.assertTrue(test.upper() in s)
- self.assertTrue(css_parser.css.Property(test, '1') in s)
- self.assertTrue('z' not in s)
- self.assertTrue(css_parser.css.Property('z', '1') not in s)
+ self.assertIn(test, s)
+ self.assertIn(test.upper(), s)
+ self.assertIn(css_parser.css.Property(test, '1'), s)
+ self.assertNotIn('z', s)
+ self.assertNotIn(css_parser.css.Property('z', '1'), s)
def test__iter__item(self):
"CSSStyleDeclaration.__iter__ and .item"
@@ -584,10 +584,10 @@ def test_reprANDstr(self):
"CSSStyleDeclaration.__repr__(), .__str__()"
s = css_parser.css.CSSStyleDeclaration(cssText='a:1;b:2')
- self.assertTrue("2" in str(s)) # length
+ self.assertIn('2', str(s)) # length
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
+ self.assertIsInstance(s2, s.__class__)
def test_valid(self):
"CSSStyleDeclaration.valid"
diff --git a/css_parser_tests/test_cssstylerule.py b/css_parser_tests/test_cssstylerule.py
index db74668..0d00df9 100644
--- a/css_parser_tests/test_cssstylerule.py
+++ b/css_parser_tests/test_cssstylerule.py
@@ -241,11 +241,11 @@ def test_reprANDstr(self):
s = css_parser.css.CSSStyleRule(selectorText=sel)
- self.assertTrue(sel in str(s))
+ self.assertIn(sel, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(sel == s2.selectorText)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(sel, s2.selectorText)
def test_valid(self):
"CSSStyleRule.valid"
diff --git a/css_parser_tests/test_cssstylesheet.py b/css_parser_tests/test_cssstylesheet.py
index fe50ff5..008447e 100644
--- a/css_parser_tests/test_cssstylesheet.py
+++ b/css_parser_tests/test_cssstylesheet.py
@@ -322,9 +322,9 @@ def test_namespaces1(self):
{'': 'default', 'ex2': 'example'})
# __contains__
- self.assertTrue('' in s.namespaces)
- self.assertTrue('ex2' in s.namespaces)
- self.assertFalse('NOTSET' in s.namespaces)
+ self.assertIn('', s.namespaces)
+ self.assertIn('ex2', s.namespaces)
+ self.assertNotIn('NOTSET', s.namespaces)
# __delitem__
self.assertRaises(xml.dom.NoModificationAllowedErr,
s.namespaces.__delitem__, 'ex2')
@@ -450,7 +450,7 @@ def test_namespaces3(self):
self.assertRaises(xml.dom.NamespaceErr, s.add, css)
s.add('@namespace x "html";')
- self.assertTrue(s.namespaces['x'] == 'html')
+ self.assertEqual(s.namespaces['x'], 'html')
r = css_parser.css.CSSStyleRule()
r.cssText = ((css, {'h': 'html'}))
@@ -871,13 +871,13 @@ def test_reprANDstr(self):
s = css_parser.css.CSSStyleSheet(href=href, title=title)
- self.assertTrue(href in str(s))
- self.assertTrue(title in str(s))
+ self.assertIn(href, str(s))
+ self.assertIn(title, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(href == s2.href)
- self.assertTrue(title == s2.title)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(href, s2.href)
+ self.assertEqual(title, s2.title)
def test_valid(self):
cases = [
diff --git a/css_parser_tests/test_cssunknownrule.py b/css_parser_tests/test_cssunknownrule.py
index 9d5c398..3c8e4d0 100644
--- a/css_parser_tests/test_cssunknownrule.py
+++ b/css_parser_tests/test_cssunknownrule.py
@@ -146,7 +146,7 @@ def test_reprANDstr(self):
s = css_parser.css.CSSUnknownRule(cssText='@x;')
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
+ self.assertIsInstance(s2, s.__class__)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_cssutils.py b/css_parser_tests/test_cssutils.py
index cc8e7ff..a60f65c 100644
--- a/css_parser_tests/test_cssutils.py
+++ b/css_parser_tests/test_cssutils.py
@@ -63,7 +63,7 @@ def test_parseString(self):
"css_parser.parseString()"
s = css_parser.parseString(
self.exp, media='handheld, screen', title='from string')
- self.assertTrue(isinstance(s, css_parser.css.CSSStyleSheet))
+ self.assertIsInstance(s, css_parser.css.CSSStyleSheet)
self.assertEqual(None, s.href)
self.assertEqual(self.exp.encode(), s.cssText)
self.assertEqual('utf-8', s.encoding)
@@ -84,7 +84,7 @@ def test_parseString(self):
ir = s.cssRules[0]
self.assertEqual('import/import2.css', ir.href)
irs = ir.styleSheet
- self.assertTrue(isinstance(irs, css_parser.css.CSSStyleSheet))
+ self.assertIsInstance(irs, css_parser.css.CSSStyleSheet)
self.assertEqual(
irs.cssText,
'@import "../import3.css";\n@import "import-impossible.css" print;\n.import2 {\n /* sheets/import2.css */\n background: url(http://example.com/images/example.gif);\n background: url(//example.com/images/example.gif);\n background: url(/images/example.gif);\n background: url(images2/example.gif);\n background: url(./images2/example.gif);\n background: url(../images/example.gif);\n background: url(./../images/example.gif)\n }' # noqa
@@ -103,7 +103,7 @@ def test_parseFile(self):
href = css_parser.helper.path2url(name)
s = css_parser.parseFile(
name, href=href, media='screen', title='from file')
- self.assertTrue(isinstance(s, css_parser.css.CSSStyleSheet))
+ self.assertIsInstance(s, css_parser.css.CSSStyleSheet)
if sys.platform.startswith('java'):
# on Jython only file:
self.assertTrue(s.href.startswith('file:'))
@@ -119,7 +119,7 @@ def test_parseFile(self):
ir = s.cssRules[0]
self.assertEqual('import/import2.css', ir.href)
irs = ir.styleSheet
- self.assertTrue(isinstance(irs, css_parser.css.CSSStyleSheet))
+ self.assertIsInstance(irs, css_parser.css.CSSStyleSheet)
self.assertEqual(
irs.cssText,
'@import "../import3.css";\n@import "import-impossible.css" print;\n.import2 {\n /* sheets/import2.css */\n background: url(http://example.com/images/example.gif);\n background: url(//example.com/images/example.gif);\n background: url(/images/example.gif);\n background: url(images2/example.gif);\n background: url(./images2/example.gif);\n background: url(../images/example.gif);\n background: url(./../images/example.gif)\n }' # noqa
@@ -131,7 +131,7 @@ def test_parseFile(self):
name = basetest.get_sheet_filename('import.css')
s = css_parser.parseFile(name, media='screen', title='from file')
- self.assertTrue(isinstance(s, css_parser.css.CSSStyleSheet))
+ self.assertIsInstance(s, css_parser.css.CSSStyleSheet)
if sys.platform.startswith('java'):
# on Jython only file:
self.assertTrue(s.href.startswith('file:'))
@@ -147,7 +147,7 @@ def test_parseFile(self):
ir = s.cssRules[0]
self.assertEqual('import/import2.css', ir.href)
irs = ir.styleSheet
- self.assertTrue(isinstance(irs, css_parser.css.CSSStyleSheet))
+ self.assertIsInstance(irs, css_parser.css.CSSStyleSheet)
self.assertEqual(
irs.cssText,
'@import "../import3.css";\n@import "import-impossible.css" print;\n.import2 {\n /* sheets/import2.css */\n background: url(http://example.com/images/example.gif);\n background: url(//example.com/images/example.gif);\n background: url(/images/example.gif);\n background: url(images2/example.gif);\n background: url(./images2/example.gif);\n background: url(../images/example.gif);\n background: url(./../images/example.gif)\n }' # noqa
@@ -201,7 +201,7 @@ def test_parseUrl(self):
href = css_parser.helper.path2url(href)
# href = 'http://seewhatever.de/sheets/import.css'
s = css_parser.parseUrl(href, media='tv, print', title='from url')
- self.assertTrue(isinstance(s, css_parser.css.CSSStyleSheet))
+ self.assertIsInstance(s, css_parser.css.CSSStyleSheet)
self.assertEqual(href, s.href)
self.assertEqual(self.exp.encode(), s.cssText)
self.assertEqual('utf-8', s.encoding)
diff --git a/css_parser_tests/test_cssvariablesdeclaration.py b/css_parser_tests/test_cssvariablesdeclaration.py
index abe9255..c33f611 100644
--- a/css_parser_tests/test_cssvariablesdeclaration.py
+++ b/css_parser_tests/test_cssvariablesdeclaration.py
@@ -1,350 +1,350 @@
-"""Testcases for css_parser.css.cssvariablesdelaration.CSSVariablesDeclaration."""
-from __future__ import absolute_import
-from __future__ import unicode_literals
-__version__ = '$Id: test_cssstyledeclaration.py 1869 2009-10-17 19:37:40Z cthedot $'
-
-import xml.dom
-from . import basetest
-import css_parser
-
-
-class CSSVariablesDeclarationTestCase(basetest.BaseTestCase):
-
- def setUp(self):
- self.r = css_parser.css.CSSVariablesDeclaration()
- css_parser.ser.prefs.useDefaults()
-
- def tearDown(self):
- css_parser.ser.prefs.useDefaults()
-
- def test_init(self):
- "CSSVariablesDeclaration.__init__()"
- v = css_parser.css.CSSVariablesDeclaration()
- self.assertEqual('', v.cssText)
- self.assertEqual(0, v.length)
- self.assertEqual(None, v.parentRule)
-
- v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0')
- self.assertEqual('x: 0', v.cssText)
- self.assertEqual('0', v.getVariableValue('x'))
-
- rule = css_parser.css.CSSVariablesRule()
- v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0',
- parentRule=rule)
- self.assertEqual(rule, v.parentRule)
-
- def test__contains__(self):
- "CSSVariablesDeclaration.__contains__(name)"
- v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0; y: 2')
- for test in ('x', 'y'):
- self.assertTrue(test in v)
- self.assertTrue(test.upper() in v)
-
- self.assertTrue('z' not in v)
-
- def test_items(self):
- "CSSVariablesDeclaration[variableName]"
- v = css_parser.css.CSSVariablesDeclaration()
-
- value = '0'
- v['X'] = value
- self.assertEqual(value, v['X'])
- self.assertEqual(value, v.getVariableValue('X'))
- self.assertEqual(value, v['x'])
- self.assertEqual(value, v.getVariableValue('x'))
-
- self.assertEqual('', v['y'])
- self.assertEqual('', v.getVariableValue('y'))
-
- v['z'] = '1'
- self.assertEqual(2, v.length)
-
- items = []
- # unsorted!
- self.assertEqual(sorted(v), ['x', 'z'])
-
- del v['z']
- self.assertEqual(1, v.length)
- self.assertEqual(1, v.length)
-
- self.assertEqual('0', v.removeVariable('x'))
- self.assertEqual('', v.removeVariable('z'))
- self.assertEqual(0, v.length)
-
- v.cssText = 'x:0; y:1'
- keys = []
- # unsorted!
- for i in range(0, v.length):
- keys.append(v.item(i))
- self.assertEqual(sorted(keys), ['x', 'y'])
-
- def test_keys(self):
- "CSSVariablesDeclaration.keys()"
- v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0; Y: 2')
- self.assertEqual(['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)
-
- # TODO: Fix?
-# def test_cssText2(self):
-# "CSSVariablesDeclaration.cssText"
-# # exception
-# tests = {
-# u'top': xml.dom.SyntaxErr,
-# u'top:': xml.dom.SyntaxErr,
-# u'top : ': xml.dom.SyntaxErr,
-# u'top:;': xml.dom.SyntaxErr,
-# u'top 0': xml.dom.SyntaxErr,
-# u'top 0;': xml.dom.SyntaxErr,
-#
-# u':': xml.dom.SyntaxErr,
-# u':0': xml.dom.SyntaxErr,
-# u':0;': xml.dom.SyntaxErr,
-# u':;': xml.dom.SyntaxErr,
-# u': ;': xml.dom.SyntaxErr,
-#
-# u'0': xml.dom.SyntaxErr,
-# u'0;': xml.dom.SyntaxErr,
-#
-# u';': xml.dom.SyntaxErr,
-# }
-# self.do_raise_r(tests)
-
- def test_xVariable(self):
- "CSSVariablesDeclaration.xVariable()"
- v = css_parser.css.CSSVariablesDeclaration()
- # unset
- self.assertEqual('', v.getVariableValue('x'))
- # set
- v.setVariable('x', '0')
- self.assertEqual('0', v.getVariableValue('x'))
- self.assertEqual('0', v.getVariableValue('X'))
- self.assertEqual('x: 0', v.cssText)
- v.setVariable('X', '0')
- self.assertEqual('0', v.getVariableValue('x'))
- self.assertEqual('0', v.getVariableValue('X'))
- self.assertEqual('x: 0', v.cssText)
- # remove
- self.assertEqual('0', v.removeVariable('x'))
- self.assertEqual('', v.removeVariable('x'))
- self.assertEqual('', v.getVariableValue('x'))
- self.assertEqual('', 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 = css_parser.CSSParser(fetcher=fetcher)
- s = p.parseString(css)
-
- # only these in rule of this sheet
- self.assertEqual(s.cssRules[1].variables.length, 8)
- # but all vars in s available!
- self.assertEqual(s.variables.length, 15)
- self.assertEqual(['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
- css_parser.ser.prefs.resolveVariables = False
- self.assertEqual(s.cssText, '''@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)
- }'''.encode())
-
- # test with resolved vars
- css_parser.ser.prefs.resolveVariables = True
- self.assertEqual(s.cssText, '''@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
- }'''.encode())
-
- s = css_parser.resolveImports(s)
- self.assertEqual(s.cssText, '''/* 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
- }'''.encode())
-
- def test_parentRule(self):
- "CSSVariablesDeclaration.parentRule"
- s = css_parser.parseString('@variables { a:1}')
- r = s.cssRules[0]
- d = r.variables
- self.assertEqual(r, d.parentRule)
-
- d2 = css_parser.css.CSSVariablesDeclaration('b: 2')
- r.variables = d2
- self.assertEqual(r, d2.parentRule)
-
- def test_reprANDstr(self):
- "CSSVariablesDeclaration.__repr__(), .__str__()"
- s = css_parser.css.CSSVariablesDeclaration(cssText='a:1;b:2')
-
- self.assertTrue("2" in str(s)) # length
-
- s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
-
-
-if __name__ == '__main__':
- import unittest
- unittest.main()
+"""Testcases for css_parser.css.cssvariablesdelaration.CSSVariablesDeclaration."""
+from __future__ import absolute_import
+from __future__ import unicode_literals
+__version__ = '$Id: test_cssstyledeclaration.py 1869 2009-10-17 19:37:40Z cthedot $'
+
+import xml.dom
+from . import basetest
+import css_parser
+
+
+class CSSVariablesDeclarationTestCase(basetest.BaseTestCase):
+
+ def setUp(self):
+ self.r = css_parser.css.CSSVariablesDeclaration()
+ css_parser.ser.prefs.useDefaults()
+
+ def tearDown(self):
+ css_parser.ser.prefs.useDefaults()
+
+ def test_init(self):
+ "CSSVariablesDeclaration.__init__()"
+ v = css_parser.css.CSSVariablesDeclaration()
+ self.assertEqual('', v.cssText)
+ self.assertEqual(0, v.length)
+ self.assertEqual(None, v.parentRule)
+
+ v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0')
+ self.assertEqual('x: 0', v.cssText)
+ self.assertEqual('0', v.getVariableValue('x'))
+
+ rule = css_parser.css.CSSVariablesRule()
+ v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0',
+ parentRule=rule)
+ self.assertEqual(rule, v.parentRule)
+
+ def test__contains__(self):
+ "CSSVariablesDeclaration.__contains__(name)"
+ v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0; y: 2')
+ for test in ('x', 'y'):
+ self.assertIn(test, v)
+ self.assertIn(test.upper(), v)
+
+ self.assertNotIn('z', v)
+
+ def test_items(self):
+ "CSSVariablesDeclaration[variableName]"
+ v = css_parser.css.CSSVariablesDeclaration()
+
+ value = '0'
+ v['X'] = value
+ self.assertEqual(value, v['X'])
+ self.assertEqual(value, v.getVariableValue('X'))
+ self.assertEqual(value, v['x'])
+ self.assertEqual(value, v.getVariableValue('x'))
+
+ self.assertEqual('', v['y'])
+ self.assertEqual('', v.getVariableValue('y'))
+
+ v['z'] = '1'
+ self.assertEqual(2, v.length)
+
+ items = []
+ # unsorted!
+ self.assertEqual(sorted(v), ['x', 'z'])
+
+ del v['z']
+ self.assertEqual(1, v.length)
+ self.assertEqual(1, v.length)
+
+ self.assertEqual('0', v.removeVariable('x'))
+ self.assertEqual('', v.removeVariable('z'))
+ self.assertEqual(0, v.length)
+
+ v.cssText = 'x:0; y:1'
+ keys = []
+ # unsorted!
+ for i in range(0, v.length):
+ keys.append(v.item(i))
+ self.assertEqual(sorted(keys), ['x', 'y'])
+
+ def test_keys(self):
+ "CSSVariablesDeclaration.keys()"
+ v = css_parser.css.CSSVariablesDeclaration(cssText='x: 0; Y: 2')
+ self.assertEqual(['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)
+
+ # TODO: Fix?
+# def test_cssText2(self):
+# "CSSVariablesDeclaration.cssText"
+# # exception
+# tests = {
+# u'top': xml.dom.SyntaxErr,
+# u'top:': xml.dom.SyntaxErr,
+# u'top : ': xml.dom.SyntaxErr,
+# u'top:;': xml.dom.SyntaxErr,
+# u'top 0': xml.dom.SyntaxErr,
+# u'top 0;': xml.dom.SyntaxErr,
+#
+# u':': xml.dom.SyntaxErr,
+# u':0': xml.dom.SyntaxErr,
+# u':0;': xml.dom.SyntaxErr,
+# u':;': xml.dom.SyntaxErr,
+# u': ;': xml.dom.SyntaxErr,
+#
+# u'0': xml.dom.SyntaxErr,
+# u'0;': xml.dom.SyntaxErr,
+#
+# u';': xml.dom.SyntaxErr,
+# }
+# self.do_raise_r(tests)
+
+ def test_xVariable(self):
+ "CSSVariablesDeclaration.xVariable()"
+ v = css_parser.css.CSSVariablesDeclaration()
+ # unset
+ self.assertEqual('', v.getVariableValue('x'))
+ # set
+ v.setVariable('x', '0')
+ self.assertEqual('0', v.getVariableValue('x'))
+ self.assertEqual('0', v.getVariableValue('X'))
+ self.assertEqual('x: 0', v.cssText)
+ v.setVariable('X', '0')
+ self.assertEqual('0', v.getVariableValue('x'))
+ self.assertEqual('0', v.getVariableValue('X'))
+ self.assertEqual('x: 0', v.cssText)
+ # remove
+ self.assertEqual('0', v.removeVariable('x'))
+ self.assertEqual('', v.removeVariable('x'))
+ self.assertEqual('', v.getVariableValue('x'))
+ self.assertEqual('', 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 = css_parser.CSSParser(fetcher=fetcher)
+ s = p.parseString(css)
+
+ # only these in rule of this sheet
+ self.assertEqual(s.cssRules[1].variables.length, 8)
+ # but all vars in s available!
+ self.assertEqual(s.variables.length, 15)
+ self.assertEqual(['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
+ css_parser.ser.prefs.resolveVariables = False
+ self.assertEqual(s.cssText, '''@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)
+ }'''.encode())
+
+ # test with resolved vars
+ css_parser.ser.prefs.resolveVariables = True
+ self.assertEqual(s.cssText, '''@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
+ }'''.encode())
+
+ s = css_parser.resolveImports(s)
+ self.assertEqual(s.cssText, '''/* 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
+ }'''.encode())
+
+ def test_parentRule(self):
+ "CSSVariablesDeclaration.parentRule"
+ s = css_parser.parseString('@variables { a:1}')
+ r = s.cssRules[0]
+ d = r.variables
+ self.assertEqual(r, d.parentRule)
+
+ d2 = css_parser.css.CSSVariablesDeclaration('b: 2')
+ r.variables = d2
+ self.assertEqual(r, d2.parentRule)
+
+ def test_reprANDstr(self):
+ "CSSVariablesDeclaration.__repr__(), .__str__()"
+ s = css_parser.css.CSSVariablesDeclaration(cssText='a:1;b:2')
+
+ self.assertIn('2', str(s)) # length
+
+ s2 = eval(repr(s))
+ self.assertIsInstance(s2, s.__class__)
+
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main()
diff --git a/css_parser_tests/test_cssvariablesrule.py b/css_parser_tests/test_cssvariablesrule.py
index 5390cb1..ed50436 100644
--- a/css_parser_tests/test_cssvariablesrule.py
+++ b/css_parser_tests/test_cssvariablesrule.py
@@ -1,157 +1,157 @@
-"""Testcases for css_parser.css.CSSPageRule"""
+"""Testcases for css_parser.css.CSSPageRule"""
from __future__ import absolute_import
from __future__ import unicode_literals
-__version__ = '$Id: test_csspagerule.py 1869 2009-10-17 19:37:40Z cthedot $'
-
-import xml.dom
-from . import test_cssrule
-import css_parser
-
-
-class CSSVariablesRuleTestCase(test_cssrule.CSSRuleTestCase):
-
- def setUp(self):
- super(CSSVariablesRuleTestCase, self).setUp()
- self.r = css_parser.css.CSSVariablesRule()
- self.rRO = css_parser.css.CSSVariablesRule(readonly=True)
- self.r_type = css_parser.css.CSSPageRule.VARIABLES_RULE
- self.r_typeString = 'VARIABLES_RULE'
-
- css_parser.ser.prefs.resolveVariables = False
-
- def test_init(self):
- "CSSVariablesRule.__init__()"
- super(CSSVariablesRuleTestCase, self).test_init()
-
- r = css_parser.css.CSSVariablesRule()
- self.assertEqual(css_parser.css.CSSVariablesDeclaration,
- type(r.variables))
- self.assertEqual(r, r.variables.parentRule)
-
- # until any variables
- self.assertEqual('', r.cssText)
-
- # only possible to set @... similar name
- self.assertRaises(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 = css_parser.css.CSSVariablesRule()
- self.assertRaises(AttributeError, r.__getattribute__, 'media')
- self.assertRaises(AttributeError, r.__setattr__, 'media', '?')
-
- def test_variables(self):
- "CSSVariablesRule.variables"
- r = css_parser.css.CSSVariablesRule(
- variables=css_parser.css.CSSVariablesDeclaration('x: 1'))
- self.assertEqual(r, r.variables.parentRule)
-
- # cssText
- r = css_parser.css.CSSVariablesRule()
- r.cssText = '@variables { x: 1 }'
- vars1 = r.variables
- self.assertEqual(r, r.variables.parentRule)
- self.assertEqual(vars1, r.variables)
- self.assertEqual(r.variables.cssText, 'x: 1')
- self.assertEqual(r.cssText, '@variables {\n x: 1\n }')
-
- r.cssText = '@variables {y:2}'
- self.assertEqual(r, r.variables.parentRule)
- self.assertNotEqual(vars1, r.variables)
- self.assertEqual(r.variables.cssText, 'y: 2')
- self.assertEqual(r.cssText, '@variables {\n y: 2\n }')
-
- vars2 = r.variables
-
- # fail
- try:
- r.cssText = '@variables {$:1}'
- except xml.dom.DOMException as e:
- pass
-
- self.assertEqual(vars2, r.variables)
- self.assertEqual(r.variables.cssText, 'y: 2')
- self.assertEqual(r.cssText, '@variables {\n y: 2\n }')
-
- # var decl
- vars3 = css_parser.css.CSSVariablesDeclaration('z: 3')
- r.variables = vars3
-
- self.assertEqual(r, r.variables.parentRule)
- self.assertEqual(vars3, r.variables)
- self.assertEqual(r.variables.cssText, 'z: 3')
- self.assertEqual(r.cssText, '@variables {\n z: 3\n }')
-
- # string
- r.variables = 'a: x'
- self.assertNotEqual(vars3, r.variables)
- self.assertEqual(r, r.variables.parentRule)
- self.assertEqual(r.variables.cssText, 'a: x')
- self.assertEqual(r.cssText, '@variables {\n a: x\n }')
- vars4 = r.variables
-
- # string fail
- try:
- r.variables = '$: x'
- except xml.dom.DOMException as e:
- pass
- self.assertEqual(vars4, r.variables)
- self.assertEqual(r, r.variables.parentRule)
- self.assertEqual(r.variables.cssText, 'a: x')
- self.assertEqual(r.cssText, '@variables {\n a: x\n }')
-
- def test_reprANDstr(self):
- "CSSVariablesRule.__repr__(), .__str__()"
- r = css_parser.css.CSSVariablesRule()
- r.cssText = '@variables { xxx: 1 }'
- self.assertTrue('xxx' in str(r))
-
- r2 = eval(repr(r))
- self.assertTrue(isinstance(r2, r.__class__))
- self.assertTrue(r.cssText == r2.cssText)
-
-
-if __name__ == '__main__':
- import unittest
- unittest.main()
+__version__ = '$Id: test_csspagerule.py 1869 2009-10-17 19:37:40Z cthedot $'
+
+import xml.dom
+from . import test_cssrule
+import css_parser
+
+
+class CSSVariablesRuleTestCase(test_cssrule.CSSRuleTestCase):
+
+ def setUp(self):
+ super(CSSVariablesRuleTestCase, self).setUp()
+ self.r = css_parser.css.CSSVariablesRule()
+ self.rRO = css_parser.css.CSSVariablesRule(readonly=True)
+ self.r_type = css_parser.css.CSSPageRule.VARIABLES_RULE
+ self.r_typeString = 'VARIABLES_RULE'
+
+ css_parser.ser.prefs.resolveVariables = False
+
+ def test_init(self):
+ "CSSVariablesRule.__init__()"
+ super(CSSVariablesRuleTestCase, self).test_init()
+
+ r = css_parser.css.CSSVariablesRule()
+ self.assertEqual(css_parser.css.CSSVariablesDeclaration,
+ type(r.variables))
+ self.assertEqual(r, r.variables.parentRule)
+
+ # until any variables
+ self.assertEqual('', r.cssText)
+
+ # only possible to set @... similar name
+ self.assertRaises(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 = css_parser.css.CSSVariablesRule()
+ self.assertRaises(AttributeError, r.__getattribute__, 'media')
+ self.assertRaises(AttributeError, r.__setattr__, 'media', '?')
+
+ def test_variables(self):
+ "CSSVariablesRule.variables"
+ r = css_parser.css.CSSVariablesRule(
+ variables=css_parser.css.CSSVariablesDeclaration('x: 1'))
+ self.assertEqual(r, r.variables.parentRule)
+
+ # cssText
+ r = css_parser.css.CSSVariablesRule()
+ r.cssText = '@variables { x: 1 }'
+ vars1 = r.variables
+ self.assertEqual(r, r.variables.parentRule)
+ self.assertEqual(vars1, r.variables)
+ self.assertEqual(r.variables.cssText, 'x: 1')
+ self.assertEqual(r.cssText, '@variables {\n x: 1\n }')
+
+ r.cssText = '@variables {y:2}'
+ self.assertEqual(r, r.variables.parentRule)
+ self.assertNotEqual(vars1, r.variables)
+ self.assertEqual(r.variables.cssText, 'y: 2')
+ self.assertEqual(r.cssText, '@variables {\n y: 2\n }')
+
+ vars2 = r.variables
+
+ # fail
+ try:
+ r.cssText = '@variables {$:1}'
+ except xml.dom.DOMException as e:
+ pass
+
+ self.assertEqual(vars2, r.variables)
+ self.assertEqual(r.variables.cssText, 'y: 2')
+ self.assertEqual(r.cssText, '@variables {\n y: 2\n }')
+
+ # var decl
+ vars3 = css_parser.css.CSSVariablesDeclaration('z: 3')
+ r.variables = vars3
+
+ self.assertEqual(r, r.variables.parentRule)
+ self.assertEqual(vars3, r.variables)
+ self.assertEqual(r.variables.cssText, 'z: 3')
+ self.assertEqual(r.cssText, '@variables {\n z: 3\n }')
+
+ # string
+ r.variables = 'a: x'
+ self.assertNotEqual(vars3, r.variables)
+ self.assertEqual(r, r.variables.parentRule)
+ self.assertEqual(r.variables.cssText, 'a: x')
+ self.assertEqual(r.cssText, '@variables {\n a: x\n }')
+ vars4 = r.variables
+
+ # string fail
+ try:
+ r.variables = '$: x'
+ except xml.dom.DOMException as e:
+ pass
+ self.assertEqual(vars4, r.variables)
+ self.assertEqual(r, r.variables.parentRule)
+ self.assertEqual(r.variables.cssText, 'a: x')
+ self.assertEqual(r.cssText, '@variables {\n a: x\n }')
+
+ def test_reprANDstr(self):
+ "CSSVariablesRule.__repr__(), .__str__()"
+ r = css_parser.css.CSSVariablesRule()
+ r.cssText = '@variables { xxx: 1 }'
+ self.assertIn('xxx', str(r))
+
+ r2 = eval(repr(r))
+ self.assertIsInstance(r2, r.__class__)
+ self.assertEqual(r.cssText, r2.cssText)
+
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main()
diff --git a/css_parser_tests/test_domimplementation.py b/css_parser_tests/test_domimplementation.py
index ec248bf..857857e 100644
--- a/css_parser_tests/test_domimplementation.py
+++ b/css_parser_tests/test_domimplementation.py
@@ -1,47 +1,47 @@
-"""Testcases for css_parser.css.DOMImplementation"""
-
+"""Testcases for css_parser.css.DOMImplementation"""
+
from __future__ import absolute_import
from __future__ import unicode_literals
-import xml.dom
-import xml.dom.minidom
-import unittest
-import css_parser
-
-
-class DOMImplementationTestCase(unittest.TestCase):
-
- def setUp(self):
- self.domimpl = css_parser.DOMImplementationCSS()
-
- def test_createCSSStyleSheet(self):
- "DOMImplementationCSS.createCSSStyleSheet()"
- title, media = 'Test Title', css_parser.stylesheets.MediaList('all')
- sheet = self.domimpl.createCSSStyleSheet(title, media)
- self.assertEqual(True, isinstance(sheet, css_parser.css.CSSStyleSheet))
- self.assertEqual(title, sheet.title)
- self.assertEqual(media, sheet.media)
-
- def test_createDocument(self):
- "DOMImplementationCSS.createDocument()"
- doc = self.domimpl.createDocument(None, None, None)
- self.assertTrue(isinstance(doc, xml.dom.minidom.Document))
-
- def test_createDocumentType(self):
- "DOMImplementationCSS.createDocumentType()"
- doctype = self.domimpl.createDocumentType('foo', 'bar', 'raboof')
- self.assertTrue(isinstance(doctype, xml.dom.minidom.DocumentType))
-
- def test_hasFeature(self):
- "DOMImplementationCSS.hasFeature()"
- tests = [
- ('css', '1.0'),
- ('css', '2.0'),
- ('stylesheets', '1.0'),
- ('stylesheets', '2.0')
- ]
- for name, version in tests:
- self.assertEqual(True, self.domimpl.hasFeature(name, version))
-
-
-if __name__ == '__main__':
- unittest.main()
+import xml.dom
+import xml.dom.minidom
+import unittest
+import css_parser
+
+
+class DOMImplementationTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.domimpl = css_parser.DOMImplementationCSS()
+
+ def test_createCSSStyleSheet(self):
+ "DOMImplementationCSS.createCSSStyleSheet()"
+ title, media = 'Test Title', css_parser.stylesheets.MediaList('all')
+ sheet = self.domimpl.createCSSStyleSheet(title, media)
+ self.assertEqual(True, isinstance(sheet, css_parser.css.CSSStyleSheet))
+ self.assertEqual(title, sheet.title)
+ self.assertEqual(media, sheet.media)
+
+ def test_createDocument(self):
+ "DOMImplementationCSS.createDocument()"
+ doc = self.domimpl.createDocument(None, None, None)
+ self.assertIsInstance(doc, xml.dom.minidom.Document)
+
+ def test_createDocumentType(self):
+ "DOMImplementationCSS.createDocumentType()"
+ doctype = self.domimpl.createDocumentType('foo', 'bar', 'raboof')
+ self.assertIsInstance(doctype, xml.dom.minidom.DocumentType)
+
+ def test_hasFeature(self):
+ "DOMImplementationCSS.hasFeature()"
+ tests = [
+ ('css', '1.0'),
+ ('css', '2.0'),
+ ('stylesheets', '1.0'),
+ ('stylesheets', '2.0')
+ ]
+ for name, version in tests:
+ self.assertEqual(True, self.domimpl.hasFeature(name, version))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/css_parser_tests/test_marginrule.py b/css_parser_tests/test_marginrule.py
index 1fcda78..03b3c2c 100644
--- a/css_parser_tests/test_marginrule.py
+++ b/css_parser_tests/test_marginrule.py
@@ -88,11 +88,11 @@ def test_reprANDstr(self):
s = css_parser.css.MarginRule(margin=margin, style='left: 0')
- self.assertTrue(margin in str(s))
+ self.assertIn(margin, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(margin == s2.margin)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(margin, s2.margin)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_medialist.py b/css_parser_tests/test_medialist.py
index e5b24f1..6d99edf 100644
--- a/css_parser_tests/test_medialist.py
+++ b/css_parser_tests/test_medialist.py
@@ -193,11 +193,11 @@ def test_reprANDstr(self):
s = css_parser.stylesheets.MediaList(mediaText=mediaText)
- self.assertTrue(mediaText in str(s))
+ self.assertIn(mediaText, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(mediaText == s2.mediaText)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(mediaText, s2.mediaText)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_mediaquery.py b/css_parser_tests/test_mediaquery.py
index b8582cc..91742f8 100644
--- a/css_parser_tests/test_mediaquery.py
+++ b/css_parser_tests/test_mediaquery.py
@@ -1,108 +1,108 @@
-# -*- coding: iso-8859-1 -*-
-"""Testcases for css_parser.stylesheets.MediaQuery"""
-
-from __future__ import absolute_import
-from __future__ import unicode_literals
-import xml.dom
-import logging
-from . import basetest
-import css_parser.stylesheets
-
-
-class MediaQueryTestCase(basetest.BaseTestCase):
-
- def setUp(self):
- super(MediaQueryTestCase, self).setUp()
- self.r = css_parser.stylesheets.MediaQuery()
-
- def test_mediaText(self):
- "MediaQuery.mediaText"
- tests = {
- 'all': None,
- 'braille': None,
- 'embossed': None,
- 'handheld': None,
- 'print': None,
- 'projection': None,
- 'screen': None,
- 'speech': None,
- 'tty': None,
- 'tv': None,
- 'ALL': None,
- 'a\\ll': None,
- 'not tv': None,
- 'n\\ot t\\v': None,
- 'only tv': None,
- '\\only \\tv': None,
- 'PRINT': None,
- 'NOT PRINT': None,
- 'ONLY PRINT': None,
- 'tv and (color)': None,
- 'not tv and (color)': None,
- 'only tv and (color)': None,
- 'print and(color)': 'print and (color)',
- 'aural': None # xml.dom.SyntaxErr in cssutils
- }
- self.do_equal_r(tests, att='mediaText')
-
- tests = {
- '': xml.dom.SyntaxErr,
- 'two values': xml.dom.SyntaxErr,
- 'or even three': xml.dom.SyntaxErr,
- '3d': xml.dom.SyntaxErr, # a dimension
- }
- self.do_raise_r(tests, att='_setMediaText')
-
- def test_mediaType(self):
- "MediaQuery.mediaType"
- mq = css_parser.stylesheets.MediaQuery()
-
- self.assertEqual('', mq.mediaText)
-
- for mt in css_parser.stylesheets.MediaQuery.MEDIA_TYPES:
- mq.mediaType = mt
- self.assertEqual(mq.mediaType, mt)
- mq.mediaType = mt.upper()
- self.assertEqual(mq.mediaType, mt.upper())
-
- mt = '3D-UNKOwn-MEDIAtype0123'
- #mq.mediaType = mt
- self.assertEqual(self.captureLog(logging.WARNING, mq._setMediaType, mt),
- 'WARNING MediaQuery: Unknown media type: "3D-UNKOwn-MEDIAtype0123".\n')
- #self.assertRaises(xml.dom.InvalidCharacterErr, mq._setMediaType, mt)
-
- def test_comments(self):
- "MediaQuery.mediaText comments"
- tests = {
- 'all': None,
- 'print': None,
- 'not print': None,
- 'only print': None,
- 'print and (color)': None,
- 'print and (color) and (width)': None,
- 'print and (color: 2)': None,
- 'print and (min-width: 100px)': None,
- 'print and (min-width: 100px) and (color: red)': None,
- 'not print and (min-width: 100px)': None,
- 'only print and (min-width: 100px)': None,
- '/*1*/ tv /*2*/': None,
- '/*0*/ only /*1*/ tv /*2*/': None,
- '/*0* /not /*1*/ tv /*2*/': None,
- '/*x*/ only /*x*/ print /*x*/ and /*x*/ (/*x*/ min-width /*x*/: /*x*/ 100px /*x*/)': None,
- 'print and/*1*/(color)': 'print and /*1*/ (color)'
- }
- self.do_equal_r(tests, att='mediaText')
-
- def test_reprANDstr(self):
- "MediaQuery.__repr__(), .__str__()"
- mediaText = 'tv and (color)'
- s = css_parser.stylesheets.MediaQuery(mediaText=mediaText)
- self.assertTrue(mediaText in str(s))
- s2 = eval(repr(s))
- self.assertEqual(mediaText, s2.mediaText)
- self.assertTrue(isinstance(s2, s.__class__))
-
-
-if __name__ == '__main__':
- import unittest
- unittest.main()
+# -*- coding: iso-8859-1 -*-
+"""Testcases for css_parser.stylesheets.MediaQuery"""
+
+from __future__ import absolute_import
+from __future__ import unicode_literals
+import xml.dom
+import logging
+from . import basetest
+import css_parser.stylesheets
+
+
+class MediaQueryTestCase(basetest.BaseTestCase):
+
+ def setUp(self):
+ super(MediaQueryTestCase, self).setUp()
+ self.r = css_parser.stylesheets.MediaQuery()
+
+ def test_mediaText(self):
+ "MediaQuery.mediaText"
+ tests = {
+ 'all': None,
+ 'braille': None,
+ 'embossed': None,
+ 'handheld': None,
+ 'print': None,
+ 'projection': None,
+ 'screen': None,
+ 'speech': None,
+ 'tty': None,
+ 'tv': None,
+ 'ALL': None,
+ 'a\\ll': None,
+ 'not tv': None,
+ 'n\\ot t\\v': None,
+ 'only tv': None,
+ '\\only \\tv': None,
+ 'PRINT': None,
+ 'NOT PRINT': None,
+ 'ONLY PRINT': None,
+ 'tv and (color)': None,
+ 'not tv and (color)': None,
+ 'only tv and (color)': None,
+ 'print and(color)': 'print and (color)',
+ 'aural': None # xml.dom.SyntaxErr in cssutils
+ }
+ self.do_equal_r(tests, att='mediaText')
+
+ tests = {
+ '': xml.dom.SyntaxErr,
+ 'two values': xml.dom.SyntaxErr,
+ 'or even three': xml.dom.SyntaxErr,
+ '3d': xml.dom.SyntaxErr, # a dimension
+ }
+ self.do_raise_r(tests, att='_setMediaText')
+
+ def test_mediaType(self):
+ "MediaQuery.mediaType"
+ mq = css_parser.stylesheets.MediaQuery()
+
+ self.assertEqual('', mq.mediaText)
+
+ for mt in css_parser.stylesheets.MediaQuery.MEDIA_TYPES:
+ mq.mediaType = mt
+ self.assertEqual(mq.mediaType, mt)
+ mq.mediaType = mt.upper()
+ self.assertEqual(mq.mediaType, mt.upper())
+
+ mt = '3D-UNKOwn-MEDIAtype0123'
+ #mq.mediaType = mt
+ self.assertEqual(self.captureLog(logging.WARNING, mq._setMediaType, mt),
+ 'WARNING MediaQuery: Unknown media type: "3D-UNKOwn-MEDIAtype0123".\n')
+ #self.assertRaises(xml.dom.InvalidCharacterErr, mq._setMediaType, mt)
+
+ def test_comments(self):
+ "MediaQuery.mediaText comments"
+ tests = {
+ 'all': None,
+ 'print': None,
+ 'not print': None,
+ 'only print': None,
+ 'print and (color)': None,
+ 'print and (color) and (width)': None,
+ 'print and (color: 2)': None,
+ 'print and (min-width: 100px)': None,
+ 'print and (min-width: 100px) and (color: red)': None,
+ 'not print and (min-width: 100px)': None,
+ 'only print and (min-width: 100px)': None,
+ '/*1*/ tv /*2*/': None,
+ '/*0*/ only /*1*/ tv /*2*/': None,
+ '/*0* /not /*1*/ tv /*2*/': None,
+ '/*x*/ only /*x*/ print /*x*/ and /*x*/ (/*x*/ min-width /*x*/: /*x*/ 100px /*x*/)': None,
+ 'print and/*1*/(color)': 'print and /*1*/ (color)'
+ }
+ self.do_equal_r(tests, att='mediaText')
+
+ def test_reprANDstr(self):
+ "MediaQuery.__repr__(), .__str__()"
+ mediaText = 'tv and (color)'
+ s = css_parser.stylesheets.MediaQuery(mediaText=mediaText)
+ self.assertIn(mediaText, str(s))
+ s2 = eval(repr(s))
+ self.assertEqual(mediaText, s2.mediaText)
+ self.assertIsInstance(s2, s.__class__)
+
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main()
diff --git a/css_parser_tests/test_property.py b/css_parser_tests/test_property.py
index 561a5eb..ad99103 100644
--- a/css_parser_tests/test_property.py
+++ b/css_parser_tests/test_property.py
@@ -259,15 +259,15 @@ def test_reprANDstr(self):
s = css_parser.css.property.Property(name=name, value=value, priority=priority)
- self.assertTrue(name in str(s))
- self.assertTrue(value in str(s))
- self.assertTrue(priority in str(s))
+ self.assertIn(name, str(s))
+ self.assertIn(value, str(s))
+ self.assertIn(priority, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(name == s2.name)
- self.assertTrue(value == s2.value)
- self.assertTrue(priority == s2.priority)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(name, s2.name)
+ self.assertEqual(value, s2.value)
+ self.assertEqual(priority, s2.priority)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_selector.py b/css_parser_tests/test_selector.py
index f2746d8..70a9559 100644
--- a/css_parser_tests/test_selector.py
+++ b/css_parser_tests/test_selector.py
@@ -486,11 +486,11 @@ def test_reprANDstr(self):
s = css_parser.css.Selector(selectorText=sel)
- self.assertTrue(sel in str(s))
+ self.assertIn(sel, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(sel == s2.selectorText)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(sel, s2.selectorText)
if __name__ == '__main__':
diff --git a/css_parser_tests/test_selectorlist.py b/css_parser_tests/test_selectorlist.py
index 54c945a..4bb256c 100644
--- a/css_parser_tests/test_selectorlist.py
+++ b/css_parser_tests/test_selectorlist.py
@@ -139,10 +139,10 @@ def test_reprANDstr(self):
s = css_parser.css.SelectorList(selectorText=sel)
- self.assertTrue(sel[0] in str(s))
+ self.assertIn(sel[0], str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
+ self.assertIsInstance(s2, s.__class__)
self.assertEqual(sel[0], s2.selectorText)
diff --git a/css_parser_tests/test_value.py b/css_parser_tests/test_value.py
index 2dcd912..252cfcf 100644
--- a/css_parser_tests/test_value.py
+++ b/css_parser_tests/test_value.py
@@ -358,10 +358,10 @@ def test_incomplete(self):
def test_readonly(self):
"PropertyValue._readonly"
v = css_parser.css.PropertyValue(cssText='inherit')
- self.assertTrue(False is v._readonly)
+ self.assertIs(False, v._readonly)
v = css_parser.css.PropertyValue(cssText='inherit', readonly=True)
- self.assertTrue(True is v._readonly)
+ self.assertIs(True, v._readonly)
self.assertTrue('inherit', v.cssText)
self.assertRaises(xml.dom.NoModificationAllowedErr, v._setCssText, 'x')
self.assertTrue('inherit', v.cssText)
@@ -372,11 +372,11 @@ def test_reprANDstr(self):
s = css_parser.css.PropertyValue(cssText=cssText)
- self.assertTrue(cssText in str(s))
+ self.assertIn(cssText, str(s))
s2 = eval(repr(s))
- self.assertTrue(isinstance(s2, s.__class__))
- self.assertTrue(cssText == s2.cssText)
+ self.assertIsInstance(s2, s.__class__)
+ self.assertEqual(cssText, s2.cssText)
class ValueTestCase(basetest.BaseTestCase):
@@ -384,9 +384,9 @@ class ValueTestCase(basetest.BaseTestCase):
def test_init(self):
"Value.__init__()"
v = css_parser.css.Value()
- self.assertTrue('' == v.cssText)
- self.assertTrue('' == v.value)
- self.assertTrue(None is v.type)
+ self.assertEqual('', v.cssText)
+ self.assertEqual('', v.value)
+ self.assertIs(None, v.type)
def test_cssText(self):
"Value.cssText"
@@ -425,8 +425,8 @@ def test_init(self):
"ColorValue.__init__()"
v = css_parser.css.ColorValue()
self.assertEqual(v.COLOR_VALUE, v.type)
- self.assertTrue('' == v.cssText)
- self.assertTrue('' == v.value)
+ self.assertEqual('', v.cssText)
+ self.assertEqual('', v.value)
self.assertEqual('transparent', v.name)
self.assertEqual(None, v.colorType)
@@ -532,19 +532,19 @@ class URIValueTestCase(basetest.BaseTestCase):
def test_init(self):
"URIValue.__init__()"
v = css_parser.css.URIValue()
- self.assertTrue('url()' == v.cssText)
- self.assertTrue('' == v.value)
- self.assertTrue('' == v.uri)
- self.assertTrue(v.URI is v.type)
+ self.assertEqual('url()', v.cssText)
+ self.assertEqual('', v.value)
+ self.assertEqual('', v.uri)
+ self.assertIs(v.URI, v.type)
v.uri = '1'
- self.assertTrue('1' == v.value)
- self.assertTrue('1' == v.uri)
+ self.assertEqual('1', v.value)
+ self.assertEqual('1', v.uri)
self.assertEqual('url(1)', v.cssText)
v.value = '2'
- self.assertTrue('2' == v.value)
- self.assertTrue('2' == v.uri)
+ self.assertEqual('2', v.value)
+ self.assertEqual('2', v.uri)
self.assertEqual('url(2)', v.cssText)
def test_absoluteUri(self):
@@ -601,10 +601,10 @@ class DimensionValueTestCase(basetest.BaseTestCase):
def test_init(self):
"DimensionValue.__init__()"
v = css_parser.css.DimensionValue()
- self.assertTrue('' == v.cssText)
- self.assertTrue('' == v.value)
- self.assertTrue(None is v.type)
- self.assertTrue(None is v.dimension)
+ self.assertEqual('', v.cssText)
+ self.assertEqual('', v.value)
+ self.assertIs(None, v.type)
+ self.assertIs(None, v.dimension)
def test_cssText(self):
"DimensionValue.cssText"
@@ -696,8 +696,8 @@ def test_init(self):
v = css_parser.css.CSSVariable()
self.assertEqual('', v.cssText)
self.assertEqual('VARIABLE', v.type)
- self.assertTrue(None is v.name)
- self.assertTrue(None is v.value)
+ self.assertIs(None, v.name)
+ self.assertIs(None, v.value)
def test_cssText(self):
"CSSVariable.cssText"