1 """Testcases for cssutils.css.selectorlist.SelectorList."""
2 __author__ = '$LastChangedBy: cthedot $'
3 __date__ = '$LastChangedDate: 2008-01-26 22:48:11 +0100 (Sa, 26 Jan 2008) $'
4 __version__ = '$LastChangedRevision: 940 $'
5
6 import xml.dom
7 import basetest
8 import cssutils
9 from cssutils.css.selectorlist import SelectorList
10
12
15
17 "SelectorList.__init__() and .length"
18 s = SelectorList()
19 self.assertEqual(0, s.length)
20
21 s = SelectorList('a, b')
22 self.assertEqual(2, s.length)
23 self.assertEqual(u'a, b', s.selectorText)
24
25 s = SelectorList(selectorText='a')
26 self.assertEqual(1, s.length)
27 self.assertEqual(u'a', s.selectorText)
28
29 s = SelectorList(selectorText=('p|a', {'p': 'uri'}))
30 self.assertEqual(1, s.length)
31 self.assertEqual(u'p|a', s.selectorText)
32
33 s = SelectorList(selectorText=('p|a', (('p', 'uri'),)))
34 self.assertEqual(1, s.length)
35 self.assertEqual(u'p|a', s.selectorText)
36
43
44 style = cssutils.css.CSSStyleRule('a, b')
45 check(style)
46
47
48 style.selectorList.append(cssutils.css.Selector('x'))
49 check(style)
50
51
52 style.selectorList = cssutils.css.SelectorList('x')
53 check(style)
54
55
56 style.selectorText = ('x, y')
57 check(style)
58
60 "SelectorList.appendSelector() and .length"
61 s = SelectorList()
62 s.appendSelector('a')
63 self.assertEqual(1, s.length)
64
65 self.assertRaises(xml.dom.InvalidModificationErr,
66 s.appendSelector, 'b,')
67 self.assertEqual(1, s.length)
68
69 self.assertEqual(u'a', s.selectorText)
70
71 s.append('b')
72 self.assertEqual(2, s.length)
73 self.assertEqual(u'a, b', s.selectorText)
74
75 s.append('a')
76 self.assertEqual(2, s.length)
77 self.assertEqual(u'b, a', s.selectorText)
78
79
80 self.assertRaises(IndexError, s.__setitem__, 4, 'x')
81 s[1] = 'c'
82 self.assertEqual(2, s.length)
83 self.assertEqual(u'b, c', s.selectorText)
84
85
86
87
88
89 s = SelectorList()
90 s.appendSelector(('p|a', {'p': 'uri', 'x': 'xxx'}))
91 self.assertEqual(u'p|a', s.selectorText)
92
93 self.assertRaises(xml.dom.NamespaceErr, s.append, 'x|a')
94
95 self.assertRaises(xml.dom.NamespaceErr, s.append, 'y|a')
96
97 s.append('p|b')
98 self.assertEqual(u'p|a, p|b', s.selectorText)
99
101 "SelectorList.selectorText"
102 s = SelectorList()
103 s.selectorText = u'a, b'
104 self.assertEqual(u'a, b', s.selectorText)
105 self.assertRaises(xml.dom.SyntaxErr, s._setSelectorText, u',')
106
107 self.assertEqual(u'a, b', s.selectorText)
108
109 tests = {
110 u'*': None,
111 u'/*1*/*': None,
112 u'/*1*/*, a': None,
113 u'a, b': None,
114 u'a ,b': u'a, b',
115 u'a , b': u'a, b',
116 u'a, b, c': u'a, b, c',
117 u'#a, x#a, .b, x.b': u'#a, x#a, .b, x.b',
118 (u'[p|a], p|*', (('p', 'uri'),)): u'[p|a], p|*',
119 }
120
121 self.do_equal_r(tests, att='selectorText')
122
123 tests = {
124 u'x|*': xml.dom.NamespaceErr,
125 u'': xml.dom.SyntaxErr,
126 u' ': xml.dom.SyntaxErr,
127 u',': xml.dom.SyntaxErr,
128 u'a,': xml.dom.SyntaxErr,
129 u',a': xml.dom.SyntaxErr,
130 u'/* 1 */,a': xml.dom.SyntaxErr,
131 }
132
133 self.do_raise_r(tests, att='_setSelectorText')
134
136 "SelectorList.__repr__(), .__str__()"
137 sel=(u'a, p|b', { 'p': 'uri'})
138
139 s = cssutils.css.SelectorList(selectorText=sel)
140
141 self.assert_(sel[0] in str(s))
142
143 s2 = eval(repr(s))
144 self.assert_(isinstance(s2, s.__class__))
145 self.assertEqual(sel[0], s2.selectorText)
146
147
148 if __name__ == '__main__':
149 import unittest
150 unittest.main()
151