Add new tests for bytes and bytearray constructors. (GH-9843)
Covered all special cases: bytes, tuple, list, differend
kinds of iterables and iterators.
(cherry picked from commit 1a997eb291
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
22381394ad
commit
d07564274a
|
@ -69,11 +69,49 @@ class BaseBytesTest:
|
|||
self.assertRaises(IndexError, lambda: b[-sys.maxsize-2])
|
||||
self.assertRaises(IndexError, lambda: b[-10**100])
|
||||
|
||||
def test_from_list(self):
|
||||
ints = list(range(256))
|
||||
b = self.type2test(i for i in ints)
|
||||
def test_from_iterable(self):
|
||||
b = self.type2test(range(256))
|
||||
self.assertEqual(len(b), 256)
|
||||
self.assertEqual(list(b), ints)
|
||||
self.assertEqual(list(b), list(range(256)))
|
||||
|
||||
# Non-sequence iterable.
|
||||
b = self.type2test({42})
|
||||
self.assertEqual(b, b"*")
|
||||
b = self.type2test({43, 45})
|
||||
self.assertIn(tuple(b), {(43, 45), (45, 43)})
|
||||
|
||||
# Iterator that has a __length_hint__.
|
||||
b = self.type2test(iter(range(256)))
|
||||
self.assertEqual(len(b), 256)
|
||||
self.assertEqual(list(b), list(range(256)))
|
||||
|
||||
# Iterator that doesn't have a __length_hint__.
|
||||
b = self.type2test(i for i in range(256) if i % 2)
|
||||
self.assertEqual(len(b), 128)
|
||||
self.assertEqual(list(b), list(range(256))[1::2])
|
||||
|
||||
# Sequence without __iter__.
|
||||
class S:
|
||||
def __getitem__(self, i):
|
||||
return (1, 2, 3)[i]
|
||||
b = self.type2test(S())
|
||||
self.assertEqual(b, b"\x01\x02\x03")
|
||||
|
||||
def test_from_tuple(self):
|
||||
# There is a special case for tuples.
|
||||
b = self.type2test(tuple(range(256)))
|
||||
self.assertEqual(len(b), 256)
|
||||
self.assertEqual(list(b), list(range(256)))
|
||||
b = self.type2test((1, 2, 3))
|
||||
self.assertEqual(b, b"\x01\x02\x03")
|
||||
|
||||
def test_from_list(self):
|
||||
# There is a special case for lists.
|
||||
b = self.type2test(list(range(256)))
|
||||
self.assertEqual(len(b), 256)
|
||||
self.assertEqual(list(b), list(range(256)))
|
||||
b = self.type2test([1, 2, 3])
|
||||
self.assertEqual(b, b"\x01\x02\x03")
|
||||
|
||||
def test_from_index(self):
|
||||
b = self.type2test([Indexable(), Indexable(1), Indexable(254),
|
||||
|
@ -85,6 +123,8 @@ class BaseBytesTest:
|
|||
def test_from_buffer(self):
|
||||
a = self.type2test(array.array('B', [1, 2, 3]))
|
||||
self.assertEqual(a, b"\x01\x02\x03")
|
||||
a = self.type2test(b"\x01\x02\x03")
|
||||
self.assertEqual(a, b"\x01\x02\x03")
|
||||
|
||||
# http://bugs.python.org/issue29159
|
||||
# Fallback when __index__ raises exception other than OverflowError
|
||||
|
|
Loading…
Reference in New Issue