%PDF- %PDF-
Direktori : /usr/lib/python3/dist-packages/cssutils/tests/ |
Current File : //usr/lib/python3/dist-packages/cssutils/tests/test_cssrule.py |
"""Testcases for cssutils.css.CSSRule""" import xml.dom from . import basetest import cssutils.css class CSSRuleTestCase(basetest.BaseTestCase): """ base class for all CSSRule subclass tests overwrite setUp with the appriopriate values, will be used in test_init and test_readonly overwrite all tests as you please, use:: super(CLASSNAME, self).test_TESTNAME(params) to use the base class tests too """ def setUp(self): """ OVERWRITE! self.r is the rule self.rRO the readonly rule relf.r_type the type as defined in CSSRule """ super(CSSRuleTestCase, self).setUp() self.sheet = cssutils.css.CSSStyleSheet() self.r = cssutils.css.CSSRule() self.rRO = cssutils.css.CSSRule() self.rRO._readonly = True # must be set here! self.r_type = cssutils.css.CSSRule.UNKNOWN_RULE self.r_typeString = 'UNKNOWN_RULE' def tearDown(self): cssutils.ser.prefs.useDefaults() def test_init(self): "CSSRule.type and init" self.assertEqual(self.r_type, self.r.type) self.assertEqual(self.r_typeString, self.r.typeString) self.assertEqual('', self.r.cssText) self.assertEqual(None, self.r.parentRule) self.assertEqual(None, self.r.parentStyleSheet) def test_parentRule_parentStyleSheet_type(self): "CSSRule.parentRule .parentStyleSheet .type" rules = [ ('@charset "ascii";', cssutils.css.CSSRule.CHARSET_RULE), ('@import "x";', cssutils.css.CSSRule.IMPORT_RULE), ('@namespace "x";', cssutils.css.CSSRule.NAMESPACE_RULE), ('@font-face { src: url(x) }', cssutils.css.CSSRule.FONT_FACE_RULE), ('''@media all { @x; a { color: red } /* c */ }''', cssutils.css.CSSRule.MEDIA_RULE), ('@page :left { color: red }', cssutils.css.CSSRule.PAGE_RULE), ('@unknown;', cssutils.css.CSSRule.UNKNOWN_RULE), ('b { left: 0 }', cssutils.css.CSSRule.STYLE_RULE), ('/*1*/', cssutils.css.CSSRule.COMMENT) # must be last for add test ] mrt = [cssutils.css.CSSRule.UNKNOWN_RULE, cssutils.css.CSSRule.STYLE_RULE, cssutils.css.CSSRule.COMMENT] def test(s): for i, rule in enumerate(s): self.assertEqual(rule.parentRule, None) self.assertEqual(rule.parentStyleSheet, s) #self.assertEqual(rule.type, rules[i][1]) if rule.MEDIA_RULE == rule.type: for j, r in enumerate(rule): self.assertEqual(r.parentRule, rule) self.assertEqual(r.parentStyleSheet, s) self.assertEqual(r.type, mrt[j]) if i == 0: # check encoding self.assertEqual('ascii', s.encoding) elif i == 2: # check namespaces self.assertEqual('x', s.namespaces['']) cssText = ''.join(r[0] for r in rules) # parsing s = cssutils.parseString(cssText) test(s) # sheet.cssText s = cssutils.css.CSSStyleSheet() s.cssText = cssText test(s) # sheet.add CSS s = cssutils.css.CSSStyleSheet() for css, type_ in rules: s.add(css) test(s) # sheet.insertRule CSS s = cssutils.css.CSSStyleSheet() for css, type_ in rules: s.insertRule(css) test(s) types = [cssutils.css.CSSCharsetRule, cssutils.css.CSSImportRule, cssutils.css.CSSNamespaceRule, cssutils.css.CSSFontFaceRule, cssutils.css.CSSMediaRule, cssutils.css.CSSPageRule, cssutils.css.CSSUnknownRule, cssutils.css.CSSStyleRule, cssutils.css.CSSComment] # sheet.add CSSRule s = cssutils.css.CSSStyleSheet() for i, (css, type_) in enumerate(rules): rule = types[i]() rule.cssText = css s.add(rule) test(s) # sheet.insertRule CSSRule s = cssutils.css.CSSStyleSheet() for i, (css, type_) in enumerate(rules): rule = types[i]() rule.cssText = css s.insertRule(rule) test(s) def test_CSSMediaRule_cssRules_parentRule_parentStyleSheet_type(self): "CSSMediaRule.cssRules.parentRule .parentStyleSheet .type" rules = [ ('b { left: 0 }', cssutils.css.CSSRule.STYLE_RULE), ('/*1*/', cssutils.css.CSSRule.COMMENT), ('@x;', cssutils.css.CSSRule.UNKNOWN_RULE) ] def test(s): mr = s.cssRules[0] for i, rule in enumerate(mr): self.assertEqual(rule.parentRule, mr) self.assertEqual(rule.parentStyleSheet, s) self.assertEqual(rule.parentStyleSheet, mr.parentStyleSheet) self.assertEqual(rule.type, rules[i][1]) cssText = '@media all { %s }' % ''.join(r[0] for r in rules) # parsing s = cssutils.parseString(cssText) test(s) # sheet.cssText s = cssutils.css.CSSStyleSheet() s.cssText = cssText test(s) def getMediaSheet(): s = cssutils.css.CSSStyleSheet() s.cssText = '@media all {}' return s, s.cssRules[0] # sheet.add CSS s, mr = getMediaSheet() for css, type_ in rules: mr.add(css) test(s) # sheet.insertRule CSS s, mr = getMediaSheet() for css, type_ in rules: mr.insertRule(css) test(s) types = [cssutils.css.CSSStyleRule, cssutils.css.CSSComment, cssutils.css.CSSUnknownRule] # sheet.add CSSRule s, mr = getMediaSheet() for i, (css, type_) in enumerate(rules): rule = types[i]() rule.cssText = css mr.add(rule) test(s) # sheet.insertRule CSSRule s, mr = getMediaSheet() for i, (css, type_) in enumerate(rules): rule = types[i]() rule.cssText = css mr.insertRule(rule) test(s) def test_readonly(self): "CSSRule readonly" self.rRO = cssutils.css.CSSRule() self.rRO._readonly = True self.assertEqual(True, self.rRO._readonly) self.assertEqual('', self.rRO.cssText) self.assertRaises(xml.dom.NoModificationAllowedErr, self.rRO._setCssText, 'x') self.assertEqual('', self.rRO.cssText) def _test_InvalidModificationErr(self, startwithspace): """ CSSRule.cssText InvalidModificationErr called by subclasses startwithspace for test starting with this not the test but " test" is tested e.g. " @page {}" exception is the style rule test """ tests = ('', '/* comment */', '@charset "utf-8";', '@font-face {}', '@import url(x);', '@media all {}', '@namespace "x";' '@page {}', '@unknown;', '@variables;', # TODO: #u'@top-left {}' 'a style rule {}' ) for test in tests: if startwithspace in ('a style rule', ) and test in ( '/* comment */', 'a style rule {}'): continue if test.startswith(startwithspace): test = ' %s' % test self.assertRaises(xml.dom.InvalidModificationErr, self.r._setCssText, test) # check that type is readonly self.assertRaises(AttributeError, self.r.__setattr__, 'parentRule', None) self.assertRaises(AttributeError, self.r.__setattr__, 'parentStyleSheet', None) self.assertRaises(AttributeError, self.r.__setattr__, 'type', 1) self.assertRaises(AttributeError, self.r.__setattr__, 'typeString', "") if __name__ == '__main__': import unittest unittest.main()