195
195
d.extend(range(20))
196
196
self.assertEqual(len(it), 0)
198
## -- Check to make sure exceptions are not suppressed by __length_hint__()
201
class BadLen(object):
202
def __iter__(self): return iter(range(10))
204
raise RuntimeError('hello')
206
class BadLengthHint(object):
207
def __iter__(self): return iter(range(10))
208
def __length_hint__(self):
209
raise RuntimeError('hello')
211
class NoneLengthHint(object):
212
def __iter__(self): return iter(range(10))
213
def __length_hint__(self):
216
class TestLengthHintExceptions(unittest.TestCase):
218
def test_issue1242657(self):
219
self.assertRaises(RuntimeError, list, BadLen())
220
self.assertRaises(RuntimeError, list, BadLengthHint())
221
self.assertRaises(RuntimeError, [].extend, BadLen())
222
self.assertRaises(RuntimeError, [].extend, BadLengthHint())
223
b = bytearray(range(10))
224
self.assertRaises(RuntimeError, b.extend, BadLen())
225
self.assertRaises(RuntimeError, b.extend, BadLengthHint())
227
def test_invalid_hint(self):
228
# Make sure an invalid result doesn't muck-up the works
229
self.assertEqual(list(NoneLengthHint()), list(range(10)))