diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-03-30 18:02:00 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-03-30 18:02:00 (GMT) |
commit | 0ed3891915425b1af26e26c4c5d350e85e7ea4cf (patch) | |
tree | 38862612aaa28e4ebbb3fd4138b13787b725e215 | |
parent | 14a7d6389fb453cca18d61bbe39deff7062bc66f (diff) | |
download | cpython-0ed3891915425b1af26e26c4c5d350e85e7ea4cf.zip cpython-0ed3891915425b1af26e26c4c5d350e85e7ea4cf.tar.gz cpython-0ed3891915425b1af26e26c4c5d350e85e7ea4cf.tar.bz2 |
Issue #26492: Added additional tests for exhausted iterators of mutable sequences.
-rw-r--r-- | Lib/test/list_tests.py | 11 | ||||
-rw-r--r-- | Lib/test/test_bytes.py | 10 | ||||
-rw-r--r-- | Lib/test/test_iter.py | 11 |
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): |