diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-03-06 12:10:24 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-03-06 12:10:24 (GMT) |
commit | aabafe7bc293b377629ff97c3e955956eaf6350a (patch) | |
tree | d1927032c2f9afa882f6143f10a902424cb5fcc6 /Lib/test/test_iter.py | |
parent | d55162517da38138fed130607b311ed4cc62ec77 (diff) | |
download | cpython-aabafe7bc293b377629ff97c3e955956eaf6350a.zip cpython-aabafe7bc293b377629ff97c3e955956eaf6350a.tar.gz cpython-aabafe7bc293b377629ff97c3e955956eaf6350a.tar.bz2 |
Issue #26015: Added new tests for pickling iterators of mutable sequences.
Diffstat (limited to 'Lib/test/test_iter.py')
-rw-r--r-- | Lib/test/test_iter.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py index abc408f..56e21f8 100644 --- a/Lib/test/test_iter.py +++ b/Lib/test/test_iter.py @@ -153,6 +153,42 @@ class TestCase(unittest.TestCase): def test_seq_class_iter(self): self.check_iterator(iter(SequenceClass(10)), list(range(10))) + def test_mutating_seq_class_iter_pickle(self): + orig = SequenceClass(5) + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + # initial iterator + itorig = iter(orig) + d = pickle.dumps((itorig, orig), proto) + it, seq = pickle.loads(d) + seq.n = 7 + self.assertIs(type(it), type(itorig)) + self.assertEqual(list(it), list(range(7))) + + # running iterator + next(itorig) + d = pickle.dumps((itorig, orig), proto) + it, seq = pickle.loads(d) + seq.n = 7 + self.assertIs(type(it), type(itorig)) + self.assertEqual(list(it), list(range(1, 7))) + + # empty iterator + for i in range(1, 5): + next(itorig) + d = pickle.dumps((itorig, orig), proto) + it, seq = pickle.loads(d) + seq.n = 7 + self.assertIs(type(it), type(itorig)) + self.assertEqual(list(it), list(range(5, 7))) + + # exhausted iterator + self.assertRaises(StopIteration, next, itorig) + d = pickle.dumps((itorig, orig), proto) + it, seq = pickle.loads(d) + seq.n = 7 + self.assertTrue(isinstance(it, collections.abc.Iterator)) + self.assertEqual(list(it), []) + # Test a new_style class with __iter__ but no next() method def test_new_style_iter_class(self): class IterClass(object): |