Skip to content

Commit d075642

Browse files
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 1a997eb) Co-authored-by: Serhiy Storchaka <[email protected]>
1 parent 2238139 commit d075642

File tree

1 file changed

+43
-3
lines changed

1 file changed

+43
-3
lines changed

Lib/test/test_bytes.py

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,49 @@ def test_empty_sequence(self):
6969
self.assertRaises(IndexError, lambda: b[-sys.maxsize-2])
7070
self.assertRaises(IndexError, lambda: b[-10**100])
7171

72+
def test_from_iterable(self):
73+
b = self.type2test(range(256))
74+
self.assertEqual(len(b), 256)
75+
self.assertEqual(list(b), list(range(256)))
76+
77+
# Non-sequence iterable.
78+
b = self.type2test({42})
79+
self.assertEqual(b, b"*")
80+
b = self.type2test({43, 45})
81+
self.assertIn(tuple(b), {(43, 45), (45, 43)})
82+
83+
# Iterator that has a __length_hint__.
84+
b = self.type2test(iter(range(256)))
85+
self.assertEqual(len(b), 256)
86+
self.assertEqual(list(b), list(range(256)))
87+
88+
# Iterator that doesn't have a __length_hint__.
89+
b = self.type2test(i for i in range(256) if i % 2)
90+
self.assertEqual(len(b), 128)
91+
self.assertEqual(list(b), list(range(256))[1::2])
92+
93+
# Sequence without __iter__.
94+
class S:
95+
def __getitem__(self, i):
96+
return (1, 2, 3)[i]
97+
b = self.type2test(S())
98+
self.assertEqual(b, b"\x01\x02\x03")
99+
100+
def test_from_tuple(self):
101+
# There is a special case for tuples.
102+
b = self.type2test(tuple(range(256)))
103+
self.assertEqual(len(b), 256)
104+
self.assertEqual(list(b), list(range(256)))
105+
b = self.type2test((1, 2, 3))
106+
self.assertEqual(b, b"\x01\x02\x03")
107+
72108
def test_from_list(self):
73-
ints = list(range(256))
74-
b = self.type2test(i for i in ints)
109+
# There is a special case for lists.
110+
b = self.type2test(list(range(256)))
75111
self.assertEqual(len(b), 256)
76-
self.assertEqual(list(b), ints)
112+
self.assertEqual(list(b), list(range(256)))
113+
b = self.type2test([1, 2, 3])
114+
self.assertEqual(b, b"\x01\x02\x03")
77115

78116
def test_from_index(self):
79117
b = self.type2test([Indexable(), Indexable(1), Indexable(254),
@@ -85,6 +123,8 @@ def test_from_index(self):
85123
def test_from_buffer(self):
86124
a = self.type2test(array.array('B', [1, 2, 3]))
87125
self.assertEqual(a, b"\x01\x02\x03")
126+
a = self.type2test(b"\x01\x02\x03")
127+
self.assertEqual(a, b"\x01\x02\x03")
88128

89129
# http://bugs.python.org/issue29159
90130
# Fallback when __index__ raises exception other than OverflowError

0 commit comments

Comments
 (0)