1 """
2 tests for css.CSSStyleSheet
3 """
4 __author__ = '$LastChangedBy: doerwalter $'
5 __date__ = '$LastChangedDate: 2007-08-02 22:58:23 +0200 (Do, 02 Aug 2007) $'
6 __version__ = '0.9.2a2, $LastChangedRevision: 160 $'
7
8 import xml.dom
9
10 import basetest
11
12 import cssutils.css
13
14
16
24
25
27 "CSSStyleSheet.__init__()"
28 self.assertEqual(False, self.s._readonly)
29 self.assertEqual([], self.s.cssRules)
30 self.assertEqual('text/css', self.s.type)
31
32 self.assertEqual(False, self.s.disabled)
33 self.assertEqual(None, self.s.href)
34 self.assertEqual(None, self.s.media)
35 self.assertEqual(None, self.s.ownerNode)
36 self.assertEqual(None, self.s.parentStyleSheet)
37 self.assertEqual(u'', self.s.title)
38
39
41 "CSSStyleSheet NoModificationAllowedErr"
42 css = cssutils.css.CSSStyleSheet(readonly=True)
43
44 self.assertEqual(True, css._readonly)
45
46 self.assertRaises(xml.dom.NoModificationAllowedErr,
47 css._setCssText, u'@x;')
48 self.assertRaises(xml.dom.NoModificationAllowedErr,
49 css.insertRule, self.rule)
50 self.assertRaises(xml.dom.NoModificationAllowedErr,
51 css.insertRule, self.rule, 0)
52 self.assertRaises(xml.dom.NoModificationAllowedErr,
53 css.deleteRule, 0)
54
55
57 "CSSStyleSheet.cssText HierarchyRequestErr"
58 tests = {
59
60 u' @charset "utf-8";': xml.dom.HierarchyRequestErr,
61 u'@charset "ascii";@charset "ascii";': xml.dom.HierarchyRequestErr,
62 u'/*c*/@charset "ascii";': xml.dom.HierarchyRequestErr,
63 u'@import "x"; @charset "ascii";': xml.dom.HierarchyRequestErr,
64 u'@namespace a "x"; @charset "ascii";': xml.dom.HierarchyRequestErr,
65 u'@media all {} @charset "ascii";': xml.dom.HierarchyRequestErr,
66 u'@page {} @charset "ascii";': xml.dom.HierarchyRequestErr,
67 u'a {} @charset "ascii";': xml.dom.HierarchyRequestErr,
68
69
70 u'@namespace a "x"; @import "x";': xml.dom.HierarchyRequestErr,
71 u'@media all {} @import "x";': xml.dom.HierarchyRequestErr,
72 u'@page {} @import "x";': xml.dom.HierarchyRequestErr,
73 u'a {} @import "x";': xml.dom.HierarchyRequestErr,
74
75
76 u'@media all {} @namespace a "x";': xml.dom.HierarchyRequestErr,
77 u'@page {} @namespace a "x";': xml.dom.HierarchyRequestErr,
78 u'a {} @namespace a "x";': xml.dom.HierarchyRequestErr,
79 }
80 self.do_raise_r(tests)
81 self.do_raise_p(tests)
82
83
85 """CSSStyleSheet.cssText SyntaxErr
86
87 for single {, } or ;
88 """
89 tests = {
90 u'{': xml.dom.SyntaxErr,
91 u'}': xml.dom.SyntaxErr,
92 u';': xml.dom.SyntaxErr,
93 u'@charset "ascii";{': xml.dom.SyntaxErr,
94 u'@charset "ascii";}': xml.dom.SyntaxErr,
95 u'@charset "ascii";;': xml.dom.SyntaxErr,
96 }
97 self.do_raise_r(tests)
98 self.do_raise_p(tests)
99
100
101 - def test_cssText(self):
102 "CSSStyleSheet.cssText"
103 tests = {
104 u'': None,
105
106 u'@charset "ascii";\n@import "x";': None,
107 u'@charset "ascii";\n@media all {}': u'@charset "ascii";',
108 u'@charset "ascii";\n@x;': None,
109 u'@charset "ascii";\na {}': None,
110
111 u'@x;\n@import "x";': None,
112 u'@import "x";\n@import "y";': None,
113 u'@import "x";\n@media all {}': u'@import "x";',
114 u'@import "x";\n@x;': None,
115 u'@import "x";\na {}': None,
116
117 u'@x;\n@namespace a "x";': None,
118 u'@namespace a "x";\n@namespace b "y";': None,
119 u'@import "x";\n@namespace a "x";\n@media all {}': u'@import "x";\n@namespace a "x";',
120 u'@namespace a "x";\n@x;': None,
121 u'@namespace a "x";\na {}': None,
122 }
123 self.do_equal_r(tests)
124 self.do_equal_p(tests)
125
126 s = cssutils.css.CSSStyleSheet()
127 s.cssText = u'''@charset "ascii";@import "x";@namespace a "x";
128 @media all {/*1*/}@page {margin: 0}a {}@unknown;/*comment*/'''
129 for r in s.cssRules:
130 self.assertEqual(s, r.parentStyleSheet)
131
132
134 "CSSStyleSheet.deleteRule()"
135 self.s.cssText = u'@charset "ascii"; @import "x"; @x; a {}@y;'
136 self.assertEqual(5, self.s.cssRules.length)
137
138 self.assertRaises(xml.dom.IndexSizeErr, self.s.deleteRule, 5)
139
140
141
142 r = self.s.cssRules[-1]
143 self.assertEqual(self.s, r.parentStyleSheet)
144 self.s.deleteRule(-1)
145 self.assertEqual(None, r.parentStyleSheet)
146
147 self.assertEqual(4, self.s.cssRules.length)
148 self.assertEqual(
149 u'@charset "ascii";\n@import "x";\n@x;\na {}', self.s.cssText)
150
151 self.s.deleteRule(0)
152 self.assertEqual(3, self.s.cssRules.length)
153 self.assertEqual(u'@import "x";\n@x;\na {}', self.s.cssText)
154
155 self.s.deleteRule(1)
156 self.assertEqual(2, self.s.cssRules.length)
157 self.assertEqual(u'@import "x";\na {}', self.s.cssText)
158
159 self.s.deleteRule(1)
160 self.assertEqual(1, self.s.cssRules.length)
161 self.assertEqual(u'@import "x";', self.s.cssText)
162
163
188
189
191 "CSSStyleSheet.insertRule()"
192 s, L = self._gets()
193
194
195 self.assertRaises(xml.dom.IndexSizeErr,
196 s.insertRule, self.sr, -1)
197 self.assertRaises(xml.dom.IndexSizeErr,
198 s.insertRule, self.sr, s.cssRules.length + 1)
199
200 self.assertEqual(L, s.cssRules.length)
201
202
203 - def _insertRule(self, rules, notbefore, notafter, anywhere):
227
229 "CSSStyleSheet.insertRule(@charset)"
230 s, L = self._gets()
231 notbefore = (self.cr,)
232 notafter = (self.cr, self.ir, self.nr, self.mr, self.pr, self.sr,
233 self.c, self.ur)
234 anywhere = ()
235 self._insertRule((self.cr,),
236 notbefore, notafter, anywhere)
237
239 "CSSStyleSheet.insertRule(@import)"
240 s, L = self._gets()
241 notbefore = (self.cr,)
242 notafter = (self.nr, self.pr, self.mr, self.sr)
243 anywhere = (self.c, self.ur, self.ir)
244 self._insertRule((self.ir,),
245 notbefore, notafter, anywhere)
246
248 "CSSStyleSheet.insertRule(@namespace)"
249 s, L = self._gets()
250 notbefore = (self.cr, self.ir)
251 notafter = (self.pr, self.mr, self.sr)
252 anywhere = (self.c, self.ur, self.nr)
253 self._insertRule((self.nr,), notbefore, notafter, anywhere)
254
256 "CSSStyleSheet.insertRule(@media, @page, stylerule)"
257 s, L = self._gets()
258 notbefore = (self.cr, self.ir, self.nr)
259 notafter = ()
260 anywhere = (self.c, self.ur, self.mr, self.pr, self.sr)
261 self._insertRule((self.pr, self.mr, self.sr),
262 notbefore, notafter, anywhere)
263
273
274
275 if __name__ == '__main__':
276 import unittest
277 unittest.main()
278