Fixed #23838 -- added missing `__iter__` to LazyObject

This commit is contained in:
Rik 2015-03-07 15:51:17 +01:00 committed by Baptiste Mispelon
parent 888c9b6429
commit a5b225084f
2 changed files with 18 additions and 7 deletions

View File

@ -298,11 +298,11 @@ class LazyObject(object):
__ne__ = new_method_proxy(operator.ne)
__hash__ = new_method_proxy(hash)
# Dictionary methods support
# List/Tuple/Dictionary methods support
__getitem__ = new_method_proxy(operator.getitem)
__setitem__ = new_method_proxy(operator.setitem)
__delitem__ = new_method_proxy(operator.delitem)
__iter__ = new_method_proxy(iter)
__len__ = new_method_proxy(len)
__contains__ = new_method_proxy(operator.contains)

View File

@ -165,11 +165,22 @@ class LazyObjectTestCase(TestCase):
del obj_dict['f']
def test_iter(self):
# LazyObjects don't actually implements __iter__ but you can still
# iterate over them because they implement __getitem__
obj = self.lazy_wrap([1, 2, 3])
for expected, actual in zip([1, 2, 3], obj):
self.assertEqual(expected, actual)
# Tests whether an object's custom `__iter__` method is being
# used when iterating over it.
class IterObject(object):
def __init__(self, values):
self.values = values
def __iter__(self):
return iter(self.values)
original_list = ['test', '123']
self.assertEqual(
list(self.lazy_wrap(IterObject(original_list))),
original_list
)
def test_pickle(self):
# See ticket #16563