[3.12] gh-131015: Add test for bytes formatting errors (#131881) (#132114)

* gh-131015: Add test for bytes formatting errors (#131881)

Co-authored-by: Ageev Maxim <maksim170901@gmail.com>
(cherry picked from commit 05557788f3)
This commit is contained in:
Bénédikt Tran 2025-04-05 11:40:48 +02:00 committed by GitHub
parent 0c110439b3
commit 6dab90a403
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -10,6 +10,7 @@ import re
import sys
import copy
import functools
import operator
import pickle
import tempfile
import textwrap
@ -737,6 +738,37 @@ class BaseBytesTest:
check(b'%i%b %*.*b', (10, b'3', 5, 3, b'abc',), b'103 abc')
check(b'%c', b'a', b'a')
class PseudoFloat:
def __init__(self, value):
self.value = float(value)
def __int__(self):
return int(self.value)
pi = PseudoFloat(3.1415)
exceptions_params = [
('%x format: an integer is required, not float', b'%x', 3.14),
('%X format: an integer is required, not float', b'%X', 2.11),
('%o format: an integer is required, not float', b'%o', 1.79),
('%x format: an integer is required, not PseudoFloat', b'%x', pi),
('%x format: an integer is required, not complex', b'%x', 3j),
('%X format: an integer is required, not complex', b'%X', 2j),
('%o format: an integer is required, not complex', b'%o', 1j),
('%u format: a real number is required, not complex', b'%u', 3j),
# See https://github.com/python/cpython/issues/130928 as for why
# the exception message contains '%d' instead of '%i'.
('%d format: a real number is required, not complex', b'%i', 2j),
('%d format: a real number is required, not complex', b'%d', 2j),
(
r'%c requires an integer in range\(256\) or a single byte',
b'%c', pi
),
]
for msg, format_bytes, value in exceptions_params:
with self.assertRaisesRegex(TypeError, msg):
operator.mod(format_bytes, value)
def test_imod(self):
b = self.type2test(b'hello, %b!')
orig = b