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