2
from test import support
4
maxsize = support.MAX_Py_ssize_t
11
class newstyle(object):
23
class BaseTestCase(unittest.TestCase):
31
self.assertEqual(operator.index(self.o), -2)
32
self.assertEqual(operator.index(self.n), 2)
37
slc = slice(self.o, self.o, self.o)
38
check_slc = slice(1, 1, 1)
39
self.assertEqual(slc.indices(self.o), check_slc.indices(1))
40
slc = slice(self.n, self.n, self.n)
41
check_slc = slice(2, 2, 2)
42
self.assertEqual(slc.indices(self.n), check_slc.indices(2))
44
def test_wrappers(self):
47
self.assertEqual(6 .__index__(), 6)
48
self.assertEqual(-7 .__index__(), -7)
49
self.assertEqual(self.o.__index__(), 4)
50
self.assertEqual(self.n.__index__(), 5)
52
def test_subclasses(self):
54
self.assertEqual(r[TrapInt(5):TrapInt(10)], r[5:10])
55
self.assertEqual(r[TrapLong(5):TrapLong(10)], r[5:10])
56
self.assertEqual(slice(TrapInt()).indices(0), (0,0,1))
57
self.assertEqual(slice(TrapLong(0)).indices(0), (0,0,1))
62
self.failUnlessRaises(TypeError, operator.index, self.o)
63
self.failUnlessRaises(TypeError, operator.index, self.n)
64
self.failUnlessRaises(TypeError, slice(self.o).indices, 0)
65
self.failUnlessRaises(TypeError, slice(self.n).indices, 0)
68
class SeqTestCase(unittest.TestCase):
69
# This test case isn't run directly. It just defines common tests
70
# to the different sequence types below
80
self.assertEqual(self.seq[self.n], self.seq[2])
81
self.assertEqual(self.seq[self.o], self.seq[-2])
88
self.assertEqual(self.seq[self.o:self.o2], self.seq[1:3])
89
self.assertEqual(self.seq[self.n:self.n2], self.seq[2:4])
91
def test_repeat(self):
94
self.assertEqual(self.seq * self.o, self.seq * 3)
95
self.assertEqual(self.seq * self.n, self.seq * 2)
96
self.assertEqual(self.o * self.seq, self.seq * 3)
97
self.assertEqual(self.n * self.seq, self.seq * 2)
99
def test_wrappers(self):
102
self.assertEqual(self.seq.__getitem__(self.o), self.seq[4])
103
self.assertEqual(self.seq.__mul__(self.o), self.seq * 4)
104
self.assertEqual(self.seq.__rmul__(self.o), self.seq * 4)
105
self.assertEqual(self.seq.__getitem__(self.n), self.seq[5])
106
self.assertEqual(self.seq.__mul__(self.n), self.seq * 5)
107
self.assertEqual(self.seq.__rmul__(self.n), self.seq * 5)
109
def test_subclasses(self):
110
self.assertEqual(self.seq[TrapInt()], self.seq[0])
111
self.assertEqual(self.seq[TrapLong()], self.seq[0])
113
def test_error(self):
116
indexobj = lambda x, obj: obj.seq[x]
117
self.failUnlessRaises(TypeError, indexobj, self.o, self)
118
self.failUnlessRaises(TypeError, indexobj, self.n, self)
119
sliceobj = lambda x, obj: obj.seq[x:]
120
self.failUnlessRaises(TypeError, sliceobj, self.o, self)
121
self.failUnlessRaises(TypeError, sliceobj, self.n, self)
124
class ListTestCase(SeqTestCase):
125
seq = [0,10,20,30,40,50]
127
def test_setdelitem(self):
130
lst = list('ab!cdefghi!j')
135
self.assertEqual(lst, list('abYdefghXj'))
137
lst = [5, 6, 7, 8, 9, 10, 11]
138
lst.__setitem__(self.n, "here")
139
self.assertEqual(lst, [5, 6, "here", 8, 9, 10, 11])
140
lst.__delitem__(self.n)
141
self.assertEqual(lst, [5, 6, 8, 9, 10, 11])
143
def test_inplace_repeat(self):
148
self.assertEqual(lst, [6, 4, 6, 4])
150
self.assertEqual(lst, [6, 4, 6, 4] * 3)
152
lst = [5, 6, 7, 8, 9, 11]
153
l2 = lst.__imul__(self.n)
154
self.assert_(l2 is lst)
155
self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3)
158
class TupleTestCase(SeqTestCase):
159
seq = (0,10,20,30,40,50)
161
class StringTestCase(SeqTestCase):
162
seq = "this is a test"
164
class UnicodeTestCase(SeqTestCase):
165
seq = "this is a test"
168
class OverflowTestCase(unittest.TestCase):
174
def test_large_longs(self):
175
self.assertEqual(self.pos.__index__(), self.pos)
176
self.assertEqual(self.neg.__index__(), self.neg)
178
def test_getitem(self):
179
class GetItem(object):
182
def __getitem__(self, key):
185
self.assertEqual(x[self.pos], self.pos)
186
self.assertEqual(x[self.neg], self.neg)
187
self.assertEqual(x[self.neg:self.pos].indices(maxsize),
190
def test_sequence_repeat(self):
191
self.failUnlessRaises(OverflowError, lambda: "a" * self.pos)
192
self.failUnlessRaises(OverflowError, lambda: "a" * self.neg)
196
support.run_unittest(
205
if __name__ == "__main__":