Home | Trees | Indices | Help |
|
---|
|
1 """Testcases for cssutils.css.CSSMediaRule""" 2 __version__ = '$Id: test_cssmediarule.py 1175 2008-03-20 17:43:26Z cthedot $' 3 4 import xml.dom 5 import test_cssrule 6 import cssutils 79309 310 311 if __name__ == '__main__': 312 import unittest 313 unittest.main() 31411 super(CSSMediaRuleTestCase, self).setUp() 12 self.r = cssutils.css.CSSMediaRule() 13 self.rRO = cssutils.css.CSSMediaRule(readonly=True) 14 self.r_type = cssutils.css.CSSMediaRule.MEDIA_RULE 15 self.r_typeString = 'MEDIA_RULE' 16 # for tests 17 self.stylerule = cssutils.css.CSSStyleRule() 18 self.stylerule.cssText = u'a {}'1921 "CSSMediaRule.__init__()" 22 super(CSSMediaRuleTestCase, self).test_init() 23 24 r = cssutils.css.CSSMediaRule() 25 self.assertEqual(cssutils.css.CSSRuleList, type(r.cssRules)) 26 self.assertEqual([], r.cssRules) 27 self.assertEqual(u'', r.cssText) 28 self.assertEqual(cssutils.stylesheets.MediaList, type(r.media)) 29 self.assertEqual('all', r.media.mediaText) 30 self.assertEqual(None, r.name) 31 32 r = cssutils.css.CSSMediaRule(mediaText='print', name='name') 33 self.assertEqual(cssutils.css.CSSRuleList, type(r.cssRules)) 34 self.assertEqual([], r.cssRules) 35 self.assertEqual(u'', r.cssText) 36 self.assertEqual(cssutils.stylesheets.MediaList, type(r.media)) 37 self.assertEqual('print', r.media.mediaText) 38 self.assertEqual('name', r.name) 39 40 # only possible to set @... similar name 41 self.assertRaises(xml.dom.InvalidModificationErr, self.r._setAtkeyword, 'x')4244 "CSSMediaRule.__iter__()" 45 m = cssutils.css.CSSMediaRule() 46 m.cssText = '''@media all { /*1*/a { left: 0} b{ top:0} }''' 47 types = [cssutils.css.CSSRule.COMMENT, 48 cssutils.css.CSSRule.STYLE_RULE, 49 cssutils.css.CSSRule.STYLE_RULE] 50 for i, rule in enumerate(m): 51 self.assertEqual(rule, m.cssRules[i]) 52 self.assertEqual(rule.type, types[i]) 53 self.assertEqual(rule.parentRule, m)5456 "CSSMediaRule.cssRules" 57 r = cssutils.css.CSSMediaRule() 58 self.assertEqual([], r.cssRules) 59 sr = cssutils.css.CSSStyleRule() 60 r.cssRules.append(sr) 61 self.assertEqual([sr], r.cssRules) 62 ir = cssutils.css.CSSImportRule() 63 self.assertRaises(xml.dom.HierarchyRequestErr, r.cssRules.append, ir)6466 "CSSMediaRule.cssText" 67 tests = { 68 u'''@mediaall"name"{}''': u'', 69 u'''@media all "name"{}''': u'', 70 u'''@media all {}''': u'', 71 u'''@mediaall{}''': u'', 72 u'''@media/*x*/all{}''': u'', 73 u'''@media all { a{ x: 1} }''': u'''@media all {\n a {\n x: 1\n }\n }''', 74 u'''@media all "name" { a{ x: 1} }''': u'''@media all "name" {\n a {\n x: 1\n }\n }''', 75 u'''@MEDIA all { a{x:1} }''': u'''@media all {\n a {\n x: 1\n }\n }''', 76 u'''@\\media all { a{x:1} }''': u'''@media all {\n a {\n x: 1\n }\n }''', 77 u'''@media all {@x some;a{color: red;}b{color: green;}}''': 78 u'''@media all { 79 @x some; 80 a { 81 color: red 82 } 83 b { 84 color: green 85 } 86 }''', 87 u'@media all { @x{}}': u'@media all {\n @x {\n }\n }', 88 u'@media all "n" /**/ { @x{}}': 89 u'@media all "n" /**/ {\n @x {\n }\n }', 90 u'@mediaall"n"/**/{@x{}}': 91 u'@media all "n" /**/ {\n @x {\n }\n }', 92 # comments 93 u'@media/*1*//*2*/all/*3*//*4*/{/*5*/a{x:1}}': 94 u'@media /*1*/ /*2*/ all /*3*/ /*4*/ {\n /*5*/\n a {\n x: 1\n }\n }', 95 u'@media /*1*/ /*2*/ all /*3*/ /*4*/ { /*5*/ a{ x: 1} }': 96 u'@media /*1*/ /*2*/ all /*3*/ /*4*/ {\n /*5*/\n a {\n x: 1\n }\n }', 97 # WS 98 u'@media\n\t\f all\n\t\f {\n\t\f a{ x: 1}\n\t\f }': 99 u'@media all {\n a {\n x: 1\n }\n }', 100 } 101 self.do_equal_p(tests) 102 self.do_equal_r(tests) 103 104 tests = { 105 u'@media {}': xml.dom.SyntaxErr, 106 u'@media;': xml.dom.SyntaxErr, 107 u'@media/*only comment*/{}': xml.dom.SyntaxErr, 108 u'@media all;': xml.dom.SyntaxErr, 109 u'@media all "n";': xml.dom.SyntaxErr, 110 u'@media all; @x{}': xml.dom.SyntaxErr, 111 u'@media { a{ x: 1} }': xml.dom.SyntaxErr, 112 u'@media "name" { a{ x: 1} }': xml.dom.SyntaxErr, 113 u'@media "name" all { a{ x: 1} }': xml.dom.SyntaxErr, 114 u'@media all { @charset "x"; a{}}': xml.dom.HierarchyRequestErr, 115 u'@media all { @import "x"; a{}}': xml.dom.HierarchyRequestErr, 116 u'@media all { @media all {} }': xml.dom.HierarchyRequestErr, 117 u'@media all { , }': xml.dom.SyntaxErr, 118 u'@media all {}EXTRA': xml.dom.SyntaxErr, 119 } 120 self.do_raise_p(tests) 121 self.do_raise_r(tests) 122 123 tests = { 124 # extra stuff 125 '@media all { x{} } a{}': xml.dom.SyntaxErr, 126 } 127 self.do_raise_r(tests) 128 129 m = cssutils.css.CSSMediaRule() 130 m.cssText = u'''@media all {@x; /*1*/a{color: red;}}''' 131 for r in m.cssRules: 132 self.assertEqual(m, r.parentRule) 133 self.assertEqual(m.parentStyleSheet, r.parentStyleSheet) 134 135 cssutils.ser.prefs.useDefaults()136138 "CSSMediaRule.media" 139 # see CSSImportRule.media 140 141 # setting not allowed 142 self.assertRaises(AttributeError, 143 self.r.__setattr__, 'media', None) 144 self.assertRaises(AttributeError, 145 self.r.__setattr__, 'media', 0) 146 147 # set mediaText instead 148 self.r.media.mediaText = 'print' 149 self.r.insertRule(self.stylerule) 150 self.assertEqual(u'', self.r.cssText) 151 cssutils.ser.prefs.keepEmptyRules = True 152 self.assertEqual(u'@media print {\n a {}\n }', self.r.cssText) 153 cssutils.ser.prefs.useDefaults()154156 "CSSMediaRule.name" 157 r = cssutils.css.CSSMediaRule() 158 r.cssText = '@media all "\\n\\"ame" {a{left: 0}}' 159 160 self.assertEqual('\\n"ame', r.name) 161 r.name = "n" 162 self.assertEqual('n', r.name) 163 self.assertEqual(u'@media all "n" {\n a {\n left: 0\n }\n }', 164 r.cssText) 165 r.name = '"' 166 self.assertEqual('"', r.name) 167 self.assertEqual(u'@media all "\\"" {\n a {\n left: 0\n }\n }', 168 r.cssText) 169 170 r.name = '' 171 self.assertEqual(None, r.name) 172 self.assertEqual(u'@media all {\n a {\n left: 0\n }\n }', 173 r.cssText) 174 175 r.name = None 176 self.assertEqual(None, r.name) 177 self.assertEqual(u'@media all {\n a {\n left: 0\n }\n }', 178 r.cssText) 179 180 self.assertRaises(xml.dom.SyntaxErr, r._setName, 0) 181 self.assertRaises(xml.dom.SyntaxErr, r._setName, 123)182184 "CSSMediaRule.deleteRule" 185 # see CSSStyleSheet.deleteRule 186 m = cssutils.css.CSSMediaRule() 187 m.cssText = u'''@media all { 188 @a; 189 /* x */ 190 @b; 191 @c; 192 @d; 193 }''' 194 self.assertEqual(5, m.cssRules.length) 195 self.assertRaises(xml.dom.IndexSizeErr, m.deleteRule, 5) 196 197 # end -1 198 # check parentRule 199 r = m.cssRules[-1] 200 self.assertEqual(m, r.parentRule) 201 m.deleteRule(-1) 202 self.assertEqual(None, r.parentRule) 203 204 self.assertEqual(4, m.cssRules.length) 205 self.assertEqual( 206 u'@media all {\n @a;\n /* x */\n @b;\n @c;\n }', m.cssText) 207 # beginning 208 m.deleteRule(0) 209 self.assertEqual(3, m.cssRules.length) 210 self.assertEqual(u'@media all {\n /* x */\n @b;\n @c;\n }', m.cssText) 211 # middle 212 m.deleteRule(1) 213 self.assertEqual(2, m.cssRules.length) 214 self.assertEqual(u'@media all {\n /* x */\n @c;\n }', m.cssText) 215 # end 216 m.deleteRule(1) 217 self.assertEqual(1, m.cssRules.length) 218 self.assertEqual(u'@media all {\n /* x */\n }', m.cssText)219221 "CSSMediaRule.add()" 222 # see CSSStyleSheet.add 223 r = cssutils.css.CSSMediaRule() 224 stylerule1 = cssutils.css.CSSStyleRule() 225 stylerule2 = cssutils.css.CSSStyleRule() 226 r.add(stylerule1) 227 r.add(stylerule2) 228 self.assertEqual(r.cssRules[0], stylerule1) 229 self.assertEqual(r.cssRules[1], stylerule2)230232 "CSSMediaRule.insertRule" 233 # see CSSStyleSheet.insertRule 234 r = cssutils.css.CSSMediaRule() 235 charsetrule = cssutils.css.CSSCharsetRule('ascii') 236 importrule = cssutils.css.CSSImportRule('x') 237 namespacerule = cssutils.css.CSSNamespaceRule() 238 pagerule = cssutils.css.CSSPageRule() 239 mediarule = cssutils.css.CSSMediaRule() 240 unknownrule = cssutils.css.CSSUnknownRule('@x;') 241 stylerule = cssutils.css.CSSStyleRule('a') 242 stylerule.cssText = u'a { x: 1}' 243 comment1 = cssutils.css.CSSComment(u'/*1*/') 244 comment2 = cssutils.css.CSSComment(u'/*2*/') 245 246 # hierarchy 247 self.assertRaises(xml.dom.HierarchyRequestErr, 248 r.insertRule, charsetrule, 0) 249 self.assertRaises(xml.dom.HierarchyRequestErr, 250 r.insertRule, importrule, 0) 251 self.assertRaises(xml.dom.HierarchyRequestErr, 252 r.insertRule, namespacerule, 0) 253 self.assertRaises(xml.dom.HierarchyRequestErr, 254 r.insertRule, pagerule, 0) 255 self.assertRaises(xml.dom.HierarchyRequestErr, 256 r.insertRule, mediarule, 0) 257 258 # start insert 259 r.insertRule(stylerule, 0) 260 self.assertEqual(r, stylerule.parentRule) 261 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 262 # before 263 r.insertRule(comment1, 0) 264 self.assertEqual(r, comment1.parentRule) 265 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 266 # end explicit 267 r.insertRule(unknownrule, 2) 268 self.assertEqual(r, unknownrule.parentRule) 269 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 270 # end implicit 271 r.insertRule(comment2) 272 self.assertEqual(r, comment2.parentRule) 273 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 274 self.assertEqual( 275 '@media all {\n /*1*/\n a {\n x: 1\n }\n @x;\n /*2*/\n }', 276 r.cssText) 277 278 # index 279 self.assertRaises(xml.dom.IndexSizeErr, 280 r.insertRule, stylerule, -1) 281 self.assertRaises(xml.dom.IndexSizeErr, 282 r.insertRule, stylerule, r.cssRules.length + 1)283 287289 "CSSMediaRule (incomplete)" 290 tests = { 291 u'@media all { @unknown;': # no } 292 u'@media all {\n @unknown;\n }', 293 u'@media all { a {x:1}': # no } 294 u'@media all {\n a {\n x: 1\n }\n }', 295 } 296 self.do_equal_p(tests) # parse297
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Sun Mar 23 01:20:51 2008 | http://epydoc.sourceforge.net |