summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-03-30 18:02:00 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-03-30 18:02:00 (GMT)
commit0ed3891915425b1af26e26c4c5d350e85e7ea4cf (patch)
tree38862612aaa28e4ebbb3fd4138b13787b725e215 /Lib
parent14a7d6389fb453cca18d61bbe39deff7062bc66f (diff)
downloadcpython-0ed3891915425b1af26e26c4c5d350e85e7ea4cf.zip
cpython-0ed3891915425b1af26e26c4c5d350e85e7ea4cf.tar.gz
cpython-0ed3891915425b1af26e26c4c5d350e85e7ea4cf.tar.bz2
Issue #26492: Added additional tests for exhausted iterators of mutable sequences.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/list_tests.py11
-rw-r--r--Lib/test/test_bytes.py10
-rw-r--r--Lib/test/test_iter.py11
3 files changed, 32 insertions, 0 deletions
diff --git a/Lib/test/list_tests.py b/Lib/test/list_tests.py
index b8d6d6b..ed606db 100644
--- a/Lib/test/list_tests.py
+++ b/Lib/test/list_tests.py
@@ -532,3 +532,14 @@ class CommonTest(seq_tests.CommonTest):
def __iter__(self):
raise KeyboardInterrupt
self.assertRaises(KeyboardInterrupt, list, F())
+
+ def test_exhausted_iterator(self):
+ a = self.type2test([1, 2, 3])
+ exhit = iter(a)
+ empit = iter(a)
+ for x in exhit: # exhaust the iterator
+ next(empit) # not exhausted
+ a.append(9)
+ self.assertEqual(list(exhit), [])
+ self.assertEqual(list(empit), [9])
+ self.assertEqual(a, self.type2test([1, 2, 3, 9]))
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index 82ad451..bdcb88a 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -900,6 +900,16 @@ class ByteArrayTest(BaseBytesTest):
# PyByteArray_AS_STRING() C macro.
self.assertRaises(ValueError, int, bytearray(b''))
+ def test_exhausted_iterator(self):
+ a = self.type2test([1, 2, 3])
+ exhit = iter(a)
+ empit = iter(a)
+ for x in exhit: # exhaust the iterator
+ next(empit) # not exhausted
+ a.append(9)
+ self.assertEqual(list(exhit), [])
+ self.assertEqual(list(empit), [9])
+ self.assertEqual(a, self.type2test([1, 2, 3, 9]))
class AssortedBytesTest(unittest.TestCase):
#
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py
index 4495fa1..cc20865 100644
--- a/Lib/test/test_iter.py
+++ b/Lib/test/test_iter.py
@@ -122,6 +122,17 @@ class TestCase(unittest.TestCase):
def test_seq_class_iter(self):
self.check_iterator(iter(SequenceClass(10)), range(10))
+ def test_mutating_seq_class_exhausted_iter(self):
+ a = SequenceClass(5)
+ exhit = iter(a)
+ empit = iter(a)
+ for x in exhit: # exhaust the iterator
+ next(empit) # not exhausted
+ a.n = 7
+ self.assertEqual(list(exhit), [])
+ self.assertEqual(list(empit), [5, 6])
+ self.assertEqual(list(a), [0, 1, 2, 3, 4, 5, 6])
+
# Test a new_style class with __iter__ but no next() method
def test_new_style_iter_class(self):
class IterClass(object):