Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / lib / cssutils / tests / test_cssvariablesdeclaration.py @ 475

History | View | Annotate | Download (10.9 KB)

1
"""Testcases for cssutils.css.cssvariablesdelaration.CSSVariablesDeclaration."""
2
__version__ = '$Id: test_cssstyledeclaration.py 1869 2009-10-17 19:37:40Z cthedot $'
3

    
4
import xml.dom
5
import basetest
6
import cssutils
7

    
8
class CSSVariablesDeclarationTestCase(basetest.BaseTestCase):
9

    
10
    def setUp(self):
11
        self.r = cssutils.css.CSSVariablesDeclaration()
12
        cssutils.ser.prefs.useDefaults()
13

    
14
    def tearDown(self):
15
        cssutils.ser.prefs.useDefaults()
16

    
17
    def test_init(self):
18
        "CSSVariablesDeclaration.__init__()"
19
        v = cssutils.css.CSSVariablesDeclaration()
20
        self.assertEqual(u'', v.cssText)
21
        self.assertEqual(0, v.length)
22
        self.assertEqual(None, v.parentRule)
23

    
24
        v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0')
25
        self.assertEqual(u'x: 0', v.cssText)
26
        self.assertEqual('0', v.getVariableValue('x'))
27

    
28
        rule = cssutils.css.CSSVariablesRule()
29
        v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0',
30
                                                 parentRule=rule)
31
        self.assertEqual(rule, v.parentRule)
32

    
33
    def test__contains__(self):
34
        "CSSVariablesDeclaration.__contains__(name)"
35
        v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0; y: 2')
36
        for test in ('x', 'y'):
37
            self.assertTrue(test in v)
38
            self.assertTrue(test.upper() in v)
39

    
40
        self.assertTrue('z' not in v)
41

    
42
    def test_items(self):
43
        "CSSVariablesDeclaration[variableName]"
44
        v = cssutils.css.CSSVariablesDeclaration()
45
        
46
        value = '0'
47
        v['X'] = value
48
        self.assertEqual(value, v['X'])
49
        self.assertEqual(value, v.getVariableValue('X'))
50
        self.assertEqual(value, v['x'])
51
        self.assertEqual(value, v.getVariableValue('x'))
52

    
53
        self.assertEqual(u'', v['y'])
54
        self.assertEqual(u'', v.getVariableValue('y'))
55

    
56
        v['z'] = '1'
57
        self.assertEqual(2, v.length)
58
        
59
        items = []
60
        # unsorted!
61
        self.assertEqual(sorted(v), ['x', 'z'])
62
        
63
        del v['z']        
64
        self.assertEqual(1, v.length)
65
        self.assertEqual(1, v.length)
66

    
67
        self.assertEqual(u'0', v.removeVariable('x'))
68
        self.assertEqual(u'', v.removeVariable('z'))
69
        self.assertEqual(0, v.length)
70

    
71
        v.cssText = 'x:0; y:1'
72
        keys = []
73
        # unsorted!
74
        for i in range(0, v.length):
75
            keys.append(v.item(i))
76
        self.assertEqual(sorted(keys), [u'x', u'y'])
77

    
78
    def test_keys(self):
79
        "CSSVariablesDeclaration.keys()"
80
        v = cssutils.css.CSSVariablesDeclaration(cssText='x: 0; Y: 2')
81
        self.assertEqual(['x', 'y'], sorted(v.keys()))
82

    
83
    def test_cssText(self):
84
        "CSSVariablesDeclaration.cssText"
85
        # empty
86
        tests = {
87
            u'': u'',
88
            u' ': u'',
89
            u' \t \n  ': u'',
90
            u'x: 1': None,
91
            u'x: "a"': None,
92
            u'x: rgb(1, 2, 3)': None,
93
            u'x: 1px 2px 3px': None,
94

    
95
            u'x:1': u'x: 1',
96
            u'x:1;': u'x: 1',
97

    
98
            u'x  :  1  ': u'x: 1',
99
            u'x  :  1  ;  ': u'x: 1',
100
            
101
            u'x:1;y:2': u'x: 1;\ny: 2',
102
            u'x:1;y:2;': u'x: 1;\ny: 2',
103
            u'x  :  1  ;  y  :  2  ': u'x: 1;\ny: 2',
104
            u'x  :  1  ;  y  :  2  ;  ': u'x: 1;\ny: 2',
105
            
106
            u'/*x*/': u'/*x*/',
107
            u'x555: 5': None,
108
            u'xxx:1;yyy:2': u'xxx: 1;\nyyy: 2',
109
            u'xxx : 1; yyy : 2': u'xxx: 1;\nyyy: 2',
110
            u'x:1;x:2;X:2': u'x: 2',
111
            u'same:1;SAME:2;': u'same: 2',
112
            u'/**/x/**/:/**/1/**/;/**/y/**/:/**/2/**/': 
113
                u'/**/ \n /**/ \n /**/ \n x: 1 /**/;\n/**/ \n /**/ \n /**/ \n y: 2 /**/'
114
            }
