1 """Testcases for cssutils.css.CSSImportRule"""
2 __version__ = '$Id: test_cssnamespacerule.py 1175 2008-03-20 17:43:26Z cthedot $'
3
4 import xml.dom
5 import test_cssrule
6 import cssutils
7
9
17
19 "CSSNamespaceRule.__init__()"
20
21
22 tests = [
23 (None, None),
24 ('', ''),
25 (None, u''),
26 (u'', None),
27 (u'', u'no-uri'),
28 ]
29 for uri, p in tests:
30 r = cssutils.css.CSSNamespaceRule(namespaceURI=uri, prefix=p)
31 self.assertEqual(None, r.namespaceURI)
32 self.assertEqual(u'', r.prefix)
33 self.assertEqual(u'', r.cssText)
34 self.assertEqual(None, r.parentStyleSheet)
35 self.assertEqual(None, r.parentRule)
36
37 r = cssutils.css.CSSNamespaceRule(namespaceURI='example')
38 self.assertEqual('example', r.namespaceURI)
39 self.assertEqual(u'', r.prefix)
40 self.assertEqual(u'@namespace "example";', r.cssText)
41 self.sheet.add(r)
42 self.assertEqual(self.sheet, r.parentStyleSheet)
43
44 r = cssutils.css.CSSNamespaceRule(namespaceURI='example', prefix='p')
45 self.assertEqual('example', r.namespaceURI)
46 self.assertEqual(u'p', r.prefix)
47 self.assertEqual(u'@namespace p "example";', r.cssText)
48
49 css = u'@namespace p "u";'
50 r = cssutils.css.CSSNamespaceRule(cssText=css)
51 self.assertEqual(r.cssText, css)
52
53
54 self.assertRaises(xml.dom.InvalidModificationErr, self.r._setAtkeyword, 'x')
55
56 - def test_cssText(self):
57 "CSSNamespaceRule.cssText"
58
59 r = cssutils.css.CSSNamespaceRule()
60 css = u'@namespace p "u";'
61 r.cssText = css
62 self.assertEqual(r.cssText, css)
63 self.assertRaises(xml.dom.NoModificationAllowedErr, r._setCssText,
64 u'@namespace p "OTHER";')
65
66 tests = {
67 u'@namespace "";': None,
68 u'@namespace "u";': None,
69 u'@namespace p "u";': None,
70 u'@namespace empty "";': None,
71 u'@namespacep"u";': u'@namespace p "u";',
72 u'@namespaceempty"";': u'@namespace empty "";',
73 u'@namespacep"u" ;': u'@namespace p "u";',
74
75 u'@namespace p "p";': None,
76 u"@namespace p 'u';": u'@namespace p "u";',
77
78 u'@\\namespace p "u";': u'@namespace p "u";',
79 u'@NAMESPACE p "u";': u'@namespace p "u";',
80
81 u'@namespace p "u" ;': u'@namespace p "u";',
82 u'@namespace p"u";': u'@namespace p "u";',
83 u'@namespace p "u";': u'@namespace p "u";',
84
85 u'@namespace/*1*/"u"/*2*/;': u'@namespace /*1*/ "u" /*2*/;',
86 u'@namespace/*1*/p/*2*/"u"/*3*/;': u'@namespace /*1*/ p /*2*/ "u" /*3*/;',
87
88 u'@namespace p url(u);': u'@namespace p "u";',
89 u'@namespace p url(\'u\');': u'@namespace p "u";',
90 u'@namespace p url(\"u\");': u'@namespace p "u";',
91 u'@namespace p url( \"u\" );': u'@namespace p "u";',
92
93
94 u'@namespace/*1*//*2*/p/*3*//*4*/url(u)/*5*//*6*/;':
95 u'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
96 u'@namespace/*1*//*2*/p/*3*//*4*/"u"/*5*//*6*/;':
97 u'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
98 u'@namespace/*1*//*2*/p/*3*//*4*/url("u")/*5*//*6*/;':
99 u'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
100
101 u'@namespace/*1*//*2*/url(u)/*5*//*6*/;':
102 u'@namespace /*1*/ /*2*/ "u" /*5*/ /*6*/;',
103
104
105 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 ;':
106 u'@namespace p "u";',
107 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 ;':
108 u'@namespace p "u";',
109 u'@namespace\n\r\t\f p\n\r\t\f "str"\n\r\t\f ;':
110 u'@namespace p "str";',
111 u'@namespace\n\r\t\f "str"\n\r\t\f ;':
112 u'@namespace "str";',
113 }
114 self.do_equal_p(tests)
115
116 for test, expected in tests.items():
117 r = cssutils.css.CSSNamespaceRule(cssText=test)
118 if expected is None:
119 expected = test
120 self.assertEqual(expected, r.cssText)
121
122 tests = {
123 u'@namespace;': xml.dom.SyntaxErr,
124 u'@namespace p;': xml.dom.SyntaxErr,
125 u'@namespace "u" p;': xml.dom.SyntaxErr,
126 u'@namespace "u";EXTRA': xml.dom.SyntaxErr,
127 u'@namespace p "u";EXTRA': xml.dom.SyntaxErr,
128 }
129 self.do_raise_p(tests)
130 tests.update({
131 u'@namespace p url(x)': xml.dom.SyntaxErr,
132 u'@namespace p "u"': xml.dom.SyntaxErr,
133
134 u'@namespace "u"; ': xml.dom.SyntaxErr,
135 u'@namespace "u";/**/': xml.dom.SyntaxErr,
136 u'@namespace p "u"; ': xml.dom.SyntaxErr,
137 u'@namespace p "u";/**/': xml.dom.SyntaxErr,
138 })
139 def _do(test):
140 r = cssutils.css.CSSNamespaceRule(cssText=test)
141 for test, expected in tests.items():
142 self.assertRaises(expected, _do, test)
143
159
161 "CSSNamespaceRule.prefix"
162 r = cssutils.css.CSSNamespaceRule(namespaceURI='u')
163 r.prefix = 'p'
164 self.assertEqual('p' , r.prefix)
165 self.assertEqual(u'@namespace p "u";', r.cssText)
166
167 r = cssutils.css.CSSNamespaceRule(cssText='@namespace x "u";')
168 r.prefix = 'p'
169 self.assertEqual('p' , r.prefix)
170 self.assertEqual(u'@namespace p "u";', r.cssText)
171
172 valid = (None, u'')
173 for prefix in valid:
174 r.prefix = prefix
175 self.assertEqual(r.prefix, u'')
176 self.assertEqual(u'@namespace "u";', r.cssText)
177
178 valid = ('a', '_x', 'a1', 'a-1')
179 for prefix in valid:
180 r.prefix = prefix
181 self.assertEqual(r.prefix, prefix)
182 self.assertEqual(u'@namespace %s "u";' % prefix, r.cssText)
183
184 invalid = ('1', ' x', ' ', ',')
185 for prefix in invalid:
186 self.assertRaises(xml.dom.SyntaxErr, r._setPrefix, prefix)
187
191
193 "CSSNamespaceRule (incomplete)"
194 tests = {
195 u'@namespace "uri': u'@namespace "uri";',
196 u"@namespace url(x": u'@namespace "x";',
197 u"@namespace url('x": u'@namespace "x";',
198 u'@namespace url("x;': u'@namespace "x;";',
199 u'@namespace url( "x;': u'@namespace "x;";',
200 u'@namespace url("x ': u'@namespace "x ";',
201 u'@namespace url(x ': u'@namespace "x";',
202 }
203 self.do_equal_p(tests)
204 tests = {
205 u'@namespace "uri': xml.dom.SyntaxErr,
206 u"@namespace url(x": xml.dom.SyntaxErr,
207 u"@namespace url('x": xml.dom.SyntaxErr,
208 u'@namespace url("x;': xml.dom.SyntaxErr,
209 u'@namespace url( "x;': xml.dom.SyntaxErr,
210 u'@namespace url("x ': xml.dom.SyntaxErr,
211 u'@namespace url(x ': xml.dom.SyntaxErr
212 }
213 self.do_raise_r(tests)
214
229
230
231 if __name__ == '__main__':
232 import unittest
233 unittest.main()
234