1 """Testcases for cssutils.css.property._Property."""
2 __author__ = '$LastChangedBy: cthedot $'
3 __date__ = '$LastChangedDate: 2008-01-19 20:39:54 +0100 (Sa, 19 Jan 2008) $'
4 __version__ = '$LastChangedRevision: 873 $'
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': u'a: 1 !important',
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 for prio in (None, u''):
160 p.priority = prio
161 self.assertEqual(u'', p.priority)
162 self.assertEqual(u'', p.literalpriority)
163
164 for prio in (u'!important',
165 u'! important',
166 u'!/* x */ important',
167 u'!/* x */ important /**/',
168 u'important',
169 u'IMPORTANT',
170 ur'im\portant'
171 ):
172 p.priority = prio
173 self.assertEqual(u'important', p.priority)
174 if prio.startswith('!'):
175 prio = prio[1:].strip()
176 if u'/*' in prio:
177 check = 'important'
178 else:
179 check = prio
180 self.assertEqual(check, p.literalpriority)
181
182 tests = {
183 u' ': xml.dom.SyntaxErr,
184 u'"\n': xml.dom.SyntaxErr,
185
186 u';': xml.dom.SyntaxErr,
187 u'!important !important': xml.dom.SyntaxErr
188 }
189 self.do_raise_r(tests, att='_setPriority')
190
192 "Property.value"
193 p = cssutils.css.property.Property('top', u'1px')
194 self.assertEqual('1px', p.value)
195 p.value = '2px'
196 self.assertEqual('2px', p.value)
197
198 tests = {
199 u'1px': None,
200 u' 2px': u'2px',
201 u'3px ': u'3px',
202 u' 4px ': u'4px',
203 u'5px 1px': u'5px 1px',
204 }
205 self.do_equal_r(tests, att='value')
206
207 tests = {
208
209 None: xml.dom.SyntaxErr,
210 u'': xml.dom.SyntaxErr,
211 u' ': xml.dom.SyntaxErr,
212 u'"\n': xml.dom.SyntaxErr,
213 u'/*x*/': xml.dom.SyntaxErr,
214
215 u':': xml.dom.SyntaxErr,
216 u';': xml.dom.SyntaxErr,
217 u'!important': xml.dom.SyntaxErr,
218 }
219 self.do_raise_r(tests, att='_setValue')
220
238
239
240 if __name__ == '__main__':
241 import unittest
242 unittest.main()
243