17db96d56Sopenharmony_cifrom decimal import Decimal 27db96d56Sopenharmony_cifrom test.support import verbose, is_android, is_emscripten, is_wasi 37db96d56Sopenharmony_cifrom test.support.warnings_helper import check_warnings 47db96d56Sopenharmony_ciimport unittest 57db96d56Sopenharmony_ciimport locale 67db96d56Sopenharmony_ciimport sys 77db96d56Sopenharmony_ciimport codecs 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciclass BaseLocalizedTest(unittest.TestCase): 117db96d56Sopenharmony_ci # 127db96d56Sopenharmony_ci # Base class for tests using a real locale 137db96d56Sopenharmony_ci # 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci @classmethod 167db96d56Sopenharmony_ci def setUpClass(cls): 177db96d56Sopenharmony_ci if sys.platform == 'darwin': 187db96d56Sopenharmony_ci import os 197db96d56Sopenharmony_ci tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US") 207db96d56Sopenharmony_ci if int(os.uname().release.split('.')[0]) < 10: 217db96d56Sopenharmony_ci # The locale test work fine on OSX 10.6, I (ronaldoussoren) 227db96d56Sopenharmony_ci # haven't had time yet to verify if tests work on OSX 10.5 237db96d56Sopenharmony_ci # (10.4 is known to be bad) 247db96d56Sopenharmony_ci raise unittest.SkipTest("Locale support on MacOSX is minimal") 257db96d56Sopenharmony_ci elif sys.platform.startswith("win"): 267db96d56Sopenharmony_ci tlocs = ("En", "English") 277db96d56Sopenharmony_ci else: 287db96d56Sopenharmony_ci tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", 297db96d56Sopenharmony_ci "en_US.US-ASCII", "en_US") 307db96d56Sopenharmony_ci try: 317db96d56Sopenharmony_ci oldlocale = locale.setlocale(locale.LC_NUMERIC) 327db96d56Sopenharmony_ci for tloc in tlocs: 337db96d56Sopenharmony_ci try: 347db96d56Sopenharmony_ci locale.setlocale(locale.LC_NUMERIC, tloc) 357db96d56Sopenharmony_ci except locale.Error: 367db96d56Sopenharmony_ci continue 377db96d56Sopenharmony_ci break 387db96d56Sopenharmony_ci else: 397db96d56Sopenharmony_ci raise unittest.SkipTest("Test locale not supported " 407db96d56Sopenharmony_ci "(tried %s)" % (', '.join(tlocs))) 417db96d56Sopenharmony_ci cls.enUS_locale = tloc 427db96d56Sopenharmony_ci finally: 437db96d56Sopenharmony_ci locale.setlocale(locale.LC_NUMERIC, oldlocale) 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci def setUp(self): 467db96d56Sopenharmony_ci oldlocale = locale.setlocale(self.locale_type) 477db96d56Sopenharmony_ci self.addCleanup(locale.setlocale, self.locale_type, oldlocale) 487db96d56Sopenharmony_ci locale.setlocale(self.locale_type, self.enUS_locale) 497db96d56Sopenharmony_ci if verbose: 507db96d56Sopenharmony_ci print("testing with %r..." % self.enUS_locale, end=' ', flush=True) 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ciclass BaseCookedTest(unittest.TestCase): 547db96d56Sopenharmony_ci # 557db96d56Sopenharmony_ci # Base class for tests using cooked localeconv() values 567db96d56Sopenharmony_ci # 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci def setUp(self): 597db96d56Sopenharmony_ci locale._override_localeconv = self.cooked_values 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci def tearDown(self): 627db96d56Sopenharmony_ci locale._override_localeconv = {} 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ciclass CCookedTest(BaseCookedTest): 657db96d56Sopenharmony_ci # A cooked "C" locale 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci cooked_values = { 687db96d56Sopenharmony_ci 'currency_symbol': '', 697db96d56Sopenharmony_ci 'decimal_point': '.', 707db96d56Sopenharmony_ci 'frac_digits': 127, 717db96d56Sopenharmony_ci 'grouping': [], 727db96d56Sopenharmony_ci 'int_curr_symbol': '', 737db96d56Sopenharmony_ci 'int_frac_digits': 127, 747db96d56Sopenharmony_ci 'mon_decimal_point': '', 757db96d56Sopenharmony_ci 'mon_grouping': [], 767db96d56Sopenharmony_ci 'mon_thousands_sep': '', 777db96d56Sopenharmony_ci 'n_cs_precedes': 127, 787db96d56Sopenharmony_ci 'n_sep_by_space': 127, 797db96d56Sopenharmony_ci 'n_sign_posn': 127, 807db96d56Sopenharmony_ci 'negative_sign': '', 817db96d56Sopenharmony_ci 'p_cs_precedes': 127, 827db96d56Sopenharmony_ci 'p_sep_by_space': 127, 837db96d56Sopenharmony_ci 'p_sign_posn': 127, 847db96d56Sopenharmony_ci 'positive_sign': '', 857db96d56Sopenharmony_ci 'thousands_sep': '' 867db96d56Sopenharmony_ci } 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ciclass EnUSCookedTest(BaseCookedTest): 897db96d56Sopenharmony_ci # A cooked "en_US" locale 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci cooked_values = { 927db96d56Sopenharmony_ci 'currency_symbol': '$', 937db96d56Sopenharmony_ci 'decimal_point': '.', 947db96d56Sopenharmony_ci 'frac_digits': 2, 957db96d56Sopenharmony_ci 'grouping': [3, 3, 0], 967db96d56Sopenharmony_ci 'int_curr_symbol': 'USD ', 977db96d56Sopenharmony_ci 'int_frac_digits': 2, 987db96d56Sopenharmony_ci 'mon_decimal_point': '.', 997db96d56Sopenharmony_ci 'mon_grouping': [3, 3, 0], 1007db96d56Sopenharmony_ci 'mon_thousands_sep': ',', 1017db96d56Sopenharmony_ci 'n_cs_precedes': 1, 1027db96d56Sopenharmony_ci 'n_sep_by_space': 0, 1037db96d56Sopenharmony_ci 'n_sign_posn': 1, 1047db96d56Sopenharmony_ci 'negative_sign': '-', 1057db96d56Sopenharmony_ci 'p_cs_precedes': 1, 1067db96d56Sopenharmony_ci 'p_sep_by_space': 0, 1077db96d56Sopenharmony_ci 'p_sign_posn': 1, 1087db96d56Sopenharmony_ci 'positive_sign': '', 1097db96d56Sopenharmony_ci 'thousands_sep': ',' 1107db96d56Sopenharmony_ci } 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ciclass FrFRCookedTest(BaseCookedTest): 1147db96d56Sopenharmony_ci # A cooked "fr_FR" locale with a space character as decimal separator 1157db96d56Sopenharmony_ci # and a non-ASCII currency symbol. 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci cooked_values = { 1187db96d56Sopenharmony_ci 'currency_symbol': '\u20ac', 1197db96d56Sopenharmony_ci 'decimal_point': ',', 1207db96d56Sopenharmony_ci 'frac_digits': 2, 1217db96d56Sopenharmony_ci 'grouping': [3, 3, 0], 1227db96d56Sopenharmony_ci 'int_curr_symbol': 'EUR ', 1237db96d56Sopenharmony_ci 'int_frac_digits': 2, 1247db96d56Sopenharmony_ci 'mon_decimal_point': ',', 1257db96d56Sopenharmony_ci 'mon_grouping': [3, 3, 0], 1267db96d56Sopenharmony_ci 'mon_thousands_sep': ' ', 1277db96d56Sopenharmony_ci 'n_cs_precedes': 0, 1287db96d56Sopenharmony_ci 'n_sep_by_space': 1, 1297db96d56Sopenharmony_ci 'n_sign_posn': 1, 1307db96d56Sopenharmony_ci 'negative_sign': '-', 1317db96d56Sopenharmony_ci 'p_cs_precedes': 0, 1327db96d56Sopenharmony_ci 'p_sep_by_space': 1, 1337db96d56Sopenharmony_ci 'p_sign_posn': 1, 1347db96d56Sopenharmony_ci 'positive_sign': '', 1357db96d56Sopenharmony_ci 'thousands_sep': ' ' 1367db96d56Sopenharmony_ci } 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ciclass BaseFormattingTest(object): 1407db96d56Sopenharmony_ci # 1417db96d56Sopenharmony_ci # Utility functions for formatting tests 1427db96d56Sopenharmony_ci # 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci def _test_formatfunc(self, format, value, out, func, **format_opts): 1457db96d56Sopenharmony_ci self.assertEqual( 1467db96d56Sopenharmony_ci func(format, value, **format_opts), out) 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci def _test_format(self, format, value, out, **format_opts): 1497db96d56Sopenharmony_ci with check_warnings(('', DeprecationWarning)): 1507db96d56Sopenharmony_ci self._test_formatfunc(format, value, out, 1517db96d56Sopenharmony_ci func=locale.format, **format_opts) 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci def _test_format_string(self, format, value, out, **format_opts): 1547db96d56Sopenharmony_ci self._test_formatfunc(format, value, out, 1557db96d56Sopenharmony_ci func=locale.format_string, **format_opts) 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci def _test_currency(self, value, out, **format_opts): 1587db96d56Sopenharmony_ci self.assertEqual(locale.currency(value, **format_opts), out) 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ciclass EnUSNumberFormatting(BaseFormattingTest): 1627db96d56Sopenharmony_ci # XXX there is a grouping + padding bug when the thousands separator 1637db96d56Sopenharmony_ci # is empty but the grouping array contains values (e.g. Solaris 10) 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci def setUp(self): 1667db96d56Sopenharmony_ci self.sep = locale.localeconv()['thousands_sep'] 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci def test_grouping(self): 1697db96d56Sopenharmony_ci self._test_format("%f", 1024, grouping=1, out='1%s024.000000' % self.sep) 1707db96d56Sopenharmony_ci self._test_format("%f", 102, grouping=1, out='102.000000') 1717db96d56Sopenharmony_ci self._test_format("%f", -42, grouping=1, out='-42.000000') 1727db96d56Sopenharmony_ci self._test_format("%+f", -42, grouping=1, out='-42.000000') 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci def test_grouping_and_padding(self): 1757db96d56Sopenharmony_ci self._test_format("%20.f", -42, grouping=1, out='-42'.rjust(20)) 1767db96d56Sopenharmony_ci if self.sep: 1777db96d56Sopenharmony_ci self._test_format("%+10.f", -4200, grouping=1, 1787db96d56Sopenharmony_ci out=('-4%s200' % self.sep).rjust(10)) 1797db96d56Sopenharmony_ci self._test_format("%-10.f", -4200, grouping=1, 1807db96d56Sopenharmony_ci out=('-4%s200' % self.sep).ljust(10)) 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci def test_integer_grouping(self): 1837db96d56Sopenharmony_ci self._test_format("%d", 4200, grouping=True, out='4%s200' % self.sep) 1847db96d56Sopenharmony_ci self._test_format("%+d", 4200, grouping=True, out='+4%s200' % self.sep) 1857db96d56Sopenharmony_ci self._test_format("%+d", -4200, grouping=True, out='-4%s200' % self.sep) 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ci def test_integer_grouping_and_padding(self): 1887db96d56Sopenharmony_ci self._test_format("%10d", 4200, grouping=True, 1897db96d56Sopenharmony_ci out=('4%s200' % self.sep).rjust(10)) 1907db96d56Sopenharmony_ci self._test_format("%-10d", -4200, grouping=True, 1917db96d56Sopenharmony_ci out=('-4%s200' % self.sep).ljust(10)) 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci def test_simple(self): 1947db96d56Sopenharmony_ci self._test_format("%f", 1024, grouping=0, out='1024.000000') 1957db96d56Sopenharmony_ci self._test_format("%f", 102, grouping=0, out='102.000000') 1967db96d56Sopenharmony_ci self._test_format("%f", -42, grouping=0, out='-42.000000') 1977db96d56Sopenharmony_ci self._test_format("%+f", -42, grouping=0, out='-42.000000') 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci def test_padding(self): 2007db96d56Sopenharmony_ci self._test_format("%20.f", -42, grouping=0, out='-42'.rjust(20)) 2017db96d56Sopenharmony_ci self._test_format("%+10.f", -4200, grouping=0, out='-4200'.rjust(10)) 2027db96d56Sopenharmony_ci self._test_format("%-10.f", 4200, grouping=0, out='4200'.ljust(10)) 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci def test_format_deprecation(self): 2057db96d56Sopenharmony_ci with self.assertWarns(DeprecationWarning): 2067db96d56Sopenharmony_ci locale.format("%-10.f", 4200, grouping=True) 2077db96d56Sopenharmony_ci 2087db96d56Sopenharmony_ci def test_complex_formatting(self): 2097db96d56Sopenharmony_ci # Spaces in formatting string 2107db96d56Sopenharmony_ci self._test_format_string("One million is %i", 1000000, grouping=1, 2117db96d56Sopenharmony_ci out='One million is 1%s000%s000' % (self.sep, self.sep)) 2127db96d56Sopenharmony_ci self._test_format_string("One million is %i", 1000000, grouping=1, 2137db96d56Sopenharmony_ci out='One million is 1%s000%s000' % (self.sep, self.sep)) 2147db96d56Sopenharmony_ci # Dots in formatting string 2157db96d56Sopenharmony_ci self._test_format_string(".%f.", 1000.0, out='.1000.000000.') 2167db96d56Sopenharmony_ci # Padding 2177db96d56Sopenharmony_ci if self.sep: 2187db96d56Sopenharmony_ci self._test_format_string("--> %10.2f", 4200, grouping=1, 2197db96d56Sopenharmony_ci out='--> ' + ('4%s200.00' % self.sep).rjust(10)) 2207db96d56Sopenharmony_ci # Asterisk formats 2217db96d56Sopenharmony_ci self._test_format_string("%10.*f", (2, 1000), grouping=0, 2227db96d56Sopenharmony_ci out='1000.00'.rjust(10)) 2237db96d56Sopenharmony_ci if self.sep: 2247db96d56Sopenharmony_ci self._test_format_string("%*.*f", (10, 2, 1000), grouping=1, 2257db96d56Sopenharmony_ci out=('1%s000.00' % self.sep).rjust(10)) 2267db96d56Sopenharmony_ci # Test more-in-one 2277db96d56Sopenharmony_ci if self.sep: 2287db96d56Sopenharmony_ci self._test_format_string("int %i float %.2f str %s", 2297db96d56Sopenharmony_ci (1000, 1000.0, 'str'), grouping=1, 2307db96d56Sopenharmony_ci out='int 1%s000 float 1%s000.00 str str' % 2317db96d56Sopenharmony_ci (self.sep, self.sep)) 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_ciclass TestFormatPatternArg(unittest.TestCase): 2357db96d56Sopenharmony_ci # Test handling of pattern argument of format 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci def test_onlyOnePattern(self): 2387db96d56Sopenharmony_ci with check_warnings(('', DeprecationWarning)): 2397db96d56Sopenharmony_ci # Issue 2522: accept exactly one % pattern, and no extra chars. 2407db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.format, "%f\n", 'foo') 2417db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.format, "%f\r", 'foo') 2427db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.format, "%f\r\n", 'foo') 2437db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.format, " %f", 'foo') 2447db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.format, "%fg", 'foo') 2457db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.format, "%^g", 'foo') 2467db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.format, "%f%%", 'foo') 2477db96d56Sopenharmony_ci 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ciclass TestLocaleFormatString(unittest.TestCase): 2507db96d56Sopenharmony_ci """General tests on locale.format_string""" 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci def test_percent_escape(self): 2537db96d56Sopenharmony_ci self.assertEqual(locale.format_string('%f%%', 1.0), '%f%%' % 1.0) 2547db96d56Sopenharmony_ci self.assertEqual(locale.format_string('%d %f%%d', (1, 1.0)), 2557db96d56Sopenharmony_ci '%d %f%%d' % (1, 1.0)) 2567db96d56Sopenharmony_ci self.assertEqual(locale.format_string('%(foo)s %%d', {'foo': 'bar'}), 2577db96d56Sopenharmony_ci ('%(foo)s %%d' % {'foo': 'bar'})) 2587db96d56Sopenharmony_ci 2597db96d56Sopenharmony_ci def test_mapping(self): 2607db96d56Sopenharmony_ci self.assertEqual(locale.format_string('%(foo)s bing.', {'foo': 'bar'}), 2617db96d56Sopenharmony_ci ('%(foo)s bing.' % {'foo': 'bar'})) 2627db96d56Sopenharmony_ci self.assertEqual(locale.format_string('%(foo)s', {'foo': 'bar'}), 2637db96d56Sopenharmony_ci ('%(foo)s' % {'foo': 'bar'})) 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ciclass TestNumberFormatting(BaseLocalizedTest, EnUSNumberFormatting): 2687db96d56Sopenharmony_ci # Test number formatting with a real English locale. 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci locale_type = locale.LC_NUMERIC 2717db96d56Sopenharmony_ci 2727db96d56Sopenharmony_ci def setUp(self): 2737db96d56Sopenharmony_ci BaseLocalizedTest.setUp(self) 2747db96d56Sopenharmony_ci EnUSNumberFormatting.setUp(self) 2757db96d56Sopenharmony_ci 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ciclass TestEnUSNumberFormatting(EnUSCookedTest, EnUSNumberFormatting): 2787db96d56Sopenharmony_ci # Test number formatting with a cooked "en_US" locale. 2797db96d56Sopenharmony_ci 2807db96d56Sopenharmony_ci def setUp(self): 2817db96d56Sopenharmony_ci EnUSCookedTest.setUp(self) 2827db96d56Sopenharmony_ci EnUSNumberFormatting.setUp(self) 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ci def test_currency(self): 2857db96d56Sopenharmony_ci self._test_currency(50000, "$50000.00") 2867db96d56Sopenharmony_ci self._test_currency(50000, "$50,000.00", grouping=True) 2877db96d56Sopenharmony_ci self._test_currency(50000, "USD 50,000.00", 2887db96d56Sopenharmony_ci grouping=True, international=True) 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci 2917db96d56Sopenharmony_ciclass TestCNumberFormatting(CCookedTest, BaseFormattingTest): 2927db96d56Sopenharmony_ci # Test number formatting with a cooked "C" locale. 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci def test_grouping(self): 2957db96d56Sopenharmony_ci self._test_format("%.2f", 12345.67, grouping=True, out='12345.67') 2967db96d56Sopenharmony_ci 2977db96d56Sopenharmony_ci def test_grouping_and_padding(self): 2987db96d56Sopenharmony_ci self._test_format("%9.2f", 12345.67, grouping=True, out=' 12345.67') 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_ci 3017db96d56Sopenharmony_ciclass TestFrFRNumberFormatting(FrFRCookedTest, BaseFormattingTest): 3027db96d56Sopenharmony_ci # Test number formatting with a cooked "fr_FR" locale. 3037db96d56Sopenharmony_ci 3047db96d56Sopenharmony_ci def test_decimal_point(self): 3057db96d56Sopenharmony_ci self._test_format("%.2f", 12345.67, out='12345,67') 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci def test_grouping(self): 3087db96d56Sopenharmony_ci self._test_format("%.2f", 345.67, grouping=True, out='345,67') 3097db96d56Sopenharmony_ci self._test_format("%.2f", 12345.67, grouping=True, out='12 345,67') 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci def test_grouping_and_padding(self): 3127db96d56Sopenharmony_ci self._test_format("%6.2f", 345.67, grouping=True, out='345,67') 3137db96d56Sopenharmony_ci self._test_format("%7.2f", 345.67, grouping=True, out=' 345,67') 3147db96d56Sopenharmony_ci self._test_format("%8.2f", 12345.67, grouping=True, out='12 345,67') 3157db96d56Sopenharmony_ci self._test_format("%9.2f", 12345.67, grouping=True, out='12 345,67') 3167db96d56Sopenharmony_ci self._test_format("%10.2f", 12345.67, grouping=True, out=' 12 345,67') 3177db96d56Sopenharmony_ci self._test_format("%-6.2f", 345.67, grouping=True, out='345,67') 3187db96d56Sopenharmony_ci self._test_format("%-7.2f", 345.67, grouping=True, out='345,67 ') 3197db96d56Sopenharmony_ci self._test_format("%-8.2f", 12345.67, grouping=True, out='12 345,67') 3207db96d56Sopenharmony_ci self._test_format("%-9.2f", 12345.67, grouping=True, out='12 345,67') 3217db96d56Sopenharmony_ci self._test_format("%-10.2f", 12345.67, grouping=True, out='12 345,67 ') 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci def test_integer_grouping(self): 3247db96d56Sopenharmony_ci self._test_format("%d", 200, grouping=True, out='200') 3257db96d56Sopenharmony_ci self._test_format("%d", 4200, grouping=True, out='4 200') 3267db96d56Sopenharmony_ci 3277db96d56Sopenharmony_ci def test_integer_grouping_and_padding(self): 3287db96d56Sopenharmony_ci self._test_format("%4d", 4200, grouping=True, out='4 200') 3297db96d56Sopenharmony_ci self._test_format("%5d", 4200, grouping=True, out='4 200') 3307db96d56Sopenharmony_ci self._test_format("%10d", 4200, grouping=True, out='4 200'.rjust(10)) 3317db96d56Sopenharmony_ci self._test_format("%-4d", 4200, grouping=True, out='4 200') 3327db96d56Sopenharmony_ci self._test_format("%-5d", 4200, grouping=True, out='4 200') 3337db96d56Sopenharmony_ci self._test_format("%-10d", 4200, grouping=True, out='4 200'.ljust(10)) 3347db96d56Sopenharmony_ci 3357db96d56Sopenharmony_ci def test_currency(self): 3367db96d56Sopenharmony_ci euro = '\u20ac' 3377db96d56Sopenharmony_ci self._test_currency(50000, "50000,00 " + euro) 3387db96d56Sopenharmony_ci self._test_currency(50000, "50 000,00 " + euro, grouping=True) 3397db96d56Sopenharmony_ci self._test_currency(50000, "50 000,00 EUR", 3407db96d56Sopenharmony_ci grouping=True, international=True) 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ciclass TestCollation(unittest.TestCase): 3447db96d56Sopenharmony_ci # Test string collation functions 3457db96d56Sopenharmony_ci 3467db96d56Sopenharmony_ci def test_strcoll(self): 3477db96d56Sopenharmony_ci self.assertLess(locale.strcoll('a', 'b'), 0) 3487db96d56Sopenharmony_ci self.assertEqual(locale.strcoll('a', 'a'), 0) 3497db96d56Sopenharmony_ci self.assertGreater(locale.strcoll('b', 'a'), 0) 3507db96d56Sopenharmony_ci # embedded null character 3517db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.strcoll, 'a\0', 'a') 3527db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.strcoll, 'a', 'a\0') 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci def test_strxfrm(self): 3557db96d56Sopenharmony_ci self.assertLess(locale.strxfrm('a'), locale.strxfrm('b')) 3567db96d56Sopenharmony_ci # embedded null character 3577db96d56Sopenharmony_ci self.assertRaises(ValueError, locale.strxfrm, 'a\0') 3587db96d56Sopenharmony_ci 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ciclass TestEnUSCollation(BaseLocalizedTest, TestCollation): 3617db96d56Sopenharmony_ci # Test string collation functions with a real English locale 3627db96d56Sopenharmony_ci 3637db96d56Sopenharmony_ci locale_type = locale.LC_ALL 3647db96d56Sopenharmony_ci 3657db96d56Sopenharmony_ci def setUp(self): 3667db96d56Sopenharmony_ci enc = codecs.lookup(locale.getencoding() or 'ascii').name 3677db96d56Sopenharmony_ci if enc not in ('utf-8', 'iso8859-1', 'cp1252'): 3687db96d56Sopenharmony_ci raise unittest.SkipTest('encoding not suitable') 3697db96d56Sopenharmony_ci if enc != 'iso8859-1' and (sys.platform == 'darwin' or is_android or 3707db96d56Sopenharmony_ci sys.platform.startswith('freebsd')): 3717db96d56Sopenharmony_ci raise unittest.SkipTest('wcscoll/wcsxfrm have known bugs') 3727db96d56Sopenharmony_ci BaseLocalizedTest.setUp(self) 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci @unittest.skipIf(sys.platform.startswith('aix'), 3757db96d56Sopenharmony_ci 'bpo-29972: broken test on AIX') 3767db96d56Sopenharmony_ci @unittest.skipIf( 3777db96d56Sopenharmony_ci is_emscripten or is_wasi, 3787db96d56Sopenharmony_ci "musl libc issue on Emscripten/WASI, bpo-46390" 3797db96d56Sopenharmony_ci ) 3807db96d56Sopenharmony_ci def test_strcoll_with_diacritic(self): 3817db96d56Sopenharmony_ci self.assertLess(locale.strcoll('à', 'b'), 0) 3827db96d56Sopenharmony_ci 3837db96d56Sopenharmony_ci @unittest.skipIf(sys.platform.startswith('aix'), 3847db96d56Sopenharmony_ci 'bpo-29972: broken test on AIX') 3857db96d56Sopenharmony_ci @unittest.skipIf( 3867db96d56Sopenharmony_ci is_emscripten or is_wasi, 3877db96d56Sopenharmony_ci "musl libc issue on Emscripten/WASI, bpo-46390" 3887db96d56Sopenharmony_ci ) 3897db96d56Sopenharmony_ci def test_strxfrm_with_diacritic(self): 3907db96d56Sopenharmony_ci self.assertLess(locale.strxfrm('à'), locale.strxfrm('b')) 3917db96d56Sopenharmony_ci 3927db96d56Sopenharmony_ci 3937db96d56Sopenharmony_ciclass NormalizeTest(unittest.TestCase): 3947db96d56Sopenharmony_ci def check(self, localename, expected): 3957db96d56Sopenharmony_ci self.assertEqual(locale.normalize(localename), expected, msg=localename) 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_ci def test_locale_alias(self): 3987db96d56Sopenharmony_ci for localename, alias in locale.locale_alias.items(): 3997db96d56Sopenharmony_ci with self.subTest(locale=(localename, alias)): 4007db96d56Sopenharmony_ci self.check(localename, alias) 4017db96d56Sopenharmony_ci 4027db96d56Sopenharmony_ci def test_empty(self): 4037db96d56Sopenharmony_ci self.check('', '') 4047db96d56Sopenharmony_ci 4057db96d56Sopenharmony_ci def test_c(self): 4067db96d56Sopenharmony_ci self.check('c', 'C') 4077db96d56Sopenharmony_ci self.check('posix', 'C') 4087db96d56Sopenharmony_ci 4097db96d56Sopenharmony_ci def test_english(self): 4107db96d56Sopenharmony_ci self.check('en', 'en_US.ISO8859-1') 4117db96d56Sopenharmony_ci self.check('EN', 'en_US.ISO8859-1') 4127db96d56Sopenharmony_ci self.check('en.iso88591', 'en_US.ISO8859-1') 4137db96d56Sopenharmony_ci self.check('en_US', 'en_US.ISO8859-1') 4147db96d56Sopenharmony_ci self.check('en_us', 'en_US.ISO8859-1') 4157db96d56Sopenharmony_ci self.check('en_GB', 'en_GB.ISO8859-1') 4167db96d56Sopenharmony_ci self.check('en_US.UTF-8', 'en_US.UTF-8') 4177db96d56Sopenharmony_ci self.check('en_US.utf8', 'en_US.UTF-8') 4187db96d56Sopenharmony_ci self.check('en_US:UTF-8', 'en_US.UTF-8') 4197db96d56Sopenharmony_ci self.check('en_US.ISO8859-1', 'en_US.ISO8859-1') 4207db96d56Sopenharmony_ci self.check('en_US.US-ASCII', 'en_US.ISO8859-1') 4217db96d56Sopenharmony_ci self.check('en_US.88591', 'en_US.ISO8859-1') 4227db96d56Sopenharmony_ci self.check('en_US.885915', 'en_US.ISO8859-15') 4237db96d56Sopenharmony_ci self.check('english', 'en_EN.ISO8859-1') 4247db96d56Sopenharmony_ci self.check('english_uk.ascii', 'en_GB.ISO8859-1') 4257db96d56Sopenharmony_ci 4267db96d56Sopenharmony_ci def test_hyphenated_encoding(self): 4277db96d56Sopenharmony_ci self.check('az_AZ.iso88599e', 'az_AZ.ISO8859-9E') 4287db96d56Sopenharmony_ci self.check('az_AZ.ISO8859-9E', 'az_AZ.ISO8859-9E') 4297db96d56Sopenharmony_ci self.check('tt_RU.koi8c', 'tt_RU.KOI8-C') 4307db96d56Sopenharmony_ci self.check('tt_RU.KOI8-C', 'tt_RU.KOI8-C') 4317db96d56Sopenharmony_ci self.check('lo_LA.cp1133', 'lo_LA.IBM-CP1133') 4327db96d56Sopenharmony_ci self.check('lo_LA.ibmcp1133', 'lo_LA.IBM-CP1133') 4337db96d56Sopenharmony_ci self.check('lo_LA.IBM-CP1133', 'lo_LA.IBM-CP1133') 4347db96d56Sopenharmony_ci self.check('uk_ua.microsoftcp1251', 'uk_UA.CP1251') 4357db96d56Sopenharmony_ci self.check('uk_ua.microsoft-cp1251', 'uk_UA.CP1251') 4367db96d56Sopenharmony_ci self.check('ka_ge.georgianacademy', 'ka_GE.GEORGIAN-ACADEMY') 4377db96d56Sopenharmony_ci self.check('ka_GE.GEORGIAN-ACADEMY', 'ka_GE.GEORGIAN-ACADEMY') 4387db96d56Sopenharmony_ci self.check('cs_CZ.iso88592', 'cs_CZ.ISO8859-2') 4397db96d56Sopenharmony_ci self.check('cs_CZ.ISO8859-2', 'cs_CZ.ISO8859-2') 4407db96d56Sopenharmony_ci 4417db96d56Sopenharmony_ci def test_euro_modifier(self): 4427db96d56Sopenharmony_ci self.check('de_DE@euro', 'de_DE.ISO8859-15') 4437db96d56Sopenharmony_ci self.check('en_US.ISO8859-15@euro', 'en_US.ISO8859-15') 4447db96d56Sopenharmony_ci self.check('de_DE.utf8@euro', 'de_DE.UTF-8') 4457db96d56Sopenharmony_ci 4467db96d56Sopenharmony_ci def test_latin_modifier(self): 4477db96d56Sopenharmony_ci self.check('be_BY.UTF-8@latin', 'be_BY.UTF-8@latin') 4487db96d56Sopenharmony_ci self.check('sr_RS.UTF-8@latin', 'sr_RS.UTF-8@latin') 4497db96d56Sopenharmony_ci self.check('sr_RS.UTF-8@latn', 'sr_RS.UTF-8@latin') 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci def test_valencia_modifier(self): 4527db96d56Sopenharmony_ci self.check('ca_ES.UTF-8@valencia', 'ca_ES.UTF-8@valencia') 4537db96d56Sopenharmony_ci self.check('ca_ES@valencia', 'ca_ES.UTF-8@valencia') 4547db96d56Sopenharmony_ci self.check('ca@valencia', 'ca_ES.ISO8859-1@valencia') 4557db96d56Sopenharmony_ci 4567db96d56Sopenharmony_ci def test_devanagari_modifier(self): 4577db96d56Sopenharmony_ci self.check('ks_IN.UTF-8@devanagari', 'ks_IN.UTF-8@devanagari') 4587db96d56Sopenharmony_ci self.check('ks_IN@devanagari', 'ks_IN.UTF-8@devanagari') 4597db96d56Sopenharmony_ci self.check('ks@devanagari', 'ks_IN.UTF-8@devanagari') 4607db96d56Sopenharmony_ci self.check('ks_IN.UTF-8', 'ks_IN.UTF-8') 4617db96d56Sopenharmony_ci self.check('ks_IN', 'ks_IN.UTF-8') 4627db96d56Sopenharmony_ci self.check('ks', 'ks_IN.UTF-8') 4637db96d56Sopenharmony_ci self.check('sd_IN.UTF-8@devanagari', 'sd_IN.UTF-8@devanagari') 4647db96d56Sopenharmony_ci self.check('sd_IN@devanagari', 'sd_IN.UTF-8@devanagari') 4657db96d56Sopenharmony_ci self.check('sd@devanagari', 'sd_IN.UTF-8@devanagari') 4667db96d56Sopenharmony_ci self.check('sd_IN.UTF-8', 'sd_IN.UTF-8') 4677db96d56Sopenharmony_ci self.check('sd_IN', 'sd_IN.UTF-8') 4687db96d56Sopenharmony_ci self.check('sd', 'sd_IN.UTF-8') 4697db96d56Sopenharmony_ci 4707db96d56Sopenharmony_ci def test_euc_encoding(self): 4717db96d56Sopenharmony_ci self.check('ja_jp.euc', 'ja_JP.eucJP') 4727db96d56Sopenharmony_ci self.check('ja_jp.eucjp', 'ja_JP.eucJP') 4737db96d56Sopenharmony_ci self.check('ko_kr.euc', 'ko_KR.eucKR') 4747db96d56Sopenharmony_ci self.check('ko_kr.euckr', 'ko_KR.eucKR') 4757db96d56Sopenharmony_ci self.check('zh_cn.euc', 'zh_CN.eucCN') 4767db96d56Sopenharmony_ci self.check('zh_tw.euc', 'zh_TW.eucTW') 4777db96d56Sopenharmony_ci self.check('zh_tw.euctw', 'zh_TW.eucTW') 4787db96d56Sopenharmony_ci 4797db96d56Sopenharmony_ci def test_japanese(self): 4807db96d56Sopenharmony_ci self.check('ja', 'ja_JP.eucJP') 4817db96d56Sopenharmony_ci self.check('ja.jis', 'ja_JP.JIS7') 4827db96d56Sopenharmony_ci self.check('ja.sjis', 'ja_JP.SJIS') 4837db96d56Sopenharmony_ci self.check('ja_jp', 'ja_JP.eucJP') 4847db96d56Sopenharmony_ci self.check('ja_jp.ajec', 'ja_JP.eucJP') 4857db96d56Sopenharmony_ci self.check('ja_jp.euc', 'ja_JP.eucJP') 4867db96d56Sopenharmony_ci self.check('ja_jp.eucjp', 'ja_JP.eucJP') 4877db96d56Sopenharmony_ci self.check('ja_jp.iso-2022-jp', 'ja_JP.JIS7') 4887db96d56Sopenharmony_ci self.check('ja_jp.iso2022jp', 'ja_JP.JIS7') 4897db96d56Sopenharmony_ci self.check('ja_jp.jis', 'ja_JP.JIS7') 4907db96d56Sopenharmony_ci self.check('ja_jp.jis7', 'ja_JP.JIS7') 4917db96d56Sopenharmony_ci self.check('ja_jp.mscode', 'ja_JP.SJIS') 4927db96d56Sopenharmony_ci self.check('ja_jp.pck', 'ja_JP.SJIS') 4937db96d56Sopenharmony_ci self.check('ja_jp.sjis', 'ja_JP.SJIS') 4947db96d56Sopenharmony_ci self.check('ja_jp.ujis', 'ja_JP.eucJP') 4957db96d56Sopenharmony_ci self.check('ja_jp.utf8', 'ja_JP.UTF-8') 4967db96d56Sopenharmony_ci self.check('japan', 'ja_JP.eucJP') 4977db96d56Sopenharmony_ci self.check('japanese', 'ja_JP.eucJP') 4987db96d56Sopenharmony_ci self.check('japanese-euc', 'ja_JP.eucJP') 4997db96d56Sopenharmony_ci self.check('japanese.euc', 'ja_JP.eucJP') 5007db96d56Sopenharmony_ci self.check('japanese.sjis', 'ja_JP.SJIS') 5017db96d56Sopenharmony_ci self.check('jp_jp', 'ja_JP.eucJP') 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ci 5047db96d56Sopenharmony_ciclass TestMiscellaneous(unittest.TestCase): 5057db96d56Sopenharmony_ci def test_defaults_UTF8(self): 5067db96d56Sopenharmony_ci # Issue #18378: on (at least) macOS setting LC_CTYPE to "UTF-8" is 5077db96d56Sopenharmony_ci # valid. Furthermore LC_CTYPE=UTF is used by the UTF-8 locale coercing 5087db96d56Sopenharmony_ci # during interpreter startup (on macOS). 5097db96d56Sopenharmony_ci import _locale 5107db96d56Sopenharmony_ci import os 5117db96d56Sopenharmony_ci 5127db96d56Sopenharmony_ci self.assertEqual(locale._parse_localename('UTF-8'), (None, 'UTF-8')) 5137db96d56Sopenharmony_ci 5147db96d56Sopenharmony_ci if hasattr(_locale, '_getdefaultlocale'): 5157db96d56Sopenharmony_ci orig_getlocale = _locale._getdefaultlocale 5167db96d56Sopenharmony_ci del _locale._getdefaultlocale 5177db96d56Sopenharmony_ci else: 5187db96d56Sopenharmony_ci orig_getlocale = None 5197db96d56Sopenharmony_ci 5207db96d56Sopenharmony_ci orig_env = {} 5217db96d56Sopenharmony_ci try: 5227db96d56Sopenharmony_ci for key in ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE'): 5237db96d56Sopenharmony_ci if key in os.environ: 5247db96d56Sopenharmony_ci orig_env[key] = os.environ[key] 5257db96d56Sopenharmony_ci del os.environ[key] 5267db96d56Sopenharmony_ci 5277db96d56Sopenharmony_ci os.environ['LC_CTYPE'] = 'UTF-8' 5287db96d56Sopenharmony_ci 5297db96d56Sopenharmony_ci with check_warnings(('', DeprecationWarning)): 5307db96d56Sopenharmony_ci self.assertEqual(locale.getdefaultlocale(), (None, 'UTF-8')) 5317db96d56Sopenharmony_ci 5327db96d56Sopenharmony_ci finally: 5337db96d56Sopenharmony_ci for k in orig_env: 5347db96d56Sopenharmony_ci os.environ[k] = orig_env[k] 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci if 'LC_CTYPE' not in orig_env: 5377db96d56Sopenharmony_ci del os.environ['LC_CTYPE'] 5387db96d56Sopenharmony_ci 5397db96d56Sopenharmony_ci if orig_getlocale is not None: 5407db96d56Sopenharmony_ci _locale._getdefaultlocale = orig_getlocale 5417db96d56Sopenharmony_ci 5427db96d56Sopenharmony_ci def test_getencoding(self): 5437db96d56Sopenharmony_ci # Invoke getencoding to make sure it does not cause exceptions. 5447db96d56Sopenharmony_ci enc = locale.getencoding() 5457db96d56Sopenharmony_ci self.assertIsInstance(enc, str) 5467db96d56Sopenharmony_ci self.assertNotEqual(enc, "") 5477db96d56Sopenharmony_ci # make sure it is valid 5487db96d56Sopenharmony_ci codecs.lookup(enc) 5497db96d56Sopenharmony_ci 5507db96d56Sopenharmony_ci def test_getpreferredencoding(self): 5517db96d56Sopenharmony_ci # Invoke getpreferredencoding to make sure it does not cause exceptions. 5527db96d56Sopenharmony_ci enc = locale.getpreferredencoding() 5537db96d56Sopenharmony_ci if enc: 5547db96d56Sopenharmony_ci # If encoding non-empty, make sure it is valid 5557db96d56Sopenharmony_ci codecs.lookup(enc) 5567db96d56Sopenharmony_ci 5577db96d56Sopenharmony_ci def test_strcoll_3303(self): 5587db96d56Sopenharmony_ci # test crasher from bug #3303 5597db96d56Sopenharmony_ci self.assertRaises(TypeError, locale.strcoll, "a", None) 5607db96d56Sopenharmony_ci self.assertRaises(TypeError, locale.strcoll, b"a", None) 5617db96d56Sopenharmony_ci 5627db96d56Sopenharmony_ci def test_setlocale_category(self): 5637db96d56Sopenharmony_ci locale.setlocale(locale.LC_ALL) 5647db96d56Sopenharmony_ci locale.setlocale(locale.LC_TIME) 5657db96d56Sopenharmony_ci locale.setlocale(locale.LC_CTYPE) 5667db96d56Sopenharmony_ci locale.setlocale(locale.LC_COLLATE) 5677db96d56Sopenharmony_ci locale.setlocale(locale.LC_MONETARY) 5687db96d56Sopenharmony_ci locale.setlocale(locale.LC_NUMERIC) 5697db96d56Sopenharmony_ci 5707db96d56Sopenharmony_ci # crasher from bug #7419 5717db96d56Sopenharmony_ci self.assertRaises(locale.Error, locale.setlocale, 12345) 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci def test_getsetlocale_issue1813(self): 5747db96d56Sopenharmony_ci # Issue #1813: setting and getting the locale under a Turkish locale 5757db96d56Sopenharmony_ci oldlocale = locale.setlocale(locale.LC_CTYPE) 5767db96d56Sopenharmony_ci self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale) 5777db96d56Sopenharmony_ci try: 5787db96d56Sopenharmony_ci locale.setlocale(locale.LC_CTYPE, 'tr_TR') 5797db96d56Sopenharmony_ci except locale.Error: 5807db96d56Sopenharmony_ci # Unsupported locale on this system 5817db96d56Sopenharmony_ci self.skipTest('test needs Turkish locale') 5827db96d56Sopenharmony_ci loc = locale.getlocale(locale.LC_CTYPE) 5837db96d56Sopenharmony_ci if verbose: 5847db96d56Sopenharmony_ci print('testing with %a' % (loc,), end=' ', flush=True) 5857db96d56Sopenharmony_ci try: 5867db96d56Sopenharmony_ci locale.setlocale(locale.LC_CTYPE, loc) 5877db96d56Sopenharmony_ci except locale.Error as exc: 5887db96d56Sopenharmony_ci # bpo-37945: setlocale(LC_CTYPE) fails with getlocale(LC_CTYPE) 5897db96d56Sopenharmony_ci # and the tr_TR locale on Windows. getlocale() builds a locale 5907db96d56Sopenharmony_ci # which is not recognize by setlocale(). 5917db96d56Sopenharmony_ci self.skipTest(f"setlocale(LC_CTYPE, {loc!r}) failed: {exc!r}") 5927db96d56Sopenharmony_ci self.assertEqual(loc, locale.getlocale(locale.LC_CTYPE)) 5937db96d56Sopenharmony_ci 5947db96d56Sopenharmony_ci def test_invalid_locale_format_in_localetuple(self): 5957db96d56Sopenharmony_ci with self.assertRaises(TypeError): 5967db96d56Sopenharmony_ci locale.setlocale(locale.LC_ALL, b'fi_FI') 5977db96d56Sopenharmony_ci 5987db96d56Sopenharmony_ci def test_invalid_iterable_in_localetuple(self): 5997db96d56Sopenharmony_ci with self.assertRaises(TypeError): 6007db96d56Sopenharmony_ci locale.setlocale(locale.LC_ALL, (b'not', b'valid')) 6017db96d56Sopenharmony_ci 6027db96d56Sopenharmony_ci 6037db96d56Sopenharmony_ciclass BaseDelocalizeTest(BaseLocalizedTest): 6047db96d56Sopenharmony_ci 6057db96d56Sopenharmony_ci def _test_delocalize(self, value, out): 6067db96d56Sopenharmony_ci self.assertEqual(locale.delocalize(value), out) 6077db96d56Sopenharmony_ci 6087db96d56Sopenharmony_ci def _test_atof(self, value, out): 6097db96d56Sopenharmony_ci self.assertEqual(locale.atof(value), out) 6107db96d56Sopenharmony_ci 6117db96d56Sopenharmony_ci def _test_atoi(self, value, out): 6127db96d56Sopenharmony_ci self.assertEqual(locale.atoi(value), out) 6137db96d56Sopenharmony_ci 6147db96d56Sopenharmony_ci 6157db96d56Sopenharmony_ciclass TestEnUSDelocalize(EnUSCookedTest, BaseDelocalizeTest): 6167db96d56Sopenharmony_ci 6177db96d56Sopenharmony_ci def test_delocalize(self): 6187db96d56Sopenharmony_ci self._test_delocalize('50000.00', '50000.00') 6197db96d56Sopenharmony_ci self._test_delocalize('50,000.00', '50000.00') 6207db96d56Sopenharmony_ci 6217db96d56Sopenharmony_ci def test_atof(self): 6227db96d56Sopenharmony_ci self._test_atof('50000.00', 50000.) 6237db96d56Sopenharmony_ci self._test_atof('50,000.00', 50000.) 6247db96d56Sopenharmony_ci 6257db96d56Sopenharmony_ci def test_atoi(self): 6267db96d56Sopenharmony_ci self._test_atoi('50000', 50000) 6277db96d56Sopenharmony_ci self._test_atoi('50,000', 50000) 6287db96d56Sopenharmony_ci 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ciclass TestCDelocalizeTest(CCookedTest, BaseDelocalizeTest): 6317db96d56Sopenharmony_ci 6327db96d56Sopenharmony_ci def test_delocalize(self): 6337db96d56Sopenharmony_ci self._test_delocalize('50000.00', '50000.00') 6347db96d56Sopenharmony_ci 6357db96d56Sopenharmony_ci def test_atof(self): 6367db96d56Sopenharmony_ci self._test_atof('50000.00', 50000.) 6377db96d56Sopenharmony_ci 6387db96d56Sopenharmony_ci def test_atoi(self): 6397db96d56Sopenharmony_ci self._test_atoi('50000', 50000) 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_ci 6427db96d56Sopenharmony_ciclass TestfrFRDelocalizeTest(FrFRCookedTest, BaseDelocalizeTest): 6437db96d56Sopenharmony_ci 6447db96d56Sopenharmony_ci def test_delocalize(self): 6457db96d56Sopenharmony_ci self._test_delocalize('50000,00', '50000.00') 6467db96d56Sopenharmony_ci self._test_delocalize('50 000,00', '50000.00') 6477db96d56Sopenharmony_ci 6487db96d56Sopenharmony_ci def test_atof(self): 6497db96d56Sopenharmony_ci self._test_atof('50000,00', 50000.) 6507db96d56Sopenharmony_ci self._test_atof('50 000,00', 50000.) 6517db96d56Sopenharmony_ci 6527db96d56Sopenharmony_ci def test_atoi(self): 6537db96d56Sopenharmony_ci self._test_atoi('50000', 50000) 6547db96d56Sopenharmony_ci self._test_atoi('50 000', 50000) 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ci 6577db96d56Sopenharmony_ciclass BaseLocalizeTest(BaseLocalizedTest): 6587db96d56Sopenharmony_ci 6597db96d56Sopenharmony_ci def _test_localize(self, value, out, grouping=False): 6607db96d56Sopenharmony_ci self.assertEqual(locale.localize(value, grouping=grouping), out) 6617db96d56Sopenharmony_ci 6627db96d56Sopenharmony_ci 6637db96d56Sopenharmony_ciclass TestEnUSLocalize(EnUSCookedTest, BaseLocalizeTest): 6647db96d56Sopenharmony_ci 6657db96d56Sopenharmony_ci def test_localize(self): 6667db96d56Sopenharmony_ci self._test_localize('50000.00', '50000.00') 6677db96d56Sopenharmony_ci self._test_localize( 6687db96d56Sopenharmony_ci '{0:.16f}'.format(Decimal('1.15')), '1.1500000000000000') 6697db96d56Sopenharmony_ci 6707db96d56Sopenharmony_ci 6717db96d56Sopenharmony_ciclass TestCLocalize(CCookedTest, BaseLocalizeTest): 6727db96d56Sopenharmony_ci 6737db96d56Sopenharmony_ci def test_localize(self): 6747db96d56Sopenharmony_ci self._test_localize('50000.00', '50000.00') 6757db96d56Sopenharmony_ci 6767db96d56Sopenharmony_ci 6777db96d56Sopenharmony_ciclass TestfrFRLocalize(FrFRCookedTest, BaseLocalizeTest): 6787db96d56Sopenharmony_ci 6797db96d56Sopenharmony_ci def test_localize(self): 6807db96d56Sopenharmony_ci self._test_localize('50000.00', '50000,00') 6817db96d56Sopenharmony_ci self._test_localize('50000.00', '50 000,00', grouping=True) 6827db96d56Sopenharmony_ci 6837db96d56Sopenharmony_ci 6847db96d56Sopenharmony_ciif __name__ == '__main__': 6857db96d56Sopenharmony_ci unittest.main() 686