Skip to content

Commit cdafa05

Browse files
[3.13] gh-71679: Improve tests for repr() of bytes and bytearray (GH-138180) (GH-138183)
* 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. (cherry picked from commit 0dbbf61) Co-authored-by: Serhiy Storchaka <[email protected]>
1 parent d6f7c61 commit cdafa05

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
@@ -1885,16 +1885,43 @@ class AssortedBytesTest(unittest.TestCase):
18851885
# Test various combinations of bytes and bytearray
18861886
#
18871887

1888+
def test_bytes_repr(self, f=repr):
1889+
self.assertEqual(f(b''), "b''")
1890+
self.assertEqual(f(b"abc"), "b'abc'")
1891+
self.assertEqual(f(bytes([92])), r"b'\\'")
1892+
self.assertEqual(f(bytes([0, 1, 254, 255])), r"b'\x00\x01\xfe\xff'")
1893+
self.assertEqual(f(b'\a\b\t\n\v\f\r'), r"b'\x07\x08\t\n\x0b\x0c\r'")
1894+
self.assertEqual(f(b'"'), """b'"'""") # '"'
1895+
self.assertEqual(f(b"'"), '''b"'"''') # "'"
1896+
self.assertEqual(f(b"'\""), r"""b'\'"'""") # '\'"'
1897+
self.assertEqual(f(b"\"'\""), r"""b'"\'"'""") # '"\'"'
1898+
self.assertEqual(f(b"'\"'"), r"""b'\'"\''""") # '\'"\''
1899+
self.assertEqual(f(BytesSubclass(b"abc")), "b'abc'")
1900+
1901+
def test_bytearray_repr(self, f=repr):
1902+
self.assertEqual(f(bytearray()), "bytearray(b'')")
1903+
self.assertEqual(f(bytearray(b'abc')), "bytearray(b'abc')")
1904+
self.assertEqual(f(bytearray([92])), r"bytearray(b'\\')")
1905+
self.assertEqual(f(bytearray([0, 1, 254, 255])),
1906+
r"bytearray(b'\x00\x01\xfe\xff')")
1907+
self.assertEqual(f(bytearray([7, 8, 9, 10, 11, 12, 13])),
1908+
r"bytearray(b'\x07\x08\t\n\x0b\x0c\r')")
1909+
self.assertEqual(f(bytearray(b'"')), """bytearray(b'"')""") # '"'
1910+
self.assertEqual(f(bytearray(b"'")), r'''bytearray(b"\'")''') # "\'"
1911+
self.assertEqual(f(bytearray(b"'\"")), r"""bytearray(b'\'"')""") # '\'"'
1912+
self.assertEqual(f(bytearray(b"\"'\"")), r"""bytearray(b'"\'"')""") # '"\'"'
1913+
self.assertEqual(f(bytearray(b'\'"\'')), r"""bytearray(b'\'"\'')""") # '\'"\''
1914+
self.assertEqual(f(ByteArraySubclass(b"abc")), "ByteArraySubclass(b'abc')")
1915+
self.assertEqual(f(ByteArraySubclass.Nested(b"abc")), "Nested(b'abc')")
1916+
self.assertEqual(f(ByteArraySubclass.Ŭñıçöđë(b"abc")), "Ŭñıçöđë(b'abc')")
1917+
1918+
@check_bytes_warnings
1919+
def test_bytes_str(self):
1920+
self.test_bytes_repr(str)
1921+
18881922
@check_bytes_warnings
1889-
def test_repr_str(self):
1890-
for f in str, repr:
1891-
self.assertEqual(f(bytearray()), "bytearray(b'')")
1892-
self.assertEqual(f(bytearray([0])), "bytearray(b'\\x00')")
1893-
self.assertEqual(f(bytearray([0, 1, 254, 255])),
1894-
"bytearray(b'\\x00\\x01\\xfe\\xff')")
1895-
self.assertEqual(f(b"abc"), "b'abc'")
1896-
self.assertEqual(f(b"'"), '''b"'"''') # '''
1897-
self.assertEqual(f(b"'\""), r"""b'\'"'""") # '
1923+
def test_bytearray_str(self):
1924+
self.test_bytearray_repr(str)
18981925

18991926
@check_bytes_warnings
19001927
def test_format(self):
@@ -1947,15 +1974,6 @@ def test_from_bytearray(self):
19471974
b = bytearray(buf)
19481975
self.assertEqual(b, bytearray(sample))
19491976

1950-
@check_bytes_warnings
1951-
def test_to_str(self):
1952-
self.assertEqual(str(b''), "b''")
1953-
self.assertEqual(str(b'x'), "b'x'")
1954-
self.assertEqual(str(b'\x80'), "b'\\x80'")
1955-
self.assertEqual(str(bytearray(b'')), "bytearray(b'')")
1956-
self.assertEqual(str(bytearray(b'x')), "bytearray(b'x')")
1957-
self.assertEqual(str(bytearray(b'\x80')), "bytearray(b'\\x80')")
1958-
19591977
def test_literal(self):
19601978
tests = [
19611979
(b"Wonderful spam", "Wonderful spam"),
@@ -2163,7 +2181,10 @@ def __init__(me, *args, **kwargs):
21632181

21642182

21652183
class ByteArraySubclass(bytearray):
2166-
pass
2184+
class Nested(bytearray):
2185+
pass
2186+
class Ŭñıçöđë(bytearray):
2187+
pass
21672188

21682189
class ByteArraySubclassWithSlots(bytearray):
21692190
__slots__ = ('x', 'y', '__dict__')

0 commit comments

Comments
 (0)