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_selectorlist.py @ 475

History | View | Annotate | Download (4.52 KB)

1
"""Testcases for cssutils.css.selectorlist.SelectorList."""
2

    
3
import xml.dom
4
import basetest
5
import cssutils
6
from cssutils.css.selectorlist import SelectorList
7

    
8
class SelectorListTestCase(basetest.BaseTestCase):
9

    
10
    def setUp(self):
11
        self.r = SelectorList()
12

    
13
    def test_init(self):
14
        "SelectorList.__init__() and .length"
15
        s = SelectorList()
16
        self.assertEqual(0, s.length)
17

    
18
        s = SelectorList('a, b')
19
        self.assertEqual(2, s.length)
20
        self.assertEqual(u'a, b', s.selectorText)
21

    
22
        s = SelectorList(selectorText='a')
23
        self.assertEqual(1, s.length)
24
        self.assertEqual(u'a', s.selectorText)
25

    
26
        s = SelectorList(selectorText=('p|a', {'p': 'uri'})) # n-dict
27
        self.assertEqual(1, s.length)
28
        self.assertEqual(u'p|a', s.selectorText)
29

    
30
        s = SelectorList(selectorText=('p|a', (('p', 'uri'),))) # n-tuples
31
        self.assertEqual(1, s.length)
32
        self.assertEqual(u'p|a', s.selectorText)
33

    
34
    def test_parentRule(self):
35
        "Selector.parentRule"
36
        def check(style):
37
            self.assertEqual(style, style.selectorList.parentRule)
38
            for sel in style.selectorList:
39
                self.assertEqual(style.selectorList, sel.parent)
40
        
41
        style = cssutils.css.CSSStyleRule('a, b')
42
        check(style)
43

    
44
        # add new selector
45
        style.selectorList.append(cssutils.css.Selector('x'))
46
        check(style)
47

    
48
        # replace selectorList
49
        style.selectorList = cssutils.css.SelectorList('x')
50
        check(style)
51

    
52
        # replace selectorText
53
        style.selectorText = ('x, y')
54
        check(style)
55
            
56
    def test_appendSelector(self):
57
        "SelectorList.appendSelector() and .length"
58
        s = SelectorList()
59
        s.appendSelector('a')
60
        self.assertEqual(1, s.length)
61

    
62
        self.assertRaises(xml.dom.InvalidModificationErr,
63
                          s.appendSelector, 'b,')
64
        self.assertEqual(1, s.length)
65

    
66
        self.assertEqual(u'a', s.selectorText)
67

    
68
        s.append('b')
69
        self.assertEqual(2, s.length)
70
        self.assertEqual(u'a, b', s.selectorText)
71

    
72
        s.append('a')
73
        self.assertEqual(2, s.length)
74
        self.assertEqual(u'b, a', s.selectorText)
75
        
76
        # __setitem__    
77
        self.assertRaises(IndexError, s.__setitem__, 4, 'x')
78
        s[1] = 'c'
79
        self.assertEqual(2, s.length)
80
        self.assertEqual(u'b, c', s.selectorText)
81
        # TODO: remove duplicates?
82
#        s[0] = 'c'
83
#        self.assertEqual(1, s.length)
84
#        self.assertEqual(u'c', s.selectorText)
85

    
86
        s = SelectorList()
87
        s.appendSelector(('p|a', {'p': 'uri', 'x': 'xxx'}))
88
        self.assertEqual(u'p|a', s.selectorText)
89
        # x gets lost as not used
90
        self.assertRaises(xml.dom.NamespaceErr, s.append, 'x|a')
91
        # not set at all
92
        self.assertRaises(xml.dom.NamespaceErr, s.append, 'y|a')
93
        # but p is retained
94
        s.append('p|b')
95
        self.assertEqual(u'p|a, p|b', s.selectorText)
96

    
97
    def test_selectorText(self):
98
        "SelectorList.selectorText"
99
        s = SelectorList()
100
        s.selectorText = u'a, b'
101
        self.assertEqual(u'a, b', s.selectorText)
102
        self.assertRaises(xml.dom.SyntaxErr, s._setSelectorText, u',')
103
        # not changed as invalid!
104
        self.assertEqual(u'a, b', s.selectorText)
105

    
106
        tests = {
107
            u'*': None,
108
            u'/*1*/*': None,
109
            u'/*1*/*, a': None,
110
            u'a, b': None,
111
            u'a ,b': u'a, b',
112
            u'a , b': u'a, b',
113
            u'a, b, c': u'a, b, c',
114
            u'#a, x#a, .b, x.b': u'#a, x#a, .b, x.b',
115
            (u'[p|a], p|*', (('p', 'uri'),)): u'[p|a], p|*',
116
            }
117
        # do not parse as not complete
118
        self.do_equal_r(tests, att='selectorText')
119

    
120
        tests = {
121
            u'x|*': xml.dom.NamespaceErr,
122
            u'': xml.dom.SyntaxErr,
123
            u' ': xml.dom.SyntaxErr,
124
            u',': xml.dom.SyntaxErr,
125
            u'a,': xml.dom.SyntaxErr,
126
            u',a': xml.dom.SyntaxErr,
127
            u'/* 1 */,a': xml.dom.SyntaxErr,
128
            }
129
        # only set as not complete
130
        self.do_raise_r(tests, att='_setSelectorText')
131

    
132
    def test_reprANDstr(self):
133
        "SelectorList.__repr__(), .__str__()"
134
        sel=(u'a, p|b', { 'p': 'uri'})
135
        
136
        s = cssutils.css.SelectorList(selectorText=sel)
137

    
138
        self.assertTrue(sel[0] in str(s))
139

    
140
        s2 = eval(repr(s))
141
        self.assertTrue(isinstance(s2, s.__class__))
142
        self.assertEqual(sel[0], s2.selectorText)
143

    
144

    
145
if __name__ == '__main__':
146
    import unittest
147
    unittest.main()