Package cssutils :: Package tests :: Module test_cssmediarule
[hide private]
[frames] | no frames]

Source Code for Module cssutils.tests.test_cssmediarule

  1  """ 
  2  testcases for cssutils.css.CSSMediaRule 
  3  """ 
  4  __author__ = '$LastChangedBy: cthedot $' 
  5  __date__ = '$LastChangedDate: 2008-02-03 15:10:34 +0100 (So, 03 Feb 2008) $' 
  6  __version__ = '$LastChangedRevision: 980 $' 
  7   
  8  import xml.dom 
  9  import test_cssrule 
 10  import cssutils 
 11   
12 -class CSSMediaRuleTestCase(test_cssrule.CSSRuleTestCase):
13
14 - def setUp(self):
15 super(CSSMediaRuleTestCase, self).setUp() 16 self.r = cssutils.css.CSSMediaRule() 17 self.rRO = cssutils.css.CSSMediaRule(readonly=True) 18 self.r_type = cssutils.css.CSSMediaRule.MEDIA_RULE 19 self.r_typeString = 'MEDIA_RULE' 20 # for tests 21 self.stylerule = cssutils.css.CSSStyleRule() 22 self.stylerule.cssText = u'a {}'
23
24 - def test_init(self):
25 "CSSMediaRule.__init__()" 26 super(CSSMediaRuleTestCase, self).test_init() 27 28 r = cssutils.css.CSSMediaRule() 29 self.assertEqual(cssutils.css.CSSRuleList, type(r.cssRules)) 30 self.assertEqual([], r.cssRules) 31 32 self.assertEqual(cssutils.stylesheets.MediaList, type(r.media)) 33 self.assertEqual('all', r.media.mediaText) 34 35 # until any rules 36 self.assertEqual(u'', r.cssText)
37
38 - def test_iter(self):
39 "CSSMediaRule.__iter__()" 40 m = cssutils.css.CSSMediaRule() 41 m.cssText = '''@media all { /*1*/a { left: 0} b{ top:0} }''' 42 types = [cssutils.css.CSSRule.COMMENT, 43 cssutils.css.CSSRule.STYLE_RULE, 44 cssutils.css.CSSRule.STYLE_RULE] 45 for i, rule in enumerate(m): 46 self.assertEqual(rule, m.cssRules[i]) 47 self.assertEqual(rule.type, types[i]) 48 self.assertEqual(rule.parentRule, m)
49
51 "CSSMediaRule.cssText InvalidModificationErr" 52 self._test_InvalidModificationErr(u'@media')
53
54 - def test_incomplete(self):
55 "CSSMediaRule (incomplete)" 56 tests = { 57 u'@media all { @unknown;': # no } 58 u'@media all {\n @unknown;\n }', 59 u'@media all { a {x:1}': # no } 60 u'@media all {\n a {\n x: 1\n }\n }', 61 } 62 self.do_equal_p(tests) # parse
63
64 - def test_cssRules(self):
65 "CSSMediaRule.cssRules" 66 r = cssutils.css.CSSMediaRule() 67 self.assertEqual([], r.cssRules) 68 sr = cssutils.css.CSSStyleRule() 69 r.cssRules.append(sr) 70 self.assertEqual([sr], r.cssRules) 71 ir = cssutils.css.CSSImportRule() 72 self.assertRaises(xml.dom.HierarchyRequestErr, r.cssRules.append, ir)
73
74 - def test_cssText(self):
75 "CSSMediaRule.cssText" 76 tests = { 77 u'''@media all {}''': u'', 78 u'''@media all{}''': u'', 79 u'''@media/*x*/all{}''': u'', 80 # TODO: 81 #u'@media all { @x{': u'@media all {\n @x{}\n }', 82 u'''@media all { a{ x: 1} }''': u'''@media all {\n a {\n x: 1\n }\n }''', 83 u'''@MEDIA all { a{x:1} }''': u'''@media all {\n a {\n x: 1\n }\n }''', 84 u'''@\\media all { a{x:1} }''': u'''@media all {\n a {\n x: 1\n }\n }''', 85 u'''@media all {@x some;a{color: red;}b{color: green;}}''': 86 u'''@media all { 87 @x some; 88 a { 89 color: red 90 } 91 b { 92 color: green 93 } 94 }''', 95 } 96 self.do_equal_p(tests) 97 self.do_equal_r(tests) 98 99 tests = { 100 u'@media;': xml.dom.SyntaxErr, 101 u'@media all;': xml.dom.SyntaxErr, 102 u'@media all; @x{}': xml.dom.SyntaxErr, 103 # no medialist 104 u'@media {}': xml.dom.SyntaxErr, 105 u'@media/*only comment*/{}': xml.dom.SyntaxErr, 106 107 u'@media all { @charset "x"; a{}}': xml.dom.HierarchyRequestErr, 108 u'@media all { @import "x"; a{}}': xml.dom.HierarchyRequestErr, 109 u'@media all { @media all {} }': xml.dom.HierarchyRequestErr, 110 } 111 self.do_raise_p(tests) 112 self.do_raise_r(tests) 113 114 tests = { 115 # extra stuff 116 u'@media all { , }': xml.dom.SyntaxErr, 117 u'@media all { x{} } a{}': xml.dom.SyntaxErr, 118 } 119 self.do_raise_r(tests) 120 121 m = cssutils.css.CSSMediaRule() 122 m.cssText = u'''@media all {@x; /*1*/a{color: red;}}''' 123 for r in m.cssRules: 124 self.assertEqual(m, r.parentRule) 125 self.assertEqual(m.parentStyleSheet, r.parentStyleSheet) 126 127 cssutils.ser.prefs.useDefaults()
128
129 - def test_deleteRule(self):
130 "CSSMediaRule.deleteRule" 131 # see CSSStyleSheet.deleteRule 132 m = cssutils.css.CSSMediaRule() 133 m.cssText = u'''@media all { 134 @a; 135 /* x */ 136 @b; 137 @c; 138 @d; 139 }''' 140 self.assertEqual(5, m.cssRules.length) 141 self.assertRaises(xml.dom.IndexSizeErr, m.deleteRule, 5) 142 143 # end -1 144 # check parentRule 145 r = m.cssRules[-1] 146 self.assertEqual(m, r.parentRule) 147 m.deleteRule(-1) 148 self.assertEqual(None, r.parentRule) 149 150 self.assertEqual(4, m.cssRules.length) 151 self.assertEqual( 152 u'@media all {\n @a;\n /* x */\n @b;\n @c;\n }', m.cssText) 153 # beginning 154 m.deleteRule(0) 155 self.assertEqual(3, m.cssRules.length) 156 self.assertEqual(u'@media all {\n /* x */\n @b;\n @c;\n }', m.cssText) 157 # middle 158 m.deleteRule(1) 159 self.assertEqual(2, m.cssRules.length) 160 self.assertEqual(u'@media all {\n /* x */\n @c;\n }', m.cssText) 161 # end 162 m.deleteRule(1) 163 self.assertEqual(1, m.cssRules.length) 164 self.assertEqual(u'@media all {\n /* x */\n }', m.cssText)
165
166 - def test_add(self):
167 "CSSMediaRule.add()" 168 # see CSSStyleSheet.add 169 r = cssutils.css.CSSMediaRule() 170 stylerule1 = cssutils.css.CSSStyleRule() 171 stylerule2 = cssutils.css.CSSStyleRule() 172 r.add(stylerule1) 173 r.add(stylerule2) 174 self.assertEqual(r.cssRules[0], stylerule1) 175 self.assertEqual(r.cssRules[1], stylerule2)
176
177 - def test_insertRule(self):
178 "CSSMediaRule.insertRule" 179 # see CSSStyleSheet.insertRule 180 r = cssutils.css.CSSMediaRule() 181 charsetrule = cssutils.css.CSSCharsetRule('ascii') 182 importrule = cssutils.css.CSSImportRule('x') 183 namespacerule = cssutils.css.CSSNamespaceRule() 184 pagerule = cssutils.css.CSSPageRule() 185 mediarule = cssutils.css.CSSMediaRule() 186 unknownrule = cssutils.css.CSSUnknownRule('@x;') 187 stylerule = cssutils.css.CSSStyleRule('a') 188 stylerule.cssText = u'a { x: 1}' 189 comment1 = cssutils.css.CSSComment(u'/*1*/') 190 comment2 = cssutils.css.CSSComment(u'/*2*/') 191 192 # hierarchy 193 self.assertRaises(xml.dom.HierarchyRequestErr, 194 r.insertRule, charsetrule, 0) 195 self.assertRaises(xml.dom.HierarchyRequestErr, 196 r.insertRule, importrule, 0) 197 self.assertRaises(xml.dom.HierarchyRequestErr, 198 r.insertRule, namespacerule, 0) 199 self.assertRaises(xml.dom.HierarchyRequestErr, 200 r.insertRule, pagerule, 0) 201 self.assertRaises(xml.dom.HierarchyRequestErr, 202 r.insertRule, mediarule, 0) 203 204 # start insert 205 r.insertRule(stylerule, 0) 206 self.assertEqual(r, stylerule.parentRule) 207 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 208 # before 209 r.insertRule(comment1, 0) 210 self.assertEqual(r, comment1.parentRule) 211 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 212 # end explicit 213 r.insertRule(unknownrule, 2) 214 self.assertEqual(r, unknownrule.parentRule) 215 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 216 # end implicit 217 r.insertRule(comment2) 218 self.assertEqual(r, comment2.parentRule) 219 self.assertEqual(r.parentStyleSheet, stylerule.parentStyleSheet) 220 self.assertEqual( 221 '@media all {\n /*1*/\n a {\n x: 1\n }\n @x;\n /*2*/\n }', 222 r.cssText) 223 224 # index 225 self.assertRaises(xml.dom.IndexSizeErr, 226 r.insertRule, stylerule, -1) 227 self.assertRaises(xml.dom.IndexSizeErr, 228 r.insertRule, stylerule, r.cssRules.length + 1)
229
230 - def test_media(self):
231 "CSSMediaRule.media" 232 # see CSSImportRule.media 233 234 # setting not allowed 235 self.assertRaises(AttributeError, 236 self.r.__setattr__, 'media', None) 237 self.assertRaises(AttributeError, 238 self.r.__setattr__, 'media', 0) 239 240 # set mediaText instead 241 self.r.media.mediaText = 'print' 242 self.r.insertRule(self.stylerule) 243 self.assertEqual(u'', self.r.cssText) 244 cssutils.ser.prefs.keepEmptyRules = True 245 self.assertEqual(u'@media print {\n a {}\n }', self.r.cssText) 246 cssutils.ser.prefs.useDefaults()
247
248 - def test_reprANDstr(self):
249 "CSSMediaRule.__repr__(), .__str__()" 250 mediaText='tv, print' 251 252 s = cssutils.css.CSSMediaRule(mediaText=mediaText) 253 254 self.assert_(mediaText in str(s)) 255 256 s2 = eval(repr(s)) 257 self.assert_(isinstance(s2, s.__class__)) 258 self.assert_(mediaText == s2.media.mediaText)
259 260 261 if __name__ == '__main__': 262 import unittest 263 unittest.main() 264