115
        self.do_equal_r(tests)
116
 
117
    # TODO: Fix?
118
#    def test_cssText2(self):
119
#        "CSSVariablesDeclaration.cssText"        
120
#        # exception
121
#        tests = {
122
#                 u'top': xml.dom.SyntaxErr,
123
#                 u'top:': xml.dom.SyntaxErr,
124
#                 u'top : ': xml.dom.SyntaxErr,
125
#                 u'top:;': xml.dom.SyntaxErr,
126
#                 u'top 0': xml.dom.SyntaxErr,
127
#                 u'top 0;': xml.dom.SyntaxErr,
128
#    
129
#                 u':': xml.dom.SyntaxErr,
130
#                 u':0': xml.dom.SyntaxErr,
131
#                 u':0;': xml.dom.SyntaxErr,
132
#                 u':;': xml.dom.SyntaxErr,
133
#                 u': ;': xml.dom.SyntaxErr,
134
#    
135
#                 u'0': xml.dom.SyntaxErr,
136
#                 u'0;': xml.dom.SyntaxErr,
137
#    
138
#                 u';': xml.dom.SyntaxErr,
139
#            }
140
#        self.do_raise_r(tests)
141

    
142
    def test_xVariable(self):
143
        "CSSVariablesDeclaration.xVariable()"
144
        v = cssutils.css.CSSVariablesDeclaration()
145
        # unset
146
        self.assertEqual(u'', v.getVariableValue('x'))
147
        # set
148
        v.setVariable('x', '0')
149
        self.assertEqual(u'0', v.getVariableValue('x'))
150
        self.assertEqual(u'0', v.getVariableValue('X'))
151
        self.assertEqual(u'x: 0', v.cssText)
152
        v.setVariable('X', '0')
153
        self.assertEqual(u'0', v.getVariableValue('x'))
154
        self.assertEqual(u'0', v.getVariableValue('X'))
155
        self.assertEqual(u'x: 0', v.cssText)
156
        # remove
157
        self.assertEqual(u'0', v.removeVariable('x'))
158
        self.assertEqual(u'', v.removeVariable('x'))
159
        self.assertEqual(u'', v.getVariableValue('x'))
160
        self.assertEqual(u'', v.cssText)
161

    
162

    
163
    def test_imports(self):
164
        "CSSVariables imports"
165
        def fetcher(url):
166
            url = url.replace('\\', '/')
167
            url = url[url.rfind('/')+1:]
168
            return (None, {
169
                '3.css': '''
170
                    @variables {
171
                        over3-2-1-0: 3;
172
                        over3-2-1: 3;
173
                        over3-2: 3;
174
                        over3-2-0: 3;
175
                        over3-1: 3;
176
                        over3-1-0: 3;
177
                        over3-0: 3;
178
                        local3: 3;
179
                    }
180
                
181
                ''',
182
                '2.css': '''
183
                    @variables {
184
                        over3-2-1-0: 2;
185
                        over3-2-1: 2;
186
                        over3-2-0: 2;
187
                        over3-2: 2;
188
                        over2-1: 2;
189
                        over2-1-0: 2;
190
                        over2-0: 2;
191
                        local2: 2;
192
                    }
193
                
194
                ''',
195
                '1.css': '''
196
                    @import "3.css";
197
                    @import "2.css";
198
                    @variables {
199
                        over3-2-1-0: 1;
200
                        over3-2-1: 1;
201
                        over3-1: 1;
202
                        over3-1-0: 1;
203
                        over2-1: 1;
204
                        over2-1-0: 1;
205
                        over1-0: 1;
206
                        local1: 1;
207
                    }
208
                
209
                '''
210
                }[url])
211
        
