diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2018-10-13 17:39:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-13 17:39:45 (GMT) |
commit | 1a997eb291fdc5f5606c898fffbde61d899ed762 (patch) | |
tree | 4acbee1168abe9bf0b8c6a3eef74fb0894f741a2 | |
parent | a486a4712c3357250dbebb55ee74d2693dd79148 (diff) | |
download | cpython-1a997eb291fdc5f5606c898fffbde61d899ed762.zip cpython-1a997eb291fdc5f5606c898fffbde61d899ed762.tar.gz cpython-1a997eb291fdc5f5606c898fffbde61d899ed762.tar.bz2 |
Add new tests for bytes and bytearray constructors. (GH-9843)
Covered all special cases: bytes, tuple, list, differend
kinds of iterables and iterators.
-rw-r--r-- | Lib/test/test_bytes.py | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 1408fb4..b7b48bf 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -69,11 +69,49 @@ class BaseBytesTest: self.assertRaises(IndexError, lambda: b[-sys.maxsize-2]) self.assertRaises(IndexError, lambda: b[-10**100]) + def test_from_iterable(self): + b = self.type2test(range(256)) + self.assertEqual(len(b), 256) + 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): - ints = list(range(256)) - b = self.type2test(i for i in ints) + # There is a special case for lists. + b = self.type2test(list(range(256))) self.assertEqual(len(b), 256) - self.assertEqual(list(b), ints) + 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 |