diff options
Diffstat (limited to 'Lib/test/test_format.py')
-rw-r--r-- | Lib/test/test_format.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py index 44f1bb72ec..ea5a731d98 100644 --- a/Lib/test/test_format.py +++ b/Lib/test/test_format.py @@ -1,4 +1,5 @@ from test.support import verbose, TestFailed +import locale import sys import test.support as support import unittest @@ -263,9 +264,81 @@ class FormatTest(unittest.TestCase): else: raise TestFailed('"%*d"%(maxsize, -127) should fail') + def test_non_ascii(self): + testformat("\u20ac=%f", (1.0,), "\u20ac=1.000000") + + self.assertEqual(format("abc", "\u2007<5"), "abc\u2007\u2007") + self.assertEqual(format(123, "\u2007<5"), "123\u2007\u2007") + self.assertEqual(format(12.3, "\u2007<6"), "12.3\u2007\u2007") + self.assertEqual(format(0j, "\u2007<4"), "0j\u2007\u2007") + self.assertEqual(format(1+2j, "\u2007<8"), "(1+2j)\u2007\u2007") + + self.assertEqual(format("abc", "\u2007>5"), "\u2007\u2007abc") + self.assertEqual(format(123, "\u2007>5"), "\u2007\u2007123") + self.assertEqual(format(12.3, "\u2007>6"), "\u2007\u200712.3") + self.assertEqual(format(1+2j, "\u2007>8"), "\u2007\u2007(1+2j)") + self.assertEqual(format(0j, "\u2007>4"), "\u2007\u20070j") + + self.assertEqual(format("abc", "\u2007^5"), "\u2007abc\u2007") + self.assertEqual(format(123, "\u2007^5"), "\u2007123\u2007") + self.assertEqual(format(12.3, "\u2007^6"), "\u200712.3\u2007") + self.assertEqual(format(1+2j, "\u2007^8"), "\u2007(1+2j)\u2007") + self.assertEqual(format(0j, "\u2007^4"), "\u20070j\u2007") + + def test_locale(self): + try: + oldloc = locale.setlocale(locale.LC_ALL) + locale.setlocale(locale.LC_ALL, '') + except locale.Error as err: + self.skipTest("Cannot set locale: {}".format(err)) + try: + localeconv = locale.localeconv() + sep = localeconv['thousands_sep'] + point = localeconv['decimal_point'] + + text = format(123456789, "n") + self.assertIn(sep, text) + self.assertEqual(text.replace(sep, ''), '123456789') + + text = format(1234.5, "n") + self.assertIn(sep, text) + self.assertIn(point, text) + self.assertEqual(text.replace(sep, ''), '1234' + point + '5') + finally: + locale.setlocale(locale.LC_ALL, oldloc) + + + def test_main(): support.run_unittest(FormatTest) + def test_precision(self): + f = 1.2 + self.assertEqual(format(f, ".0f"), "1") + self.assertEqual(format(f, ".3f"), "1.200") + with self.assertRaises(ValueError) as cm: + format(f, ".%sf" % (sys.maxsize + 1)) + self.assertEqual(str(cm.exception), "precision too big") + + c = complex(f) + self.assertEqual(format(c, ".0f"), "1+0j") + self.assertEqual(format(c, ".3f"), "1.200+0.000j") + with self.assertRaises(ValueError) as cm: + format(c, ".%sf" % (sys.maxsize + 1)) + self.assertEqual(str(cm.exception), "precision too big") + + @support.cpython_only + def test_precision_c_limits(self): + from _testcapi import INT_MAX + + f = 1.2 + with self.assertRaises(ValueError) as cm: + format(f, ".%sf" % (INT_MAX + 1)) + + c = complex(f) + with self.assertRaises(ValueError) as cm: + format(c, ".%sf" % (INT_MAX + 1)) + if __name__ == "__main__": unittest.main() |