212
        css = '''
213
            @import "1.css";
214
            @variables {
215
                over3-2-1-0: 0;
216
                over3-2-0: 0;
217
                over3-1-0: 0;
218
                over2-1-0: 0;
219
                over3-0: 0;
220
                over2-0: 0;
221
                over1-0: 0;
222
                local0: 0;
223
            }
224
            a {
225
                local0: var(local0);
226
                local1: var(local1);
227
                local2: var(local2);
228
                local3: var(local3);
229
                over1-0: var(over1-0);
230
                over2-0: var(over2-0);
231
                over3-0: var(over3-0);
232
                over2-1: var(over2-1);
233
                over3-1: var(over3-1);
234
                over3-2: var(over3-2);
235
                over2-1-0: var(over2-1-0);
236
                over3-2-0: var(over3-2-0);
237
                over3-2-1: var(over3-2-1);
238
                over3-2-1-0: var(over3-2-1-0);
239
            }
240
        '''
241
        p = cssutils.CSSParser(fetcher=fetcher)
242
        s = p.parseString(css)
243

    
244
        # only these in rule of this sheet        
245
        self.assertEqual(s.cssRules[1].variables.length, 8)
246
        # but all vars in s available!
247
        self.assertEqual(s.variables.length, 15)
248
        self.assertEqual([u'local0', u'local1', u'local2', u'local3', 
249
                          u'over1-0', u'over2-0', u'over2-1', u'over2-1-0', 
250
                          u'over3-0', u'over3-1', u'over3-1-0', u'over3-2', 
251
                          u'over3-2-0', u'over3-2-1', u'over3-2-1-0'],
252
                          sorted(s.variables.keys()))
253
        
254
        
255
        # test with variables rule
256
        cssutils.ser.prefs.resolveVariables = False
257
        self.assertEqual(s.cssText, '''@import "1.css";
258
@variables {
259
    over3-2-1-0: 0;
260
    over3-2-0: 0;
261
    over3-1-0: 0;
262
    over2-1-0: 0;
263
    over3-0: 0;
264
    over2-0: 0;
265
    over1-0: 0;
266
    local0: 0
267
    }
268
a {
269
    local0: var(local0);
270
    local1: var(local1);
271
    local2: var(local2);
272
    local3: var(local3);
273
    over1-0: var(over1-0);
274
    over2-0: var(over2-0);
275
    over3-0: var(over3-0);
276
    over2-1: var(over2-1);
277
    over3-1: var(over3-1);
278
    over3-2: var(over3-2);
279
    over2-1-0: var(over2-1-0);
280
    over3-2-0: var(over3-2-0);
281
    over3-2-1: var(over3-2-1);
282
    over3-2-1-0: var(over3-2-1-0)
283
    }'''.encode())
284
        
285
        # test with resolved vars
286
        cssutils.ser.prefs.resolveVariables = True
287
        self.assertEqual(s.cssText, '''@import "1.css";
288
a {
289
    local0: 0;
290
    local1: 1;
291
    local2: 2;
292
    local3: 3;
293
    over1-0: 0;
294
    over2-0: 0;
295
    over3-0: 0;
296
    over2-1: 1;
297
    over3-1: 1;
298
    over3-2: 2;
299
    over2-1-0: 0;
300
    over3-2-0: 0;
301
    over3-2-1: 1;
302
    over3-2-1-0: 0
303
    }'''.encode())
304
        
305

    
306
        s = cssutils.resolveImports(s)
307
        self.assertEqual(s.cssText, '''/* START @import "1.css" */
308
/* START @import "3.css" */
309
/* START @import "2.css" */
310
a {
311
    local0: 0;
312
    local1: 1;
313
    local2: 2;
314
    local3: 3;
315
    over1-0: 0;
316
    over2-0: 0;
317
    over3-0: 0;
318
    over2-1: 1;
319
    over3-1: 1;
320
    over3-2: 2;
321
    over2-1-0: 0;
322
    over3-2-0: 0;
323
    over3-2-1: 1;
324
    over3-2-1-0: 0
325
    }'''.encode())
326
    
327
    def test_parentRule(self):
328
        "CSSVariablesDeclaration.parentRule"
329
        s = cssutils.parseString(u'@variables { a:1}')
330
        r = s.cssRules[0]
331
        d = r.variables 
332
        self.assertEqual(r, d.parentRule)
333
        
334
        d2 = cssutils.css.CSSVariablesDeclaration('b: 2')
335
        r.variables = d2
336
        self.assertEqual(r, d2.parentRule)
337
        
338
    def test_reprANDstr(self):
339
        "CSSVariablesDeclaration.__repr__(), .__str__()"
340
        s = cssutils.css.CSSVariablesDeclaration(cssText='a:1;b:2')
341

    
342
        self.assertTrue("2" in str(s)) # length
343

    
344
        s2 = eval(repr(s))
345
        self.assertTrue(isinstance(s2, s.__class__))
346

    
347

    
348
if __name__ == '__main__':
349
    import unittest
350
    unittest.main()