Skip to content

Commit 0dbbf61

Browse files
gh-71679: Improve tests for repr() of bytes and bytearray (GH-138180)
* 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. * Add test for non-ASCII class name. * Only apply @check_bytes_warnings for str() tests.
1 parent 14a5ad1 commit 0dbbf61

File tree

1 file changed

+40
-19
lines changed

1 file changed

+40
-19
lines changed

Lib/test/test_bytes.py

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,16 +1957,43 @@ 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(b"\"'\""), r"""b'"\'"'""") # '"\'"'
1970+
self.assertEqual(f(b"'\"'"), r"""b'\'"\''""") # '\'"\''
1971+
self.assertEqual(f(BytesSubclass(b"abc")), "b'abc'")
1972+
1973+
def test_bytearray_repr(self, f=repr):
1974+
self.assertEqual(f(bytearray()), "bytearray(b'')")
1975+
self.assertEqual(f(bytearray(b'abc')), "bytearray(b'abc')")
1976+
self.assertEqual(f(bytearray([92])), r"bytearray(b'\\')")
1977+
self.assertEqual(f(bytearray([0, 1, 254, 255])),
1978+
r"bytearray(b'\x00\x01\xfe\xff')")
1979+
self.assertEqual(f(bytearray([7, 8, 9, 10, 11, 12, 13])),
1980+
r"bytearray(b'\x07\x08\t\n\x0b\x0c\r')")
1981+
self.assertEqual(f(bytearray(b'"')), """bytearray(b'"')""") # '"'
1982+
self.assertEqual(f(bytearray(b"'")), r'''bytearray(b"\'")''') # "\'"
1983+
self.assertEqual(f(bytearray(b"'\"")), r"""bytearray(b'\'"')""") # '\'"'
1984+
self.assertEqual(f(bytearray(b"\"'\"")), r"""bytearray(b'"\'"')""") # '"\'"'
1985+
self.assertEqual(f(bytearray(b'\'"\'')), r"""bytearray(b'\'"\'')""") # '\'"\''
1986+
self.assertEqual(f(ByteArraySubclass(b"abc")), "ByteArraySubclass(b'abc')")
1987+
self.assertEqual(f(ByteArraySubclass.Nested(b"abc")), "Nested(b'abc')")
1988+
self.assertEqual(f(ByteArraySubclass.Ŭñıçöđë(b"abc")), "Ŭñıçöđë(b'abc')")
1989+
1990+
@check_bytes_warnings
1991+
def test_bytes_str(self):
1992+
self.test_bytes_repr(str)
1993+
19601994
@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'\'"'""") # '
1995+
def test_bytearray_str(self):
1996+
self.test_bytearray_repr(str)
19701997

19711998
@check_bytes_warnings
19721999
def test_format(self):
@@ -2019,15 +2046,6 @@ def test_from_bytearray(self):
20192046
b = bytearray(buf)
20202047
self.assertEqual(b, bytearray(sample))
20212048

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-
20312049
def test_literal(self):
20322050
tests = [
20332051
(b"Wonderful spam", "Wonderful spam"),
@@ -2235,7 +2253,10 @@ def __init__(me, *args, **kwargs):
22352253

22362254

22372255
class ByteArraySubclass(bytearray):
2238-
pass
2256+
class Nested(bytearray):
2257+
pass
2258+
class Ŭñıçöđë(bytearray):
2259+
pass
22392260

22402261
class ByteArraySubclassWithSlots(bytearray):
22412262
__slots__ = ('x', 'y', '__dict__')

0 commit comments

Comments
 (0)