aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_unicode.py
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2022-12-24 03:03:31 +0300
committerGitHub <noreply@github.com>2022-12-23 18:03:31 -0600
commit7ca45e5ddd493411e61706d07679ea54b954e41b (patch)
treef030f85d537e78d28e0d9d56f32188099fd95371 /Lib/test/test_unicode.py
parentf89de679ffec35e82548341cb23e675546602288 (diff)
downloadcpython-7ca45e5ddd493411e61706d07679ea54b954e41b.tar.gz
cpython-7ca45e5ddd493411e61706d07679ea54b954e41b.zip
gh-94808: improve test coverage of number formatting (#99472)
Diffstat (limited to 'Lib/test/test_unicode.py')
-rw-r--r--Lib/test/test_unicode.py44
1 files changed, 39 insertions, 5 deletions
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 79360f5549e..41094a7e917 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -1307,6 +1307,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