1
2 """testcases for cssutils.CSSSerializer
3 """
4 __author__ = '$LastChangedBy: cthedot $'
5 __date__ = '$LastChangedDate: 2008-02-02 23:53:54 +0100 (Sa, 02 Feb 2008) $'
6 __version__ = '$LastChangedRevision: 975 $'
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.validOnly, False)
39 self.assertEqual(cssutils.ser.prefs.wellformedOnly, True)
40
41 self.assertEqual(cssutils.ser.prefs.removeInvalid, True)
42 css = u'''
43 /*1*/
44 @import url(x) tv , print;
45 @namespace prefix "uri";
46 @namespace unused "unused";
47 @media all {}
48 @media all {
49 a {}
50 }
51 @media all {
52 a { color: red; }
53 }
54 @page { left: 0; }
55 a {}
56 prefix|x, a + b > c ~ d , b { top : 1px ;
57 font-family : arial ,'some'
58 }
59 '''
60 parsedcss = u'''/*1*/
61 @import url(x) tv, print;
62 @namespace prefix "uri";
63 @namespace unused "unused";
64 @media all {
65 a {
66 color: red
67 }
68 }
69 @page {
70 left: 0
71 }
72 prefix|x, a + b > c ~ d, b {
73 top: 1px;
74 font-family: arial, 'some'
75 }'''
76 s = cssutils.parseString(css)
77 self.assertEqual(s.cssText, parsedcss)
78
80 "Preferences.useMinified()"
81 cssutils.ser.prefs.useDefaults()
82 cssutils.ser.prefs.useMinified()
83 self.assertEqual(cssutils.ser.prefs.defaultAtKeyword, True)
84 self.assertEqual(cssutils.ser.prefs.defaultPropertyName, True)
85 self.assertEqual(cssutils.ser.prefs.importHrefFormat, 'string')
86 self.assertEqual(cssutils.ser.prefs.indent, u'')
87 self.assertEqual(cssutils.ser.prefs.keepAllProperties, True)
88 self.assertEqual(cssutils.ser.prefs.keepComments, False)
89 self.assertEqual(cssutils.ser.prefs.keepEmptyRules, False)
90 self.assertEqual(cssutils.ser.prefs.keepUsedNamespaceRulesOnly, True)
91 self.assertEqual(cssutils.ser.prefs.lineNumbers, False)
92 self.assertEqual(cssutils.ser.prefs.lineSeparator, u'')
93 self.assertEqual(cssutils.ser.prefs.listItemSpacer, u'')
94 self.assertEqual(cssutils.ser.prefs.omitLastSemicolon, True)
95 self.assertEqual(cssutils.ser.prefs.paranthesisSpacer, u'')
96 self.assertEqual(cssutils.ser.prefs.propertyNameSpacer, u'')
97 self.assertEqual(cssutils.ser.prefs.selectorCombinatorSpacer, u'')
98 self.assertEqual(cssutils.ser.prefs.validOnly, False)
99 self.assertEqual(cssutils.ser.prefs.wellformedOnly, True)
100
101 self.assertEqual(cssutils.ser.prefs.removeInvalid, True)
102
103 css = u'''
104 /*1*/
105 @import url(x) tv , print;
106 @namespace prefix "uri";
107 @namespace unused "unused";
108 @media all {}
109 @media all {
110 a {}
111 }
112 @media all {
113 a { color: red; }
114 }
115 @page {}
116 a {}
117 prefix|x, a + b > c ~ d , b { top : 1px ;
118 font-family : arial , 'some'
119 }
120 '''
121 s = cssutils.parseString(css)
122 self.assertEqual(s.cssText,
123 u'''@import "x" tv,print;@namespace prefix "uri";@media all{a{color:red}}prefix|x,a+b>c~d,b{top:1px;font-family:arial,'some'}'''
124 )
125
136
138 "Preferences.defaultPropertyName"
139 cssutils.ser.prefs.useDefaults()
140 cssutils.ser.prefs.keepAllProperties = False
141
142
143
144
145 s = cssutils.parseString(ur'a { c\olor: green; }')
146 self.assertEqual(u'a {\n color: green\n }', s.cssText)
147 cssutils.ser.prefs.defaultPropertyName = True
148 self.assertEqual(u'a {\n color: green\n }', s.cssText)
149 cssutils.ser.prefs.defaultPropertyName = False
150 self.assertEqual(u'a {\n c\\olor: green\n }', s.cssText)
151
152 s = cssutils.parseString(u'a { color: red; c\olor: green; }')
153 self.assertEqual(u'a {\n c\\olor: green\n }', s.cssText)
154 cssutils.ser.prefs.defaultPropertyName = False
155 self.assertEqual(u'a {\n c\\olor: green\n }', s.cssText)
156 cssutils.ser.prefs.defaultPropertyName = True
157 self.assertEqual(u'a {\n color: green\n }', s.cssText)
158
168
194
210
212 "Preferences.keepAllProperties"
213 cssutils.ser.prefs.useDefaults()
214
215 css = '''a {
216 color: pink;
217 color: red;
218 c\olor: blue;
219 c\olor: green;
220 }'''
221 s = cssutils.parseString(css)
222
223 cssutils.ser.prefs.keepAllProperties = False
224 self.assertEqual(u'a {\n color: green\n }', s.cssText)
225
226 cssutils.ser.prefs.keepAllProperties = True
227 self.assertEqual(u'a {\n color: pink;\n color: red;\n c\olor: blue;\n c\olor: green\n }', s.cssText)
228
238
240 "Preferences.keepEmptyRules"
241
242 css = u'''a {}
243 a {
244 /*1*/
245 }
246 a {
247 color: red
248 }'''
249 s = cssutils.parseString(css)
250 cssutils.ser.prefs.useDefaults()
251 cssutils.ser.prefs.keepEmptyRules = True
252 self.assertEqual(css, s.cssText)
253 cssutils.ser.prefs.keepEmptyRules = False
254 self.assertEqual(u'a {\n /*1*/\n }\na {\n color: red\n }',
255 s.cssText)
256 cssutils.ser.prefs.keepComments = False
257 self.assertEqual(u'a {\n color: red\n }',
258 s.cssText)
259
260
261 css = u'''@media tv {
262 }
263 @media all {
264 /*1*/
265 }
266 @media print {
267 a {}
268 }
269 @media print {
270 a {
271 /*1*/
272 }
273 }
274 @media all {
275 a {
276 color: red
277 }
278 }'''
279 s = cssutils.parseString(css)
280 cssutils.ser.prefs.useDefaults()
281 cssutils.ser.prefs.keepEmptyRules = True
282
283 cssutils.ser.prefs.keepEmptyRules = False
284 self.assertEqual('''@media all {
285 /*1*/
286 }
287 @media print {
288 a {
289 /*1*/
290 }
291 }
292 @media all {
293 a {
294 color: red
295 }
296 }''', s.cssText)
297 cssutils.ser.prefs.keepComments = False
298 self.assertEqual('''@media all {
299 a {
300 color: red
301 }
302 }''', s.cssText)
303
305 "Preferences.keepUsedNamespaceRulesOnly"
306 cssutils.ser.prefs.useDefaults()
307 tests = {
308
309 '@namespace p "u"; @namespace "u"; p|a, a {top: 0}':
310 ('@namespace "u";\n|a, |a {\n top: 0\n }',
311 '@namespace "u";\n|a, |a {\n top: 0\n }'),
312 '@namespace "u"; @namespace p "u"; p|a, a {top: 0}':
313 ('@namespace p "u";\np|a, p|a {\n top: 0\n }',
314 '@namespace p "u";\np|a, p|a {\n top: 0\n }'),
315
316 '@namespace p "u"; @namespace "d"; p|a, a {top: 0}':
317 ('@namespace p "u";\n@namespace "d";\np|a, |a {\n top: 0\n }',
318 '@namespace p "u";\n@namespace "d";\np|a, |a {\n top: 0\n }'),
319
320 '@namespace p "u"; @namespace "d"; p|a {top: 0}':
321 ('@namespace p "u";\n@namespace "d";\np|a {\n top: 0\n }',
322 '@namespace p "u";\np|a {\n top: 0\n }'),
323
324 '@namespace p "u"; @namespace "d"; a {top: 0}':
325 ('@namespace p "u";\n@namespace "d";\n|a {\n top: 0\n }',
326 '@namespace "d";\n|a {\n top: 0\n }'),
327
328 '@namespace p "u"; @namespace d "d"; p|a {top: 0}':
329 ('@namespace p "u";\n@namespace d "d";\np|a {\n top: 0\n }',
330 '@namespace p "u";\np|a {\n top: 0\n }'),
331 }
332 for test in tests:
333 s = cssutils.parseString(test)
334 expwith, expwithout = tests[test]
335 cssutils.ser.prefs.keepUsedNamespaceRulesOnly = False
336 self.assertEqual(s.cssText, expwith)
337 cssutils.ser.prefs.keepUsedNamespaceRulesOnly = True
338 self.assertEqual(s.cssText, expwithout)
339
340
342 "Preferences.lineNumbers"
343 cssutils.ser.prefs.useDefaults()
344
345 s = cssutils.parseString('a {top: 1; left: 2}')
346 exp0 = '''a {
347 top: 1;
348 left: 2
349 }'''
350 exp1 = '''1: a {
351 2: top: 1;
352 3: left: 2
353 4: }'''
354 self.assertEqual(False, cssutils.ser.prefs.lineNumbers)
355 self.assertEqual(exp0, s.cssText)
356 cssutils.ser.prefs.lineNumbers = True
357 self.assertEqual(True, cssutils.ser.prefs.lineNumbers)
358 self.assertEqual(exp1, s.cssText)
359
372
385
395
404
413
421
423 "CSSSerializer.do_CSSStyleSheet"
424 css = u'/* κουρος */'
425 sheet = cssutils.parseString(css)
426 self.assertEqual(css, unicode(sheet.cssText, 'utf-8'))
427
428 css = u'@charset "utf-8";\n/* κουρος */'
429 sheet = cssutils.parseString(css)
430 self.assertEqual(css, unicode(sheet.cssText, 'utf-8'))
431 sheet.cssRules[0].encoding = 'ascii'
432 self.assertEqual('@charset "ascii";\n/* \\3BA \\3BF \\3C5 \\3C1 \\3BF \\3C2 */',
433 sheet.cssText)
434
452
454 "CSSSerializer._escapeSTRINGtype"
455 css = ur'''@import url("ABC\a");
456 @import "ABC\a";
457 @import 'ABC\a';
458 a[href='"\a\22\27"'] {
459 a: "\a\d\c";
460 b: "\a \d \c ";
461 c: "\"";
462 d: "\22";
463 e: '\'';
464 content: '\27';
465 }'''
466 exp = ur'''@import url("ABC\a ");
467 @import "ABC\a ";
468 @import "ABC\a ";
469 a[href='"\a "\'"'] {
470 a: "\a \d \c ";
471 b: "\a \d \c ";
472 c: "\"";
473 d: "\"";
474 e: '\'';
475 content: '\''
476 }'''
477 sheet = cssutils.parseString(css)
478 self.assertEqual(sheet.cssText, exp)
479
480
481 if __name__ == '__main__':
482 import unittest
483 unittest.main()
484