blob: c7150cd216e39c69a037013fc23759fb0b2ce42a [file] [log] [blame]
Armin Rigo5eca19b2006-03-30 11:28:43 +00001import unittest
2from test import test_support
3import operator
4
5class oldstyle:
6 def __index__(self):
7 return self.ind
8
9class newstyle(object):
10 def __index__(self):
11 return self.ind
12
13class ListTestCase(unittest.TestCase):
14 def setUp(self):
15 self.seq = [0,10,20,30,40,50]
16 self.o = oldstyle()
17 self.n = newstyle()
18 self.o2 = oldstyle()
19 self.n2 = newstyle()
20
21 def test_basic(self):
22 self.o.ind = -2
23 self.n.ind = 2
24 assert(self.seq[self.n] == 20)
25 assert(self.seq[self.o] == 40)
26 assert(operator.index(self.o) == -2)
27 assert(operator.index(self.n) == 2)
28
29 def test_error(self):
30 self.o.ind = 'dumb'
31 self.n.ind = 'bad'
32 myfunc = lambda x, obj: obj.seq[x]
33 self.failUnlessRaises(TypeError, operator.index, self.o)
34 self.failUnlessRaises(TypeError, operator.index, self.n)
35 self.failUnlessRaises(TypeError, myfunc, self.o, self)
36 self.failUnlessRaises(TypeError, myfunc, self.n, self)
37
38 def test_slice(self):
39 self.o.ind = 1
40 self.o2.ind = 3
41 self.n.ind = 2
42 self.n2.ind = 4
43 assert(self.seq[self.o:self.o2] == self.seq[1:3])
44 assert(self.seq[self.n:self.n2] == self.seq[2:4])
45
46class TupleTestCase(unittest.TestCase):
47 def setUp(self):
48 self.seq = (0,10,20,30,40,50)
49 self.o = oldstyle()
50 self.n = newstyle()
51 self.o2 = oldstyle()
52 self.n2 = newstyle()
53
54
55 def test_basic(self):
56 self.o.ind = -2
57 self.n.ind = 2
58 assert(self.seq[self.n] == 20)
59 assert(self.seq[self.o] == 40)
60 assert(operator.index(self.o) == -2)
61 assert(operator.index(self.n) == 2)
62
63 def test_error(self):
64 self.o.ind = 'dumb'
65 self.n.ind = 'bad'
66 myfunc = lambda x, obj: obj.seq[x]
67 self.failUnlessRaises(TypeError, operator.index, self.o)
68 self.failUnlessRaises(TypeError, operator.index, self.n)
69 self.failUnlessRaises(TypeError, myfunc, self.o, self)
70 self.failUnlessRaises(TypeError, myfunc, self.n, self)
71
72 def test_slice(self):
73 self.o.ind = 1
74 self.o2.ind = 3
75 self.n.ind = 2
76 self.n2.ind = 4
77 assert(self.seq[self.o:self.o2] == self.seq[1:3])
78 assert(self.seq[self.n:self.n2] == self.seq[2:4])
79
80class StringTestCase(unittest.TestCase):
81 def setUp(self):
82 self.seq = "this is a test"
83 self.o = oldstyle()
84 self.n = newstyle()
85 self.o2 = oldstyle()
86 self.n2 = newstyle()
87
88
89 def test_basic(self):
90 self.o.ind = -2
91 self.n.ind = 2
92 assert(self.seq[self.n] == self.seq[2])
93 assert(self.seq[self.o] == self.seq[-2])
94 assert(operator.index(self.o) == -2)
95 assert(operator.index(self.n) == 2)
96
97 def test_error(self):
98 self.o.ind = 'dumb'
99 self.n.ind = 'bad'
100 myfunc = lambda x, obj: obj.seq[x]
101 self.failUnlessRaises(TypeError, operator.index, self.o)
102 self.failUnlessRaises(TypeError, operator.index, self.n)
103 self.failUnlessRaises(TypeError, myfunc, self.o, self)
104 self.failUnlessRaises(TypeError, myfunc, self.n, self)
105
106 def test_slice(self):
107 self.o.ind = 1
108 self.o2.ind = 3
109 self.n.ind = 2
110 self.n2.ind = 4
111 assert(self.seq[self.o:self.o2] == self.seq[1:3])
112 assert(self.seq[self.n:self.n2] == self.seq[2:4])
113
114
115class UnicodeTestCase(unittest.TestCase):
116 def setUp(self):
117 self.seq = u"this is a test"
118 self.o = oldstyle()
119 self.n = newstyle()
120 self.o2 = oldstyle()
121 self.n2 = newstyle()
122
123
124 def test_basic(self):
125 self.o.ind = -2
126 self.n.ind = 2
127 assert(self.seq[self.n] == self.seq[2])
128 assert(self.seq[self.o] == self.seq[-2])
129 assert(operator.index(self.o) == -2)
130 assert(operator.index(self.n) == 2)
131
132 def test_error(self):
133 self.o.ind = 'dumb'
134 self.n.ind = 'bad'
135 myfunc = lambda x, obj: obj.seq[x]
136 self.failUnlessRaises(TypeError, operator.index, self.o)
137 self.failUnlessRaises(TypeError, operator.index, self.n)
138 self.failUnlessRaises(TypeError, myfunc, self.o, self)
139 self.failUnlessRaises(TypeError, myfunc, self.n, self)
140
141 def test_slice(self):
142 self.o.ind = 1
143 self.o2.ind = 3
144 self.n.ind = 2
145 self.n2.ind = 4
146 assert(self.seq[self.o:self.o2] == self.seq[1:3])
147 assert(self.seq[self.n:self.n2] == self.seq[2:4])
148
149
150def test_main():
151 test_support.run_unittest(
152 ListTestCase,
153 TupleTestCase,
154 StringTestCase,
155 UnicodeTestCase
156 )
157
158if __name__ == "__main__":
159 test_main()