From b1136b5c52b4ad548bdd338654ee6ae1370e1f0d Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade 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.)') 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 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"