mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-94808: improve test coverage of number formatting (GH-99472)
(cherry picked from commit 7ca45e5ddd
)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
parent
a852c5f8ee
commit
c4aff6d273
1 changed files with 39 additions and 5 deletions
|
@ -1306,6 +1306,20 @@ class UnicodeTest(string_tests.CommonTest,
|
|||
self.assertRaises(ValueError, ("{" + big + "}").format)
|
||||
self.assertRaises(ValueError, ("{[" + big + "]}").format, [0])
|
||||
|
||||
# test number formatter errors:
|
||||
self.assertRaises(ValueError, '{0:x}'.format, 1j)
|
||||
self.assertRaises(ValueError, '{0:x}'.format, 1.0)
|
||||
self.assertRaises(ValueError, '{0:X}'.format, 1j)
|
||||
self.assertRaises(ValueError, '{0:X}'.format, 1.0)
|
||||
self.assertRaises(ValueError, '{0:o}'.format, 1j)
|
||||
self.assertRaises(ValueError, '{0:o}'.format, 1.0)
|
||||
self.assertRaises(ValueError, '{0:u}'.format, 1j)
|
||||
self.assertRaises(ValueError, '{0:u}'.format, 1.0)
|
||||
self.assertRaises(ValueError, '{0:i}'.format, 1j)
|
||||
self.assertRaises(ValueError, '{0:i}'.format, 1.0)
|
||||
self.assertRaises(ValueError, '{0:d}'.format, 1j)
|
||||
self.assertRaises(ValueError, '{0:d}'.format, 1.0)
|
||||
|
||||
# issue 6089
|
||||
self.assertRaises(ValueError, "{0[0]x}".format, [None])
|
||||
self.assertRaises(ValueError, "{0[0](10)}".format, [None])
|
||||
|
@ -1541,11 +1555,31 @@ class UnicodeTest(string_tests.CommonTest,
|
|||
self.assertEqual('%X' % letter_m, '6D')
|
||||
self.assertEqual('%o' % letter_m, '155')
|
||||
self.assertEqual('%c' % letter_m, 'm')
|
||||
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14),
|
||||
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11),
|
||||
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79),
|
||||
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi),
|
||||
self.assertRaises(TypeError, operator.mod, '%c', pi),
|
||||
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14)
|
||||
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11)
|
||||
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79)
|
||||
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi)
|
||||
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not complex', operator.mod, '%x', 3j)
|
||||
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not complex', operator.mod, '%X', 2j)
|
||||
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not complex', operator.mod, '%o', 1j)
|
||||
self.assertRaisesRegex(TypeError, '%u format: a real number is required, not complex', operator.mod, '%u', 3j)
|
||||
self.assertRaisesRegex(TypeError, '%i format: a real number is required, not complex', operator.mod, '%i', 2j)
|
||||
self.assertRaisesRegex(TypeError, '%d format: a real number is required, not complex', operator.mod, '%d', 1j)
|
||||
self.assertRaisesRegex(TypeError, '%c requires int or char', operator.mod, '%c', pi)
|
||||
|
||||
class RaisingNumber:
|
||||
def __int__(self):
|
||||
raise RuntimeError('int') # should not be `TypeError`
|
||||
def __index__(self):
|
||||
raise RuntimeError('index') # should not be `TypeError`
|
||||
|
||||
rn = RaisingNumber()
|
||||
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%d', rn)
|
||||
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%i', rn)
|
||||
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%u', rn)
|
||||
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%x', rn)
|
||||
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%X', rn)
|
||||
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%o', rn)
|
||||
|
||||
def test_formatting_with_enum(self):
|
||||
# issue18780
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue