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
11
19
21 "CSSNamespaceRule.__init__()"
22
23
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
70
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
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
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
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,
140 u'@namespace p;': xml.dom.SyntaxErr,
141 u'@namespace "u" p;': xml.dom.SyntaxErr,
142 }
143 self.do_raise_p(tests)
144 tests.update({
145 u'@namespace p url(x)': xml.dom.SyntaxErr,
146 u'@namespace p "u"': xml.dom.SyntaxErr,
147 })
148
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
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
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
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)
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)
193
208
209
210 if __name__ == '__main__':
211 import unittest
212 unittest.main()
213