Package cssutils :: Package tests :: Module test_cssnamespacerule
[hide private]
[frames] | no frames]

Source Code for Module cssutils.tests.test_cssnamespacerule

  1  """testcases for cssutils.css.CSSImportRule""" 
  2  __author__ = '$LastChangedBy: cthedot $' 
  3  __date__ = '$LastChangedDate: 2008-02-02 23:53:54 +0100 (Sa, 02 Feb 2008) $' 
  4  __version__ = '$LastChangedRevision: 975 $' 
  5   
  6  import xml.dom 
  7  import test_cssrule 
  8  import cssutils 
  9   
10 -class CSSNamespaceRuleTestCase(test_cssrule.CSSRuleTestCase):
11
12 - def setUp(self):
13 super(CSSNamespaceRuleTestCase, self).setUp() 14 self.r = cssutils.css.CSSNamespaceRule(namespaceURI='x') 15 #self.rRO = cssutils.css.CSSNamespaceRule(namespaceURI='x', 16 # readonly=True) 17 self.r_type = cssutils.css.CSSRule.NAMESPACE_RULE 18 self.r_typeString = 'NAMESPACE_RULE'
19
20 - def test_init(self):
21 "CSSNamespaceRule.__init__()" 22 # cannot use here as self.r and self rRO and not useful 23 #super(CSSNamespaceRuleTestCase, self).test_init() 24 tests = [ 25 (None, None), 26 ('', ''), 27 (None, u''), 28 (u'', None), 29 (u'', u'no-uri'), 30 ] 31 for uri, p in tests: 32 r = cssutils.css.CSSNamespaceRule(namespaceURI=uri, prefix=p) 33 self.assertEqual(None, r.namespaceURI) 34 self.assertEqual(u'', r.prefix) 35 self.assertEqual(u'', r.cssText) 36 self.assertEqual(None, r.parentStyleSheet) 37 self.sheet.add(r) 38 self.assertEqual(self.sheet, r.parentStyleSheet) 39 self.assertEqual(None, r.parentRule) 40 41 r = cssutils.css.CSSNamespaceRule(namespaceURI='example') 42 self.assertEqual('example', r.namespaceURI) 43 self.assertEqual(u'', r.prefix) 44 self.assertEqual(u'@namespace "example";', r.cssText) 45 46 r = cssutils.css.CSSNamespaceRule(namespaceURI='example', prefix='p') 47 self.assertEqual('example', r.namespaceURI) 48 self.assertEqual(u'p', r.prefix) 49 self.assertEqual(u'@namespace p "example";', r.cssText) 50 51 css = u'@namespace p "u";' 52 r = cssutils.css.CSSNamespaceRule(cssText=css) 53 self.assertEqual(r.cssText, css)
54
55 - def test_namespaceURI(self):
56 "CSSNamespaceRule.namespaceURI" 57 # set only initially 58 r = cssutils.css.CSSNamespaceRule(namespaceURI='x') 59 self.assertEqual('x' , r.namespaceURI) 60 self.assertEqual(u'@namespace "x";', r.cssText) 61 62 r = cssutils.css.CSSNamespaceRule(namespaceURI='"') 63 self.assertEqual(u'@namespace "\\"";', r.cssText) 64 65 self.assertRaises(xml.dom.NoModificationAllowedErr, 66 r._setNamespaceURI, 'x') 67 68 self.assertRaises(xml.dom.NoModificationAllowedErr, 69 r._setCssText, '@namespace "u";')
70
71 - def test_prefix(self):
72 "CSSNamespaceRule.prefix" 73 r = cssutils.css.CSSNamespaceRule(namespaceURI='u') 74 r.prefix = 'p' 75 self.assertEqual('p' , r.prefix) 76 self.assertEqual(u'@namespace p "u";', r.cssText) 77 78 r = cssutils.css.CSSNamespaceRule(cssText='@namespace x "u";') 79 r.prefix = 'p' 80 self.assertEqual('p' , r.prefix) 81 self.assertEqual(u'@namespace p "u";', r.cssText) 82 83 valid = (None, u'') 84 for prefix in valid: 85 r.prefix = prefix 86 self.assertEqual(r.prefix, u'') 87 self.assertEqual(u'@namespace "u";', r.cssText) 88 89 valid = ('a', '_x', 'a1', 'a-1') 90 for prefix in valid: 91 r.prefix = prefix 92 self.assertEqual(r.prefix, prefix) 93 self.assertEqual(u'@namespace %s "u";' % prefix, r.cssText) 94 95 invalid = ('1', ' x', ' ', ',') 96 for prefix in invalid: 97 self.assertRaises(xml.dom.SyntaxErr, r._setPrefix, prefix)
98
99 - def test_cssText(self):
100 "CSSNamespaceRule.cssText" 101 # cssText may only be set initalially 102 r = cssutils.css.CSSNamespaceRule() 103 css = u'@namespace p "u";' 104 r.cssText = css 105 self.assertEqual(r.cssText, css) 106 self.assertRaises(xml.dom.NoModificationAllowedErr, r._setCssText, 107 u'@namespace p "OTHER";') 108 109 tests = { 110 u'@namespace "u";': None, 111 u'@namespace p "u";': None, 112 u'@namespace p "p";': None, 113 u"@namespace p 'u';": u'@namespace p "u";', 114 115 u'@\\namespace p "u";': u'@namespace p "u";', 116 u'@NAMESPACE p "u";': u'@namespace p "u";', 117 118 u'@namespace p "u" ;': u'@namespace p "u";', 119 u'@namespace p"u";': u'@namespace p "u";', 120 u'@namespace p "u";': u'@namespace p "u";', 121 122 u'@namespace/*1*/p/*2*/"u"/*3*/;': u'@namespace/*1*/ p/*2*/ "u"/*3*/;', 123 124 # deprecated 125 u'@namespace p url(u);': u'@namespace p "u";', 126 u'@namespace p url(\'u\');': u'@namespace p "u";', 127 u'@namespace p url(\"u\");': u'@namespace p "u";', 128 u'@namespace p url( \"u\" );': u'@namespace p "u";', 129 } 130 self.do_equal_p(tests) 131 #self.do_equal_r(tests) # cannot use here as always new r is needed 132 for test, expected in tests.items(): 133 r = cssutils.css.CSSNamespaceRule(cssText=test) 134 if expected is None: 135 expected = test 136 self.assertEqual(expected, r.cssText) 137 138 tests = { 139 u'@namespace;': xml.dom.SyntaxErr, # nothing 140 u'@namespace p;': xml.dom.SyntaxErr, # no namespaceURI 141 u'@namespace "u" p;': xml.dom.SyntaxErr, # order 142 } 143 self.do_raise_p(tests) # parse 144 tests.update({ 145 u'@namespace p url(x)': xml.dom.SyntaxErr, # missing ; 146 u'@namespace p "u"': xml.dom.SyntaxErr, # missing ; 147 }) 148 #self.do_raise_r(tests) # cannot use here as always new r is needed 149 def _do(test): 150 r = cssutils.css.CSSNamespaceRule(cssText=test)
151 for test, expected in tests.items(): 152 self.assertRaises(expected, _do, test)
153
154 - def test_InvalidModificationErr(self):
155 "CSSNamespaceRule.cssText InvalidModificationErr" 156 tests = (u'/* comment */', 157 u'@charset "utf-8";', 158 u'@font-face {}', 159 u'@import url(x);', 160 u'@media all {}', 161 u'@page {}', 162 u'@unknown;', 163 u'a style rule {}' 164 # TODO: u'' 165 ) 166 def _do(test): 167 r = cssutils.css.CSSNamespaceRule(cssText=test)
168 for test in tests: 169 self.assertRaises(xml.dom.InvalidModificationErr, _do, test) 170
171 - def test_incomplete(self):
172 "CSSNamespaceRule (incomplete)" 173 tests = { 174 u'@namespace "uri': u'@namespace "uri";', 175 u"@namespace url(x": u'@namespace "x";', 176 u"@namespace url('x": u'@namespace "x";', 177 u'@namespace url("x;': u'@namespace "x;";', 178 u'@namespace url( "x;': u'@namespace "x;";', 179 u'@namespace url("x ': u'@namespace "x ";', 180 u'@namespace url(x ': u'@namespace "x";', 181 } 182 self.do_equal_p(tests) # parse 183 tests = { 184 u'@namespace "uri': xml.dom.SyntaxErr, 185 u"@namespace url(x": xml.dom.SyntaxErr, 186 u"@namespace url('x": xml.dom.SyntaxErr, 187 u'@namespace url("x;': xml.dom.SyntaxErr, 188 u'@namespace url( "x;': xml.dom.SyntaxErr, 189 u'@namespace url("x ': xml.dom.SyntaxErr, 190 u'@namespace url(x ': xml.dom.SyntaxErr 191 } 192 self.do_raise_r(tests) # set cssText
193
194 - def test_reprANDstr(self):
195 "CSSNamespaceRule.__repr__(), .__str__()" 196 namespaceURI=u'http://example.com' 197 prefix=u'prefix' 198 199 s = cssutils.css.CSSNamespaceRule(namespaceURI=namespaceURI, prefix=prefix) 200 201 self.assert_(namespaceURI in str(s)) 202 self.assert_(prefix in str(s)) 203 204 s2 = eval(repr(s)) 205 self.assert_(isinstance(s2, s.__class__)) 206 self.assert_(namespaceURI == s2.namespaceURI) 207 self.assert_(prefix == s2.prefix)
208 209 210 if __name__ == '__main__': 211 import unittest 212 unittest.main() 213