Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_index.py

    r2 r391  
    5050        self.assertEqual(self.o.__index__(), 4)
    5151        self.assertEqual(self.n.__index__(), 5)
     52        self.assertEqual(True.__index__(), 1)
     53        self.assertEqual(False.__index__(), 0)
    5254
    5355    def test_subclasses(self):
     
    6163        self.o.ind = 'dumb'
    6264        self.n.ind = 'bad'
    63         self.failUnlessRaises(TypeError, operator.index, self.o)
    64         self.failUnlessRaises(TypeError, operator.index, self.n)
    65         self.failUnlessRaises(TypeError, slice(self.o).indices, 0)
    66         self.failUnlessRaises(TypeError, slice(self.n).indices, 0)
     65        self.assertRaises(TypeError, operator.index, self.o)
     66        self.assertRaises(TypeError, operator.index, self.n)
     67        self.assertRaises(TypeError, slice(self.o).indices, 0)
     68        self.assertRaises(TypeError, slice(self.n).indices, 0)
    6769
    6870
     
    8991        self.assertEqual(self.seq[self.o:self.o2], self.seq[1:3])
    9092        self.assertEqual(self.seq[self.n:self.n2], self.seq[2:4])
     93
     94    def test_slice_bug7532(self):
     95        seqlen = len(self.seq)
     96        self.o.ind = int(seqlen * 1.5)
     97        self.n.ind = seqlen + 2
     98        self.assertEqual(self.seq[self.o:], self.seq[0:0])
     99        self.assertEqual(self.seq[:self.o], self.seq)
     100        self.assertEqual(self.seq[self.n:], self.seq[0:0])
     101        self.assertEqual(self.seq[:self.n], self.seq)
     102        if isinstance(self.seq, ClassicSeq):
     103            return
     104        # These tests fail for ClassicSeq (see bug #7532)
     105        self.o2.ind = -seqlen - 2
     106        self.n2.ind = -int(seqlen * 1.5)
     107        self.assertEqual(self.seq[self.o2:], self.seq)
     108        self.assertEqual(self.seq[:self.o2], self.seq[0:0])
     109        self.assertEqual(self.seq[self.n2:], self.seq)
     110        self.assertEqual(self.seq[:self.n2], self.seq[0:0])
    91111
    92112    def test_repeat(self):
     
    116136        self.n.ind = 'bad'
    117137        indexobj = lambda x, obj: obj.seq[x]
    118         self.failUnlessRaises(TypeError, indexobj, self.o, self)
    119         self.failUnlessRaises(TypeError, indexobj, self.n, self)
     138        self.assertRaises(TypeError, indexobj, self.o, self)
     139        self.assertRaises(TypeError, indexobj, self.n, self)
    120140        sliceobj = lambda x, obj: obj.seq[x:]
    121         self.failUnlessRaises(TypeError, sliceobj, self.o, self)
    122         self.failUnlessRaises(TypeError, sliceobj, self.n, self)
     141        self.assertRaises(TypeError, sliceobj, self.o, self)
     142        self.assertRaises(TypeError, sliceobj, self.n, self)
    123143
    124144
     
    153173        lst = [5, 6, 7, 8, 9, 11]
    154174        l2 = lst.__imul__(self.n)
    155         self.assert_(l2 is lst)
     175        self.assertIs(l2, lst)
    156176        self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3)
     177
     178
     179class _BaseSeq:
     180
     181    def __init__(self, iterable):
     182        self._list = list(iterable)
     183
     184    def __repr__(self):
     185        return repr(self._list)
     186
     187    def __eq__(self, other):
     188        return self._list == other
     189
     190    def __len__(self):
     191        return len(self._list)
     192
     193    def __mul__(self, n):
     194        return self.__class__(self._list*n)
     195    __rmul__ = __mul__
     196
     197    def __getitem__(self, index):
     198        return self._list[index]
     199
     200
     201class _GetSliceMixin:
     202
     203    def __getslice__(self, i, j):
     204        return self._list.__getslice__(i, j)
     205
     206
     207class ClassicSeq(_BaseSeq): pass
     208class NewSeq(_BaseSeq, object): pass
     209class ClassicSeqDeprecated(_GetSliceMixin, ClassicSeq): pass
     210class NewSeqDeprecated(_GetSliceMixin, NewSeq): pass
    157211
    158212
     
    163217    seq = "this is a test"
    164218
     219class ByteArrayTestCase(SeqTestCase):
     220    seq = bytearray("this is a test")
     221
    165222class UnicodeTestCase(SeqTestCase):
    166223    seq = u"this is a test"
     224
     225class ClassicSeqTestCase(SeqTestCase):
     226    seq = ClassicSeq((0,10,20,30,40,50))
     227
     228class NewSeqTestCase(SeqTestCase):
     229    seq = NewSeq((0,10,20,30,40,50))
     230
     231class ClassicSeqDeprecatedTestCase(SeqTestCase):
     232    seq = ClassicSeqDeprecated((0,10,20,30,40,50))
     233
     234class NewSeqDeprecatedTestCase(SeqTestCase):
     235    seq = NewSeqDeprecated((0,10,20,30,40,50))
    167236
    168237
     
    188257        class GetItem(base):
    189258            def __len__(self):
    190                 return maxint #cannot return long here
     259                return maxint # cannot return long here
     260            def __getitem__(self, key):
     261                return key
     262        x = GetItem()
     263        self.assertEqual(x[self.pos], self.pos)
     264        self.assertEqual(x[self.neg], self.neg)
     265        self.assertEqual(x[self.neg:self.pos].indices(maxsize),
     266                         (0, maxsize, 1))
     267        self.assertEqual(x[self.neg:self.pos:1].indices(maxsize),
     268                         (0, maxsize, 1))
     269
     270    def _getslice_helper_deprecated(self, base):
     271        class GetItem(base):
     272            def __len__(self):
     273                return maxint # cannot return long here
    191274            def __getitem__(self, key):
    192275                return key
     
    197280        self.assertEqual(x[self.neg], self.neg)
    198281        self.assertEqual(x[self.neg:self.pos], (maxint+minsize, maxsize))
    199         self.assertEqual(x[self.neg:self.pos:1].indices(maxsize), (0, maxsize, 1))
     282        self.assertEqual(x[self.neg:self.pos:1].indices(maxsize),
     283                         (0, maxsize, 1))
    200284
    201285    def test_getitem(self):
    202286        self._getitem_helper(object)
     287        with test_support.check_py3k_warnings():
     288            self._getslice_helper_deprecated(object)
    203289
    204290    def test_getitem_classic(self):
    205291        class Empty: pass
    206         self._getitem_helper(Empty)
     292        # XXX This test fails (see bug #7532)
     293        #self._getitem_helper(Empty)
     294        with test_support.check_py3k_warnings():
     295            self._getslice_helper_deprecated(Empty)
    207296
    208297    def test_sequence_repeat(self):
    209         self.failUnlessRaises(OverflowError, lambda: "a" * self.pos)
    210         self.failUnlessRaises(OverflowError, lambda: "a" * self.neg)
     298        self.assertRaises(OverflowError, lambda: "a" * self.pos)
     299        self.assertRaises(OverflowError, lambda: "a" * self.neg)
    211300
    212301
     
    216305        ListTestCase,
    217306        TupleTestCase,
     307        ByteArrayTestCase,
    218308        StringTestCase,
    219309        UnicodeTestCase,
     310        ClassicSeqTestCase,
     311        NewSeqTestCase,
    220312        XRangeTestCase,
    221313        OverflowTestCase,
    222314    )
     315    with test_support.check_py3k_warnings():
     316        test_support.run_unittest(
     317            ClassicSeqDeprecatedTestCase,
     318            NewSeqDeprecatedTestCase,
     319        )
     320
    223321
    224322if __name__ == "__main__":
Note: See TracChangeset for help on using the changeset viewer.