Fixed #23838 -- added missing `__iter__` to LazyObject
This commit is contained in:
parent
888c9b6429
commit
a5b225084f
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue