1
2 """testcases for cssutils.CSSSerializer
3 """
4 __author__ = '$LastChangedBy: cthedot $'
5 __date__ = '$LastChangedDate: 2008-02-22 19:03:20 +0100 (Fr, 22 Feb 2008) $'
6 __version__ = '$LastChangedRevision: 1070 $'
7
8 import basetest
9 import cssutils
10
12 """
13 testcases for cssutils.CSSSerializer
14 """
15
16
17
19 "Preferences.useDefaults()"
20 cssutils.ser.prefs.useMinified()
21 cssutils.ser.prefs.useDefaults()
22 self.assertEqual(cssutils.ser.prefs.defaultAtKeyword, True)
23 self.assertEqual(cssutils.ser.prefs.defaultPropertyName, True)
24 self.assertEqual(cssutils.ser.prefs.defaultPropertyPriority, True)
25 self.assertEqual(cssutils.ser.prefs.importHrefFormat, None)
26 self.assertEqual(cssutils.ser.prefs.indent, 4 * u' ')
27 self.assertEqual(cssutils.ser.prefs.keepAllProperties, True)
28 self.assertEqual(cssutils.ser.prefs.keepComments, True)
29 self.assertEqual(cssutils.ser.prefs.keepEmptyRules, False)
30 self.assertEqual(cssutils.ser.prefs.keepUsedNamespaceRulesOnly, False)
31 self.assertEqual(cssutils.ser.prefs.lineNumbers, False)
32 self.assertEqual(cssutils.ser.prefs.lineSeparator, u'\n')
33 self.assertEqual(cssutils.ser.prefs.listItemSpacer, u' ')
34 self.assertEqual(cssutils.ser.prefs.omitLastSemicolon, True)
35 self.assertEqual(cssutils.ser.prefs.paranthesisSpacer, u' ')
36 self.assertEqual(cssutils.ser.prefs.propertyNameSpacer, u' ')
37 self.assertEqual(cssutils.ser.prefs.selectorCombinatorSpacer, u' ')
38 self.assertEqual(cssutils.ser.prefs.spacer, u' ')
39 self.assertEqual(cssutils.ser.prefs.validOnly, False)
40 css = u'''
41 /*1*/
42 @import url(x) tv , print;
43 @namespace prefix "uri";
44 @namespace unused "unused";
45 @media all {}
46 @media all {
47 a {}
48 }
49 @media all {
50 a { color: red; }
51 }
52 @page { left: 0; }
53 a {}
54 prefix|x, a + b > c ~ d , b { top : 1px ;
55 font-family : arial ,'some'
56 }
57 '''
58 parsedcss = u'''/*1*/
59 @import url(x) tv, print;
60 @namespace prefix "uri";
61 @namespace unused "unused";
62 @media all {
63 a {
64 color: red
65 }
66 }
67 @page {
68 left: 0
69 }
70 prefix|x, a + b > c ~ d, b {
71 top: 1px;
72 font-family: arial, "some"
73 }'''
74 s = cssutils.parseString(css)
75 self.assertEqual(s.cssText, parsedcss)
76
78 "Preferences.useMinified()"
79 cssutils.ser.prefs.useDefaults()
80 cssutils.ser.prefs.useMinified()
81 self.assertEqual(cssutils.ser.prefs.defaultAtKeyword, True)
82 self.assertEqual(cssutils.ser.prefs.defaultPropertyName, True)
83 self.assertEqual(cssutils.ser.prefs.importHrefFormat, 'string')
84 self.assertEqual(cssutils.ser.prefs.indent, u'')
85 self.assertEqual(cssutils.ser.prefs.keepAllProperties, True)
86 self.assertEqual(cssutils.ser.prefs.keepComments, False)
87 self.assertEqual(cssutils.ser.prefs.keepEmptyRules, False)
88 self.assertEqual(cssutils.ser.prefs.keepUsedNamespaceRulesOnly, True)
89 self.assertEqual(cssutils.ser.prefs.lineNumbers, False)
90 self.assertEqual(cssutils.ser.prefs.lineSeparator, u'')
91 self.assertEqual(cssutils.ser.prefs.listItemSpacer, u'')
92 self.assertEqual(cssutils.ser.prefs.omitLastSemicolon, True)
93 self.assertEqual(cssutils.ser.prefs.paranthesisSpacer, u'')
94 self.assertEqual(cssutils.ser.prefs.propertyNameSpacer, u'')
95 self.assertEqual(cssutils.ser.prefs.selectorCombinatorSpacer, u'')
96 self.assertEqual(cssutils.ser.prefs.spacer, u'')
97 self.assertEqual(cssutils.ser.prefs.validOnly, False)
98
99 css = u'''
100 /*1*/
101 @import url(x) tv , print;
102 @namespace prefix "uri";
103 @namespace unused "unused";
104 @media all {}
105 @media all {
106 a {}
107 }
108 @media all "name" {
109 a { color: red; }
110 }
111 @page:left {
112 left: 0
113 }
114 a {}
115 prefix|x, a + b > c ~ d , b { top : 1px ;
116 font-family : arial , 'some'
117 }
118 '''
119 s = cssutils.parseString(css)
120 self.assertEqual(s.cssText,
121 u'''@import"x"tv,print;@namespaceprefix"uri";@mediaall"name"{a{color:red}}@page:left{left:0}prefix|x,a+b>c~d,b{top:1px;font-family:arial,"some"}'''
122 )
123
134
136 "Preferences.defaultPropertyName"
137 cssutils.ser.prefs.useDefaults()
138 cssutils.ser.prefs.keepAllProperties = False
139
140
141
142
143 s = cssutils.parseString(ur'a { c\olor: green; }')
144 self.assertEqual(u'a {\n color: green\n }', s.cssText)
145 cssutils.ser.prefs.defaultPropertyName = True
146 self.assertEqual(u'a {\n color: green\n }', s.cssText)
147 cssutils.ser.prefs.defaultPropertyName = False
148 self.assertEqual(u'a {\n c\\olor: green\n }', s.cssText)
149
150 s = cssutils.parseString(u'a { color: red; c\olor: green; }')
151 self.assertEqual(u'a {\n c\\olor: green\n }', s.cssText)
152 cssutils.ser.prefs.defaultPropertyName = False
153 self.assertEqual(u'a {\n c\\olor: green\n }', s.cssText)
154 cssutils.ser.prefs.defaultPropertyName = True
155 self.assertEqual(u'a {\n color: green\n }', s.cssText)
156
166
189
205
207 "Preferences.keepAllProperties"
208 cssutils.ser.prefs.useDefaults()
209
210 css = '''a {
211 color: pink;
212 color: red;
213 c\olor: blue;
214 c\olor: green;
215 }'''
216 s = cssutils.parseString(css)
217
218 cssutils.ser.prefs.keepAllProperties = False
219 self.assertEqual(u'a {\n color: green\n }', s.cssText)
220
221 cssutils.ser.prefs.keepAllProperties = True
222 self.assertEqual(u'a {\n color: pink;\n color: red;\n c\olor: blue;\n c\olor: green\n }', s.cssText)
223
233
235 "Preferences.keepEmptyRules"
236
237 css = u'''a {}
238 a {
239 /*1*/
240 }
241 a {
242 color: red
243 }'''
244 s = cssutils.parseString(css)
245 cssutils.ser.prefs.useDefaults()
246 cssutils.ser.prefs.keepEmptyRules = True
247 self.assertEqual(css, s.cssText)
248 cssutils.ser.prefs.keepEmptyRules = False
249 self.assertEqual(u'a {\n /*1*/\n }\na {\n color: red\n }',
250 s.cssText)
251 cssutils.ser.prefs.keepComments = False
252 self.assertEqual(u'a {\n color: red\n }',
253 s.cssText)
254
255
256 css = u'''@media tv {
257 }
258 @media all {
259 /*1*/
260 }
261 @media print {
262 a {}
263 }
264 @media print {
265 a {
266 /*1*/
267 }
268 }
269 @media all {
270 a {
271 color: red
272 }
273 }'''
274 s = cssutils.parseString(css)
275 cssutils.ser.prefs.useDefaults()
276 cssutils.ser.prefs.keepEmptyRules = True
277
278 cssutils.ser.prefs.keepEmptyRules = False
279 self.assertEqual('''@media all {
280 /*1*/
281 }
282 @media print {
283 a {
284 /*1*/
285 }
286 }
287 @media all {
288 a {
289 color: red
290 }
291 }''', s.cssText)
292 cssutils.ser.prefs.keepComments = False
293 self.assertEqual('''@media all {
294 a {
295 color: red
296 }
297 }''', s.cssText)
298
300 "Preferences.keepUsedNamespaceRulesOnly"
301 cssutils.ser.prefs.useDefaults()
302 tests = {
303
304 '@namespace p "u"; @namespace "u"; p|a, a {top: 0}':
305 ('@namespace "u";\na, a {\n top: 0\n }',
306 '@namespace "u";\na, a {\n top: 0\n }'),
307 '@namespace "u"; @namespace p "u"; p|a, a {top: 0}':
308 ('@namespace p "u";\np|a, p|a {\n top: 0\n }',
309 '@namespace p "u";\np|a, p|a {\n top: 0\n }'),
310
311 '@namespace p "u"; @namespace "d"; p|a, a {top: 0}':
312 ('@namespace p "u";\n@namespace "d";\np|a, a {\n top: 0\n }',
313 '@namespace p "u";\n@namespace "d";\np|a, a {\n top: 0\n }'),
314
315 '@namespace p "u"; @namespace "d"; p|a {top: 0}':
316 ('@namespace p "u";\n@namespace "d";\np|a {\n top: 0\n }',
317 '@namespace p "u";\np|a {\n top: 0\n }'),
318
319 '@namespace p "u"; @namespace "d"; a {top: 0}':
320 ('@namespace p "u";\n@namespace "d";\na {\n top: 0\n }',
321 '@namespace "d";\na {\n top: 0\n }'),
322
323 '@namespace p "u"; @namespace d "d"; p|a {top: 0}':
324 ('@namespace p "u";\n@namespace d "d";\np|a {\n top: 0\n }',
325 '@namespace p "u";\np|a {\n top: 0\n }'),
326 }
327 for test in tests:
328 s = cssutils.parseString(test)
329 expwith, expwithout = tests[test]
330 cssutils.ser.prefs.keepUsedNamespaceRulesOnly = False
331 self.assertEqual(s.cssText, expwith)
332 cssutils.ser.prefs.keepUsedNamespaceRulesOnly = True
333 self.assertEqual(s.cssText, expwithout)
334
336 "Preferences.lineNumbers"
337 cssutils.ser.prefs.useDefaults()
338
339 s = cssutils.parseString('a {top: 1; left: 2}')
340 exp0 = '''a {
341 top: 1;
342 left: 2
343 }'''
344 exp1 = '''1: a {
345 2: top: 1;
346 3: left: 2
347 4: }'''
348 self.assertEqual(False, cssutils.ser.prefs.lineNumbers)
349 self.assertEqual(exp0, s.cssText)
350 cssutils.ser.prefs.lineNumbers = True
351 self.assertEqual(True, cssutils.ser.prefs.lineNumbers)
352 self.assertEqual(exp1, s.cssText)
353
366
379
389
398
407
415
437
439 "CSSSerializer.do_CSSStyleSheet"
440 css = u'/* κουρος */'
441 sheet = cssutils.parseString(css)
442 self.assertEqual(css, unicode(sheet.cssText, 'utf-8'))
443
444 css = u'@charset "utf-8";\n/* κουρος */'
445 sheet = cssutils.parseString(css)
446 self.assertEqual(css, unicode(sheet.cssText, 'utf-8'))
447 sheet.cssRules[0].encoding = 'ascii'
448 self.assertEqual('@charset "ascii";\n/* \\3BA \\3BF \\3C5 \\3C1 \\3BF \\3C2 */',
449 sheet.cssText)
450
468
470 "CSSSerializer._escapestring"
471
472 css = ur'''@import url("ABC\a");
473 @import "ABC\a";
474 @import 'ABC\a';
475 a[href='"\a\22\27"'] {
476 a: "\a\d\c";
477 b: "\a \d \c ";
478 c: "\"";
479 d: "\22";
480 e: '\'';
481 content: '\27';
482 }'''
483 exp = ur'''@import url("ABC\a ");
484 @import "ABC\a ";
485 @import "ABC\a ";
486 a[href="\"\a \"'\""] {
487 a: "\a \d \c ";
488 b: "\a \d \c ";
489 c: "\"";
490 d: "\"";
491 e: "'";
492 content: "'"
493 }'''
494 sheet = cssutils.parseString(css)
495 self.assertEqual(sheet.cssText, exp)
496
497
498 if __name__ == '__main__':
499 import unittest
500 unittest.main()
501