%PDF- %PDF-
| Direktori : /lib/python3/dist-packages/cssutils/tests/ |
| Current File : //lib/python3/dist-packages/cssutils/tests/test_cssnamespacerule.py |
"""Testcases for cssutils.css.CSSImportRule"""
import xml.dom
from . import test_cssrule
import cssutils
class CSSNamespaceRuleTestCase(test_cssrule.CSSRuleTestCase):
def setUp(self):
super(CSSNamespaceRuleTestCase, self).setUp()
self.r = cssutils.css.CSSNamespaceRule(namespaceURI='x')
#self.rRO = cssutils.css.CSSNamespaceRule(namespaceURI='x',
# readonly=True)
self.r_type = cssutils.css.CSSRule.NAMESPACE_RULE
self.r_typeString = 'NAMESPACE_RULE'
def test_init(self):
"CSSNamespaceRule.__init__()"
# cannot use here as self.r and self rRO and not useful
#super(CSSNamespaceRuleTestCase, self).test_init()
tests = [
(None, None),
('', ''),
(None, ''),
('', None),
('', 'no-uri'),
]
for uri, p in tests:
r = cssutils.css.CSSNamespaceRule(namespaceURI=uri, prefix=p)
self.assertEqual(None, r.namespaceURI)
self.assertEqual('', r.prefix)
self.assertEqual('', r.cssText)
self.assertEqual(None, r.parentStyleSheet)
self.assertEqual(None, r.parentRule)
r = cssutils.css.CSSNamespaceRule(namespaceURI='example')
self.assertEqual('example', r.namespaceURI)
self.assertEqual('', r.prefix)
self.assertEqual('@namespace "example";', r.cssText)
self.sheet.add(r)
self.assertEqual(self.sheet, r.parentStyleSheet)
r = cssutils.css.CSSNamespaceRule(namespaceURI='example', prefix='p')
self.assertEqual('example', r.namespaceURI)
self.assertEqual('p', r.prefix)
self.assertEqual('@namespace p "example";', r.cssText)
css = '@namespace p "u";'
r = cssutils.css.CSSNamespaceRule(cssText=css)
self.assertEqual(r.cssText, css)
# only possible to set @... similar name
self.assertRaises(xml.dom.InvalidModificationErr, self.r._setAtkeyword, 'x')
def test_cssText(self):
"CSSNamespaceRule.cssText"
# cssText may only be set initalially
r = cssutils.css.CSSNamespaceRule()
css = '@namespace p "u";'
r.cssText = css
self.assertEqual(r.cssText, css)
self.assertRaises(xml.dom.NoModificationAllowedErr, r._setCssText,
'@namespace p "OTHER";')
tests = {
'@namespace "";': None,
'@namespace "u";': None,
'@namespace p "u";': None,
'@namespace empty "";': None,
'@namespace p "p";': None,
"@namespace p 'u';": '@namespace p "u";',
'@\\namespace p "u";': '@namespace p "u";',
'@NAMESPACE p "u";': '@namespace p "u";',
'@namespace p "u" ;': '@namespace p "u";',
'@namespace p"u";': '@namespace p "u";',
'@namespace p "u";': '@namespace p "u";',
'@namespace/*1*/"u"/*2*/;': '@namespace /*1*/ "u" /*2*/;',
'@namespace/*1*/p/*2*/"u"/*3*/;': '@namespace /*1*/ p /*2*/ "u" /*3*/;',
'@namespace p url(u);': '@namespace p "u";',
'@namespace p url(\'u\');': '@namespace p "u";',
'@namespace p url(\"u\");': '@namespace p "u";',
'@namespace p url( \"u\" );': '@namespace p "u";',
# comments
'@namespace/*1*//*2*/p/*3*//*4*/url(u)/*5*//*6*/;':
'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
'@namespace/*1*//*2*/p/*3*//*4*/"u"/*5*//*6*/;':
'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
'@namespace/*1*//*2*/p/*3*//*4*/url("u")/*5*//*6*/;':
'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
'@namespace/*1*//*2*/url(u)/*5*//*6*/;':
'@namespace /*1*/ /*2*/ "u" /*5*/ /*6*/;',
# WS
'@namespace\n\r\t\f p\n\r\t\f url(\n\r\t\f u\n\r\t\f )\n\r\t\f ;':
'@namespace p "u";',
'@namespace\n\r\t\f p\n\r\t\f url(\n\r\t\f "u"\n\r\t\f )\n\r\t\f ;':
'@namespace p "u";',
'@namespace\n\r\t\f p\n\r\t\f "str"\n\r\t\f ;':
'@namespace p "str";',
'@namespace\n\r\t\f "str"\n\r\t\f ;':
'@namespace "str";'
}
self.do_equal_p(tests)
#self.do_equal_r(tests) # cannot use here as always new r is needed
for test, expected in list(tests.items()):
r = cssutils.css.CSSNamespaceRule(cssText=test)
if expected is None:
expected = test
self.assertEqual(expected, r.cssText)
tests = {
'@namespace;': xml.dom.SyntaxErr, # nothing
'@namespace p;': xml.dom.SyntaxErr, # no namespaceURI
'@namespace "u" p;': xml.dom.SyntaxErr, # order
'@namespace "u";EXTRA': xml.dom.SyntaxErr,
'@namespace p "u";EXTRA': xml.dom.SyntaxErr,
}
self.do_raise_p(tests) # parse
tests.update({
'@namespace p url(x)': xml.dom.SyntaxErr, # missing ;
'@namespace p "u"': xml.dom.SyntaxErr, # missing ;
# trailing
'@namespace "u"; ': xml.dom.SyntaxErr,
'@namespace "u";/**/': xml.dom.SyntaxErr,
'@namespace p "u"; ': xml.dom.SyntaxErr,
'@namespace p "u";/**/': xml.dom.SyntaxErr,
})
def _do(test):
r = cssutils.css.CSSNamespaceRule(cssText=test)
for test, expected in list(tests.items()):
self.assertRaises(expected, _do, test)
def test_namespaceURI(self):
"CSSNamespaceRule.namespaceURI"
# set only initially
r = cssutils.css.CSSNamespaceRule(namespaceURI='x')
self.assertEqual('x' , r.namespaceURI)
self.assertEqual('@namespace "x";', r.cssText)
r = cssutils.css.CSSNamespaceRule(namespaceURI='"')
self.assertEqual('@namespace "\\"";', r.cssText)
self.assertRaises(xml.dom.NoModificationAllowedErr,
r._setNamespaceURI, 'x')
self.assertRaises(xml.dom.NoModificationAllowedErr,
r._setCssText, '@namespace "u";')
r._replaceNamespaceURI('http://example.com/new')
self.assertEqual('http://example.com/new' , r.namespaceURI)
def test_prefix(self):
"CSSNamespaceRule.prefix"
r = cssutils.css.CSSNamespaceRule(namespaceURI='u')
r.prefix = 'p'
self.assertEqual('p' , r.prefix)
self.assertEqual('@namespace p "u";', r.cssText)
r = cssutils.css.CSSNamespaceRule(cssText='@namespace x "u";')
r.prefix = 'p'
self.assertEqual('p' , r.prefix)
self.assertEqual('@namespace p "u";', r.cssText)
valid = (None, '')
for prefix in valid:
r.prefix = prefix
self.assertEqual(r.prefix, '')
self.assertEqual('@namespace "u";', r.cssText)
valid = ('a', '_x', 'a1', 'a-1')
for prefix in valid:
r.prefix = prefix
self.assertEqual(r.prefix, prefix)
self.assertEqual('@namespace %s "u";' % prefix, r.cssText)
invalid = ('1', ' x', ' ', ',')
for prefix in invalid:
self.assertRaises(xml.dom.SyntaxErr, r._setPrefix, prefix)
def test_InvalidModificationErr(self):
"CSSNamespaceRule.cssText InvalidModificationErr"
self._test_InvalidModificationErr('@namespace')
def test_incomplete(self):
"CSSNamespaceRule (incomplete)"
tests = {
'@namespace "uri': '@namespace "uri";',
"@namespace url(x": '@namespace "x";',
"@namespace url('x": '@namespace "x";',
'@namespace url("x;': '@namespace "x;";',
'@namespace url( "x;': '@namespace "x;";',
'@namespace url("x ': '@namespace "x ";',
'@namespace url(x ': '@namespace "x";',
}
self.do_equal_p(tests) # parse
tests = {
'@namespace "uri': xml.dom.SyntaxErr,
"@namespace url(x": xml.dom.SyntaxErr,
"@namespace url('x": xml.dom.SyntaxErr,
'@namespace url("x;': xml.dom.SyntaxErr,
'@namespace url( "x;': xml.dom.SyntaxErr,
'@namespace url("x ': xml.dom.SyntaxErr,
'@namespace url(x ': xml.dom.SyntaxErr
}
self.do_raise_r(tests) # set cssText
def test_reprANDstr(self):
"CSSNamespaceRule.__repr__(), .__str__()"
namespaceURI='http://example.com'
prefix='prefix'
s = cssutils.css.CSSNamespaceRule(namespaceURI=namespaceURI, prefix=prefix)
self.assertTrue(namespaceURI in str(s))
self.assertTrue(prefix in str(s))
s2 = eval(repr(s))
self.assertTrue(isinstance(s2, s.__class__))
self.assertTrue(namespaceURI == s2.namespaceURI)
self.assertTrue(prefix == s2.prefix)
if __name__ == '__main__':
import unittest
unittest.main()