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: doerwalter $' 
  5  __date__ = '$LastChangedDate: 2007-08-02 22:58:23 +0200 (Do, 02 Aug 2007) $' 
  6  __version__ = '0.9.2a5, $LastChangedRevision: 160 $' 
  7   
  8   
  9  import xml.dom 
 10   
 11  import test_cssrule 
 12   
 13  import cssutils 
 14   
 15   
16 -class CSSMediaRuleTestCase(test_cssrule.CSSRuleTestCase):
17
18 - def setUp(self):
19 super(CSSMediaRuleTestCase, self).setUp() 20 self.r = cssutils.css.CSSMediaRule() 21 self.rRO = cssutils.css.CSSMediaRule(readonly=True) 22 self.r_type = cssutils.css.CSSMediaRule.MEDIA_RULE 23 # for tests 24 self.stylerule = cssutils.css.CSSStyleRule() 25 self.stylerule.cssText = u'a {}'
26 27
28 - def test_init(self):
29 "CSSMediaRule.__init__()" 30 super(CSSMediaRuleTestCase, self).test_init() 31 32 r = cssutils.css.CSSMediaRule() 33 self.assertEqual(cssutils.css.CSSRuleList, type(r.cssRules)) 34 self.assertEqual([], r.cssRules) 35 36 self.assertEqual(cssutils.stylesheets.MediaList, type(r.media)) 37 self.assertEqual([], r.media) 38 39 # until any rules 40 self.assertEqual(u'', r.cssText)
41 42
44 "CSSMediaRule.cssText InvalidModificationErr" 45 self._test_InvalidModificationErr(u'@media')
46 47
48 - def test_incomplete(self):
49 "CSSMediaRule (incomplete)" 50 tests = { 51 u'@media all { @unknown;': # no } 52 u'@media all {\n @unknown;\n }', 53 u'@media all { a {}': # no } 54 u'@media all {\n a {}\n }', 55 } 56 self.do_equal_p(tests) # parse
57
58 - def test_cssRules(self):
59 "CSSMediaRule.cssRules" 60 r = cssutils.css.CSSMediaRule() 61 self.assertEqual([], r.cssRules) 62 ir = cssutils.css.CSSImportRule() 63 r.cssRules.append(ir) 64 self.assertEqual([ir], r.cssRules)
65 66
67 - def test_cssText(self):
68 "CSSMediaRule.cssText" 69 tests = { 70 u'''@media all {}''': u'', 71 u'''@media all{}''': u'', 72 u'''@media/*x*/all{}''': u'', 73 # TODO: u'@media all { @x{': u'@media all {\n @x{}\n }', 74 u'''@media all { a{} }''': u'''@media all {\n a {}\n }''', 75 u'''@MEDIA all { a{} }''': u'''@media all {\n a {}\n }''', 76 u'''@\\media all { a{} }''': u'''@media all {\n a {}\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 } 88 self.do_equal_p(tests) 89 self.do_equal_r(tests) 90 91 tests = { 92 u'@media;': xml.dom.SyntaxErr, 93 u'@media all;': xml.dom.SyntaxErr, 94 u'@media all; @x{}': xml.dom.SyntaxErr, 95 # no medialist 96 u'@media {}': xml.dom.SyntaxErr, 97 u'@media/*only comment*/{}': xml.dom.SyntaxErr, 98 99 u'@media all { @charset "x"; a{}}': xml.dom.HierarchyRequestErr, 100 u'@media all { @import "x"; a{}}': xml.dom.HierarchyRequestErr, 101 u'@media all { @media all {} }': xml.dom.HierarchyRequestErr, 102 } 103 self.do_raise_p(tests) 104 self.do_raise_r(tests) 105 106 tests = { 107 # extra stuff 108 u'@media all { , }': xml.dom.SyntaxErr, 109 u'@media all { x{} } a{}': xml.dom.SyntaxErr, 110 } 111 self.do_raise_r(tests) 112 113 m = cssutils.css.CSSMediaRule() 114 m.cssText = u'''@media all {@x; /*1*/a{color: red;}''' 115 for r in m.cssRules: 116 self.assertEqual(m, r.parentRule)
117 118
119 - def test_deleteRule(self):
120 "CSSMediaRule.deleteRule" 121 # see CSSStyleSheet.deleteRule 122 m = cssutils.css.CSSMediaRule() 123 m.cssText = u'''@media all { 124 a {} 125 /* x */ 126 b {} 127 c {} 128 d {} 129 }''' 130 self.assertEqual(5, m.cssRules.length) 131 self.assertRaises(xml.dom.IndexSizeErr, m.deleteRule, 5) 132 133 # end -1 134 # check parentRule 135 r = m.cssRules[-1] 136 self.assertEqual(m, r.parentRule) 137 m.deleteRule(-1) 138 self.assertEqual(None, r.parentRule) 139 140 self.assertEqual(4, m.cssRules.length) 141 self.assertEqual( 142 u'@media all {\n a {}\n /* x */\n b {}\n c {}\n }', m.cssText) 143 # beginning 144 m.deleteRule(0) 145 self.assertEqual(3, m.cssRules.length) 146 self.assertEqual(u'@media all {\n /* x */\n b {}\n c {}\n }', m.cssText) 147 # middle 148 m.deleteRule(1) 149 self.assertEqual(2, m.cssRules.length) 150 self.assertEqual(u'@media all {\n /* x */\n c {}\n }', m.cssText) 151 # end 152 m.deleteRule(1) 153 self.assertEqual(1, m.cssRules.length) 154 self.assertEqual(u'@media all {\n /* x */\n }', m.cssText)
155 156
157 - def test_insertRule(self):
158 "CSSMediaRule.insertRule" 159 # see CSSStyleSheet.insertRule 160 r = cssutils.css.CSSMediaRule() 161 charsetrule = cssutils.css.CSSCharsetRule('ascii') 162 importrule = cssutils.css.CSSImportRule('x') 163 mediarule = cssutils.css.CSSMediaRule() 164 unknownrule = cssutils.css.CSSUnknownRule('@x;') 165 stylerule = cssutils.css.CSSStyleRule('a') 166 comment1 = cssutils.css.CSSComment(u'/*1*/') 167 comment2 = cssutils.css.CSSComment(u'/*2*/') 168 169 # hierarchy 170 self.assertRaises(xml.dom.HierarchyRequestErr, 171 r.insertRule, charsetrule, 0) 172 self.assertRaises(xml.dom.HierarchyRequestErr, 173 r.insertRule, importrule, 0) 174 self.assertRaises(xml.dom.HierarchyRequestErr, 175 r.insertRule, mediarule, 0) 176 177 # start insert 178 r.insertRule(stylerule, 0) 179 self.assertEqual(r, stylerule.parentRule) 180 # before 181 r.insertRule(comment1, 0) 182 self.assertEqual(r, comment1.parentRule) 183 # end explicit 184 r.insertRule(unknownrule, 2) 185 self.assertEqual(r, unknownrule.parentRule) 186 # end implicit 187 r.insertRule(comment2) 188 self.assertEqual(r, comment2.parentRule) 189 self.assertEqual( 190 '@media all {\n /*1*/\n a {}\n @x;\n /*2*/\n }', 191 r.cssText) 192 193 # index 194 self.assertRaises(xml.dom.IndexSizeErr, 195 r.insertRule, stylerule, -1) 196 self.assertRaises(xml.dom.IndexSizeErr, 197 r.insertRule, stylerule, r.cssRules.length + 1)
198 199
200 - def test_media(self):
201 "CSSMediaRule.media" 202 # see CSSImportRule.media 203 204 # setting not allowed 205 self.assertRaises(AttributeError, 206 self.r.__setattr__, 'media', None) 207 self.assertRaises(AttributeError, 208 self.r.__setattr__, 'media', 0) 209 210 # set mediaText instead 211 self.r.media.mediaText = 'print' 212 self.r.insertRule(self.stylerule) 213 self.assertEqual(u'@media print {\n a {}\n }', self.r.cssText)
214 215 216 if __name__ == '__main__': 217 import unittest 218 unittest.main() 219