Tests common to list and UserList.UserList
from test
import test_support
, seq_tests
class CommonTest(seq_tests
.CommonTest
):
# Iterable arg is optional
self
.assertEqual(self
.type2test([]), self
.type2test())
# Init clears previous values
a
= self
.type2test([1, 2, 3])
self
.assertEqual(a
, self
.type2test([]))
# Init overwrites previous values
a
= self
.type2test([1, 2, 3])
self
.assertEqual(a
, self
.type2test([4, 5, 6]))
# Mutables always return a new object
self
.assertNotEqual(id(a
), id(b
))
self
.assertEqual(str(a0
), str(l0
))
self
.assertEqual(repr(a0
), repr(l0
))
self
.assertEqual(`a2`
, `l2`
)
self
.assertEqual(str(a2
), "[0, 1, 2]")
self
.assertEqual(repr(a2
), "[0, 1, 2]")
self
.assertEqual(str(a2
), "[0, 1, 2, [...], 3]")
self
.assertEqual(repr(a2
), "[0, 1, 2, [...], 3]")
d
= self
.type2test(xrange(200))
d
.extend(xrange(200,400))
fo
= open(test_support
.TESTFN
, "wb")
fo
= open(test_support
.TESTFN
, "rb")
self
.assertEqual(fo
.read(), repr(d
))
os
.remove(test_support
.TESTFN
)
def test_set_subscript(self
):
a
= self
.type2test(range(20))
self
.assertRaises(ValueError, a
.__setitem
__, slice(0, 10, 0), [1,2,3])
self
.assertRaises(TypeError, a
.__setitem
__, slice(0, 10), 1)
self
.assertRaises(ValueError, a
.__setitem
__, slice(0, 10, 2), [1,2])
self
.assertRaises(TypeError, a
.__getitem
__, 'x', 1)
a
[slice(2,10,3)] = [1,2,3]
self
.assertEqual(a
, self
.type2test([0, 1, 1, 3, 4, 2, 6, 7, 3,
9, 10, 11, 12, 13, 14, 15,
a
= self
.type2test(range(20))
self
.assertEqual(list(r
), self
.type2test(range(19, -1, -1)))
self
.assertRaises(StopIteration, r
.next
)
self
.assertEqual(list(reversed(self
.type2test())),
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([0, 100]))
self
.assertEqual(a
, self
.type2test([0, 200]))
self
.assertEqual(a
, self
.type2test([100, 200]))
self
.assertRaises(IndexError, a
.__setitem
__, -3, 200)
self
.assertRaises(IndexError, a
.__setitem
__, 2, 200)
self
.assertRaises(IndexError, a
.__setitem
__, 0, 200)
self
.assertRaises(IndexError, a
.__setitem
__, -1, 200)
self
.assertRaises(TypeError, a
.__setitem
__)
a
= self
.type2test([0,1,2,3,4])
self
.assertEqual(a
, self
.type2test([1,2,3,3,4]))
self
.assertEqual(a
, self
.type2test([5,6,7,3,4]))
self
.assertEqual(a
, self
.type2test([5,6,7,88,99]))
self
.assertEqual(a
, self
.type2test([5,6,7,8,9]))
a
= self
.type2test([0, 1])
a
= self
.type2test([0, 1])
a
= self
.type2test([0, 1])
self
.assertRaises(IndexError, a
.__delitem
__, -3)
self
.assertRaises(IndexError, a
.__delitem
__, 2)
self
.assertRaises(IndexError, a
.__delitem
__, 0)
self
.assertRaises(TypeError, a
.__delitem
__)
self
.assertEqual(aa2
, [-2, -1, 0, 1])
self
.assertEqual(aa2
, [])
a
= self
.type2test([1, 2, 3, 4, 5])
self
.assertEqual(a
, self
.type2test([1, 2, 3, 4, 5, 5]))
a
= self
.type2test([1, 2, 3, 4, 5])
self
.assertEqual(a
, self
.type2test([1, 1, 2, 3, 4, 5]))
a
= self
.type2test([1, 2, 3, 4, 5])
self
.assertEqual(a
, self
.type2test([1, 1, 2, 3, 4, 5, 5]))
self
.assertEqual(a
, self
.type2test(range(10)))
self
.assertRaises(TypeError, a
.__setslice
__, 0, 1, 5)
self
.assertRaises(TypeError, a
.__setslice
__)
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([1]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([1]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([0]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([0]))
a
= self
.type2test([0, 1])
self
.assertEqual(a
, self
.type2test([]))
self
.assertEqual(a
, self
.type2test([0, 1, 2]))
self
.assertRaises(TypeError, a
.append
)
a2
= self
.type2test((0, 1))
self
.assertEqual(a
, a1
+ a2
)
a
.extend(self
.type2test([]))
self
.assertEqual(a
, a1
+ a2
)
self
.assertEqual(a
, self
.type2test([0, 0, 1, 0, 0, 1]))
a
= self
.type2test("spam")
self
.assertEqual(a
, list("spameggs"))
self
.assertRaises(TypeError, a
.extend
, None)
self
.assertRaises(TypeError, a
.extend
)
a
= self
.type2test([0, 1, 2])
self
.assertEqual(a
, [-2, -1, 0, 0, 1, 2])
self
.assertEqual(b
, self
.type2test(["left",-2,-1,0,0,"foo",1,2,"right"]))
self
.assertRaises(TypeError, a
.insert
)
from decimal
import Decimal
a
= self
.type2test([-1, 0, 1])
self
.assertEqual(a
, [-1, 0])
self
.assertRaises(IndexError, a
.pop
, 5)
self
.assertRaises(IndexError, a
.pop
)
self
.assertRaises(TypeError, a
.pop
, 42, 42)
a
= self
.type2test([0, 10, 20, 30, 40])
self
.assertEqual(a
.pop(Decimal(2)), 20)
self
.assertRaises(IndexError, a
.pop
, Decimal(25))
a
= self
.type2test([0, 0, 1])
self
.assertEqual(a
, [0, 0])
self
.assertRaises(ValueError, a
.remove
, 0)
self
.assertRaises(TypeError, a
.remove
)
a
= self
.type2test([0, 1, 2, 3])
self
.assertRaises(BadExc
, a
.remove
, BadCmp())
a
= self
.type2test([0, 1, 2])*3
self
.assertEqual(a
.count(0), 3)
self
.assertEqual(a
.count(1), 3)
self
.assertEqual(a
.count(3), 0)
self
.assertRaises(TypeError, a
.count
)
self
.assertRaises(BadExc
, a
.count
, BadCmp())
u
= self
.type2test([0, 1])
self
.assertEqual(u
.index(0), 0)
self
.assertEqual(u
.index(1), 1)
self
.assertRaises(ValueError, u
.index
, 2)
u
= self
.type2test([-2, -1, 0, 0, 1, 2])
self
.assertEqual(u
.count(0), 2)
self
.assertEqual(u
.index(0), 2)
self
.assertEqual(u
.index(0, 2), 2)
self
.assertEqual(u
.index(-2, -10), 0)
self
.assertEqual(u
.index(0, 3), 3)
self
.assertEqual(u
.index(0, 3, 4), 3)
self
.assertRaises(ValueError, u
.index
, 2, 0, -10)
self
.assertRaises(TypeError, u
.index
)
a
= self
.type2test([0, 1, 2, 3])
self
.assertRaises(BadExc
, a
.index
, BadCmp())
a
= self
.type2test([-2, -1, 0, 0, 1, 2])
self
.assertEqual(a
.index(0), 2)
self
.assertEqual(a
.index(0, 2), 2)
self
.assertEqual(a
.index(0, -4), 2)
self
.assertEqual(a
.index(-2, -10), 0)
self
.assertEqual(a
.index(0, 3), 3)
self
.assertEqual(a
.index(0, -3), 3)
self
.assertEqual(a
.index(0, 3, 4), 3)
self
.assertEqual(a
.index(0, -3, -2), 3)
self
.assertEqual(a
.index(0, -4*sys
.maxint
, 4*sys
.maxint
), 2)
self
.assertRaises(ValueError, a
.index
, 0, 4*sys
.maxint
,-4*sys
.maxint
)
self
.assertRaises(ValueError, a
.index
, 2, 0, -10)
self
.assertRaises(ValueError, a
.index
, 2, 0, 4)
self
.assertEqual(a
, self
.type2test([-2, -1, 0, 1, 2]))
# Test modifying the list during index's iteration
def __init__(self
, victim
):
a
[:] = [EvilCmp(a
) for _
in xrange(100)]
# This used to seg fault before patch #1005778
self
.assertRaises(ValueError, a
.index
, None)
u
= self
.type2test([-2, -1, 0, 1, 2])
self
.assertEqual(u
, [2, 1, 0, -1, -2])
self
.assertRaises(TypeError, u
.reverse
, 42)
u
= self
.type2test([1, 0])
self
.assertEqual(u
, [0, 1])
u
= self
.type2test([2,1,0,-1,-2])
self
.assertEqual(u
, self
.type2test([-2,-1,0,1,2]))
self
.assertRaises(TypeError, u
.sort
, 42, 42)
self
.assertEqual(u
, self
.type2test([2,1,0,-1,-2]))
# The following dumps core in unpatched Python 1.5:
z
= self
.type2test(range(12))
self
.assertRaises(TypeError, z
.sort
, 2)
def selfmodifyingComparison(x
,y
):
self
.assertRaises(ValueError, z
.sort
, selfmodifyingComparison
)
self
.assertRaises(TypeError, z
.sort
, lambda x
, y
: 's')
self
.assertRaises(TypeError, z
.sort
, 42, 42, 42, 42)
u
= self
.type2test("spam")
self
.assertEqual(u
, list("ham"))
super(CommonTest
, self
).test_iadd()
u
= self
.type2test([0, 1])
u
= self
.type2test("spam")
self
.assertEqual(u
, self
.type2test("spameggs"))
self
.assertRaises(TypeError, u
.__iadd
__, None)
u
= self
.type2test([0, 1])
self
.assertEqual(u
, self
.type2test([0, 1, 0, 1, 0, 1]))
self
.assertEqual(u
, self
.type2test([]))
self
.assertEqual(id(s
), oldid
)
def test_extendedslicing(self
):
a
= self
.type2test([0,1,2,3,4])
self
.assertEqual(a
, self
.type2test([1,3]))
a
= self
.type2test(range(5))
self
.assertEqual(a
, self
.type2test([0,2,4]))
a
= self
.type2test(range(5))
self
.assertEqual(a
, self
.type2test([0,2,3,4]))
a
= self
.type2test(range(10))
self
.assertEqual(a
, self
.type2test([1, 2, 3, 4, 5, 6, 7, 8, 9]))
a
= self
.type2test(range(10))
self
.assertEqual(a
, self
.type2test([-1, 1, -1, 3, -1, 5, -1, 7, -1, 9]))
a
= self
.type2test(range(10))
self
.assertEqual(a
, self
.type2test([0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
a
= self
.type2test(range(4))
self
.assertEqual(a
, self
.type2test([3, 2, 1, 0]))
a
= self
.type2test(range(10))
a
[2:3] = self
.type2test(["two", "elements"])
b
[slice(2,3)] = self
.type2test(["two", "elements"])
c
[2:3:] = self
.type2test(["two", "elements"])
a
= self
.type2test(range(10))
self
.assertEqual(a
, self
.type2test([0, 1, 1, 3, 2, 5, 3, 7, 4, 9]))
def test_constructor_exception_handling(self
):
self
.assertRaises(KeyboardInterrupt, list, F())