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