Skip to content

Commit 6efd0a1

Browse files
gh-71679: Improve tests for repr() of bytes and bytearray
* Merge existing tests test_repr_str and test_to_str. * Add more tests for non-printable and non-ASCII bytes. * Add tests for special escape sequences ('\t\n\r'). * Add tests for slashes. * Add more tests for quotes. * Add tests for subclasses. * Only apply @check_bytes_warnings for str() tests.
1 parent f60f822 commit 6efd0a1

1 file changed

Lines changed: 33 additions & 19 deletions

File tree

Lib/test/test_bytes.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,16 +1957,38 @@ class AssortedBytesTest(unittest.TestCase):
19571957
# Test various combinations of bytes and bytearray
19581958
#
19591959

1960+
def test_bytes_repr(self, f=repr):
1961+
self.assertEqual(f(b''), "b''")
1962+
self.assertEqual(f(b"abc"), "b'abc'")
1963+
self.assertEqual(f(bytes([92])), r"b'\\'")
1964+
self.assertEqual(f(bytes([0, 1, 254, 255])), r"b'\x00\x01\xfe\xff'")
1965+
self.assertEqual(f(b'\a\b\t\n\v\f\r'), r"b'\x07\x08\t\n\x0b\x0c\r'")
1966+
self.assertEqual(f(b"'"), '''b"'"''') # "'"
1967+
self.assertEqual(f(b'"'), """b'"'""") # '"'
1968+
self.assertEqual(f(b"'\""), r"""b'\'"'""") # '\'"'
1969+
self.assertEqual(f(BytesSubclass(b"abc")), "b'abc'")
1970+
1971+
def test_bytearray_repr(self, f=repr):
1972+
self.assertEqual(f(bytearray()), "bytearray(b'')")
1973+
self.assertEqual(f(bytearray(b'abc')), "bytearray(b'abc')")
1974+
self.assertEqual(f(bytearray([92])), r"bytearray(b'\\')")
1975+
self.assertEqual(f(bytearray([0, 1, 254, 255])),
1976+
r"bytearray(b'\x00\x01\xfe\xff')")
1977+
self.assertEqual(f(bytearray([7, 8, 9, 10, 11, 12, 13])),
1978+
r"bytearray(b'\x07\x08\t\n\x0b\x0c\r')")
1979+
self.assertEqual(f(bytearray(b"'")), r'''bytearray(b"\'")''') # "\'"
1980+
self.assertEqual(f(bytearray(b'"')), """bytearray(b'"')""") # '"'
1981+
self.assertEqual(f(bytearray(b"'\"")), r"""bytearray(b'\'"')""") # '\'"'
1982+
self.assertEqual(f(ByteArraySubclass(b"abc")), "ByteArraySubclass(b'abc')")
1983+
self.assertEqual(f(ByteArraySubclass.Nested(b"abc")), "Nested(b'abc')")
1984+
1985+
@check_bytes_warnings
1986+
def test_bytes_str(self):
1987+
self.test_bytes_repr(str)
1988+
19601989
@check_bytes_warnings
1961-
def test_repr_str(self):
1962-
for f in str, repr:
1963-
self.assertEqual(f(bytearray()), "bytearray(b'')")
1964-
self.assertEqual(f(bytearray([0])), "bytearray(b'\\x00')")
1965-
self.assertEqual(f(bytearray([0, 1, 254, 255])),
1966-
"bytearray(b'\\x00\\x01\\xfe\\xff')")
1967-
self.assertEqual(f(b"abc"), "b'abc'")
1968-
self.assertEqual(f(b"'"), '''b"'"''') # '''
1969-
self.assertEqual(f(b"'\""), r"""b'\'"'""") # '
1990+
def test_bytearray_str(self):
1991+
self.test_bytearray_repr(str)
19701992

19711993
@check_bytes_warnings
19721994
def test_format(self):
@@ -2019,15 +2041,6 @@ def test_from_bytearray(self):
20192041
b = bytearray(buf)
20202042
self.assertEqual(b, bytearray(sample))
20212043

2022-
@check_bytes_warnings
2023-
def test_to_str(self):
2024-
self.assertEqual(str(b''), "b''")
2025-
self.assertEqual(str(b'x'), "b'x'")
2026-
self.assertEqual(str(b'\x80'), "b'\\x80'")
2027-
self.assertEqual(str(bytearray(b'')), "bytearray(b'')")
2028-
self.assertEqual(str(bytearray(b'x')), "bytearray(b'x')")
2029-
self.assertEqual(str(bytearray(b'\x80')), "bytearray(b'\\x80')")
2030-
20312044
def test_literal(self):
20322045
tests = [
20332046
(b"Wonderful spam", "Wonderful spam"),
@@ -2235,7 +2248,8 @@ def __init__(me, *args, **kwargs):
22352248

22362249

22372250
class ByteArraySubclass(bytearray):
2238-
pass
2251+
class Nested(bytearray):
2252+
pass
22392253

22402254
class ByteArraySubclassWithSlots(bytearray):
22412255
__slots__ = ('x', 'y', '__dict__')

0 commit comments

Comments
 (0)