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_iter.py

    r2 r391  
    22
    33import unittest
    4 from test.test_support import run_unittest, TESTFN, unlink, have_unicode
     4from test.test_support import run_unittest, TESTFN, unlink, have_unicode, \
     5                              check_py3k_warnings, cpython_only
    56
    67# Test result of triple loop (too big to inline)
     
    7677        it = iter(seq)
    7778        it2 = iter(it)
    78         self.assert_(it is it2)
     79        self.assertTrue(it is it2)
    7980
    8081    # Test that for loops over iterators work
     
    120121    def test_seq_class_iter(self):
    121122        self.check_iterator(iter(SequenceClass(10)), range(10))
     123
     124    # Test a new_style class with __iter__ but no next() method
     125    def test_new_style_iter_class(self):
     126        class IterClass(object):
     127            def __iter__(self):
     128                return self
     129        self.assertRaises(TypeError, iter, IterClass())
    122130
    123131    # Test two-argument iter() with callable instance
     
    390398    # Test map()'s use of iterators.
    391399    def test_builtin_map(self):
    392         self.assertEqual(map(None, SequenceClass(5)), range(5))
    393400        self.assertEqual(map(lambda x: x+1, SequenceClass(5)), range(1, 6))
    394401
    395402        d = {"one": 1, "two": 2, "three": 3}
    396         self.assertEqual(map(None, d), d.keys())
    397403        self.assertEqual(map(lambda k, d=d: (k, d[k]), d), d.items())
    398404        dkeys = d.keys()
     
    401407                     i < len(d) and dkeys[i] or None)
    402408                    for i in range(5)]
    403         self.assertEqual(map(None, d,
    404                                    SequenceClass(5),
    405                                    iter(d.iterkeys())),
    406                          expected)
     409
     410        # Deprecated map(None, ...)
     411        with check_py3k_warnings():
     412            self.assertEqual(map(None, SequenceClass(5)), range(5))
     413            self.assertEqual(map(None, d), d.keys())
     414            self.assertEqual(map(None, d,
     415                                       SequenceClass(5),
     416                                       iter(d.iterkeys())),
     417                             expected)
    407418
    408419        f = open(TESTFN, "w")
     
    500511
    501512    # Test reduces()'s use of iterators.
    502     def test_builtin_reduce(self):
     513    def test_deprecated_builtin_reduce(self):
     514        with check_py3k_warnings():
     515            self._test_builtin_reduce()
     516
     517    def _test_builtin_reduce(self):
    503518        from operator import add
    504519        self.assertEqual(reduce(add, SequenceClass(5)), 10)
     
    560575        for sc5 in IteratingSequenceClass(5), SequenceClass(5):
    561576            for i in range(5):
    562                 self.assert_(i in sc5)
     577                self.assertIn(i, sc5)
    563578            for i in "abc", -1, 5, 42.42, (3, 4), [], {1: 1}, 3-12j, sc5:
    564                 self.assert_(i not in sc5)
     579                self.assertNotIn(i, sc5)
    565580
    566581        self.assertRaises(TypeError, lambda: 3 in 12)
     
    569584        d = {"one": 1, "two": 2, "three": 3, 1j: 2j}
    570585        for k in d:
    571             self.assert_(k in d)
    572             self.assert_(k not in d.itervalues())
     586            self.assertIn(k, d)
     587            self.assertNotIn(k, d.itervalues())
    573588        for v in d.values():
    574             self.assert_(v in d.itervalues())
    575             self.assert_(v not in d)
     589            self.assertIn(v, d.itervalues())
     590            self.assertNotIn(v, d)
    576591        for k, v in d.iteritems():
    577             self.assert_((k, v) in d.iteritems())
    578             self.assert_((v, k) not in d.iteritems())
     592            self.assertIn((k, v), d.iteritems())
     593            self.assertNotIn((v, k), d.iteritems())
    579594
    580595        f = open(TESTFN, "w")
     
    587602            for chunk in "abc":
    588603                f.seek(0, 0)
    589                 self.assert_(chunk not in f)
     604                self.assertNotIn(chunk, f)
    590605                f.seek(0, 0)
    591                 self.assert_((chunk + "\n") in f)
     606                self.assertIn((chunk + "\n"), f)
    592607        finally:
    593608            f.close()
     
    779794        self.assertEqual((a, b, c), (0, 1, 42))
    780795
    781         # Test reference count behavior
    782 
     796
     797    @cpython_only
     798    def test_ref_counting_behavior(self):
    783799        class C(object):
    784800            count = 0
     
    878894        self.assertEqual(list(b), [])
    879895
     896    def test_3720(self):
     897        # Avoid a crash, when an iterator deletes its next() method.
     898        class BadIterator(object):
     899            def __iter__(self):
     900                return self
     901            def next(self):
     902                del BadIterator.next
     903                return 1
     904
     905        try:
     906            for i in BadIterator() :
     907                pass
     908        except TypeError:
     909            pass
     910
     911    def test_extending_list_with_iterator_does_not_segfault(self):
     912        # The code to extend a list with an iterator has a fair
     913        # amount of nontrivial logic in terms of guessing how
     914        # much memory to allocate in advance, "stealing" refs,
     915        # and then shrinking at the end.  This is a basic smoke
     916        # test for that scenario.
     917        def gen():
     918            for i in range(500):
     919                yield i
     920        lst = [0] * 500
     921        for i in range(240):
     922            lst.pop(0)
     923        lst.extend(gen())
     924        self.assertEqual(len(lst), 760)
     925
    880926
    881927def test_main():
Note: See TracChangeset for help on using the changeset viewer.