1 """Testcases for cssutils.css.property._Property."""
2 __author__ = '$LastChangedBy: cthedot $'
3 __date__ = '$LastChangedDate: 2008-01-12 22:36:38 +0100 (Sa, 12 Jan 2008) $'
4 __version__ = '$LastChangedRevision: 833 $'
5
6 import xml.dom
7 import basetest
8 import cssutils
9
11
14
16 "Property.__init__()"
17 p = cssutils.css.property.Property('top', '1px')
18 self.assertEqual('top: 1px', p.cssText)
19 self.assertEqual('top', p.literalname)
20 self.assertEqual('top', p.name)
21 self.assertEqual('1px', p.value)
22 self.assertEqual('1px', p.cssValue.cssText)
23 self.assertEqual(u'', p.priority)
24 self.assertEqual(True, p.valid)
25 self.assertEqual(True, p.wellformed)
26
27 self.assertEqual([u'top'], p.seqs[0])
28 self.assertEqual(type(cssutils.css.CSSPrimitiveValue(cssText="2px")), type(p.seqs[1]))
29 self.assertEqual([], p.seqs[2])
30
31 self.assertEqual(True, p.valid)
32
33
34 p = cssutils.css.property.Property('top', _mediaQuery=True)
35 self.assertEqual('top', p.cssText)
36 self.assertEqual('top', p.literalname)
37 self.assertEqual('top', p.name)
38 self.assertEqual('', p.value)
39 self.assertEqual('', p.cssValue.cssText)
40 self.assertEqual(u'', p.priority)
41 self.assertEqual(True, p.valid)
42 p.cssValue.cssText = '1px'
43 self.assertEqual('top: 1px', p.cssText)
44 p.cssValue = ''
45 self.assertEqual('top', p.cssText)
46
47 - def test_cssText(self):
48 "Property.cssText"
49 p = cssutils.css.property.Property()
50
51 tests = {
52 u'a: 1': None,
53 u'a: 1px 2px': None,
54 u'a: 1 !important': None,
55 u'a: 1 !IMPORTANT': u'a: 1 !important',
56 u'a: 1 !impor\\tant': None,
57
58 u'font: normal 1em/1.5 serif': None,
59 u'font: normal 1em/serif': None
60 }
61 self.do_equal_r(tests)
62
63 tests = {
64 u'': (xml.dom.SyntaxErr,
65 u'''Property: No property name found: u''.'''),
66 u':': (xml.dom.SyntaxErr,
67 u'''Property: No property name found: u':'. [1:1: :]'''),
68 u'a': (xml.dom.SyntaxErr,
69 u'''Property: No ":" after name found: u'a' [1:1: a]'''),
70 u'a !': (xml.dom.SyntaxErr,
71 u'''Property: No ":" after name found: u'a !' [1:3: !]'''),
72 u'a:': (xml.dom.SyntaxErr,
73 u'''Property: No property value found: u'a:'. [1:2: :]'''),
74 u'a: ': (xml.dom.SyntaxErr,
75 u'''CSSValue: Unknown syntax or no value: u' '.'''),
76 u'a: 1!': (xml.dom.SyntaxErr,
77 u'''Property: Invalid priority: u'!'.'''),
78 u'a: 1!importantX': (xml.dom.SyntaxErr,
79 u'''Property: Unexpected ident. [1:6: importantX]'''),
80 u'a:!important': (xml.dom.SyntaxErr,
81 u'''CSSValue: Unknown syntax or no value: u''.'''),
82 }
83 for test in tests:
84 ecp, msg = tests[test]
85 self.assertRaisesMsg(ecp, msg, p._setCssText, test)
86
88 "Property.name"
89 p = cssutils.css.property.Property('top', '1px')
90 p.name = 'left'
91 self.assertEqual('left', p.name)
92
93 tests = {
94 u'top': None,
95 u' top': u'top',
96 u'top ': u'top',
97 u' top ': u'top',
98 u'/*x*/ top ': u'top',
99 u' top /*x*/': u'top',
100 u'/*x*/top/*x*/': u'top',
101 u'\\x': u'x',
102 u'a\\010': u'a\x10',
103 u'a\\01': u'a\x01'
104 }
105 self.do_equal_r(tests, att='name')
106
107 tests = {
108 u'': xml.dom.SyntaxErr,
109 u' ': xml.dom.SyntaxErr,
110 u'"\n': xml.dom.SyntaxErr,
111 u'/*x*/': xml.dom.SyntaxErr,
112 u':': xml.dom.SyntaxErr,
113 u';': xml.dom.SyntaxErr,
114 u'top:': xml.dom.SyntaxErr,
115 u'top;': xml.dom.SyntaxErr,
116 }
117 self.do_raise_r(tests, att='_setName')
118
119 p = cssutils.css.property.Property(r'c\olor', 'red')
120 self.assertEqual(r'c\olor', p.literalname)
121 self.assertEqual('color', p.name)
122 self.assertEqual('color', p.normalname)
123
130
132 "Property.valid"
133 p = cssutils.css.property.Property('left', '1px', '')
134
135 self.assertEqual(p.valid, True)
136 self.assertEqual(p.cssValue.valid, True)
137
138 p.name = 'color'
139 self.assertEqual(p.valid, False)
140 self.assertEqual(p.cssValue.valid, False)
141
142 p.name = 'top'
143 self.assertEqual(p.valid, True)
144 self.assertEqual(p.cssValue.valid, True)
145
146 p.value = 'red'
147 self.assertEqual(p.valid, False)
148 self.assertEqual(p.cssValue.valid,False)
149
151 "Property.cssValue"
152 pass
153
154
156 "Property.priority"
157 p = cssutils.css.property.Property('top', '1px', '!important')
158
159 p.priority = ''
160 self.assertEqual('', p.priority)
161
162 p.priority = '!important'
163 self.assertEqual('!important', p.priority)
164
165 p.priority = None
166 self.assertEqual('', p.priority)
167
168 p.priority = '! important'
169 self.assertEqual('!important', p.priority)
170
171 p.priority = '!/*1*/important'
172 self.assertEqual('! /*1*/ important', p.priority)
173
174 tests = {
175 u' ': xml.dom.SyntaxErr,
176 u'"\n': xml.dom.SyntaxErr,
177 u'important': xml.dom.SyntaxErr,
178 u';': xml.dom.SyntaxErr,
179 u'!important !important': xml.dom.SyntaxErr
180 }
181 self.do_raise_r(tests, att='_setPriority')
182
184 "Property.value"
185 p = cssutils.css.property.Property('top', u'1px')
186 self.assertEqual('1px', p.value)
187 p.value = '2px'
188 self.assertEqual('2px', p.value)
189
190 tests = {
191 u'1px': None,
192 u' 2px': u'2px',
193 u'3px ': u'3px',
194 u' 4px ': u'4px',
195 u'5px 1px': u'5px 1px',
196 }
197 self.do_equal_r(tests, att='value')
198
199 tests = {
200
201 None: xml.dom.SyntaxErr,
202 u'': xml.dom.SyntaxErr,
203 u' ': xml.dom.SyntaxErr,
204 u'"\n': xml.dom.SyntaxErr,
205 u'/*x*/': xml.dom.SyntaxErr,
206
207 u':': xml.dom.SyntaxErr,
208 u';': xml.dom.SyntaxErr,
209 u'!important': xml.dom.SyntaxErr,
210 }
211 self.do_raise_r(tests, att='_setValue')
212
230
231
232 if __name__ == '__main__':
233 import unittest
234 unittest.main()
235