mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
gh-124969: Make locale.nl_langinfo(locale.ALT_DIGITS) returning a string again (GH-125774)
This is a follow up of GH-124974. Only Glibc needed a fix. Now the returned value is a string consisting of semicolon-separated symbols on all Posix platforms.
This commit is contained in:
parent
5ca4e34bc1
commit
dcc4fb2c90
4 changed files with 50 additions and 27 deletions
|
@ -26,7 +26,10 @@ candidate_locales = ['es_UY', 'fr_FR', 'fi_FI', 'es_CO', 'pt_PT', 'it_IT',
|
|||
'bs_BA', 'fr_LU', 'kl_GL', 'fa_IR', 'de_BE', 'sv_SE', 'it_CH', 'uk_UA',
|
||||
'eu_ES', 'vi_VN', 'af_ZA', 'nb_NO', 'en_DK', 'tg_TJ', 'ps_AF', 'en_US',
|
||||
'fr_FR.ISO8859-1', 'fr_FR.UTF-8', 'fr_FR.ISO8859-15@euro',
|
||||
'ru_RU.KOI8-R', 'ko_KR.eucKR']
|
||||
'ru_RU.KOI8-R', 'ko_KR.eucKR',
|
||||
'ja_JP.UTF-8', 'lzh_TW.UTF-8', 'my_MM.UTF-8', 'or_IN.UTF-8', 'shn_MM.UTF-8',
|
||||
'ar_AE.UTF-8', 'bn_IN.UTF-8', 'mr_IN.UTF-8', 'th_TH.TIS620',
|
||||
]
|
||||
|
||||
def setUpModule():
|
||||
global candidate_locales
|
||||
|
@ -78,11 +81,13 @@ known_alt_digits = {
|
|||
'C': (0, {}),
|
||||
'en_US': (0, {}),
|
||||
'fa_IR': (100, {0: '\u06f0\u06f0', 10: '\u06f1\u06f0', 99: '\u06f9\u06f9'}),
|
||||
'ja_JP': (100, {0: '\u3007', 10: '\u5341', 99: '\u4e5d\u5341\u4e5d'}),
|
||||
'ja_JP': (100, {1: '\u4e00', 10: '\u5341', 99: '\u4e5d\u5341\u4e5d'}),
|
||||
'lzh_TW': (32, {0: '\u3007', 10: '\u5341', 31: '\u5345\u4e00'}),
|
||||
'my_MM': (100, {0: '\u1040\u1040', 10: '\u1041\u1040', 99: '\u1049\u1049'}),
|
||||
'or_IN': (100, {0: '\u0b66', 10: '\u0b67\u0b66', 99: '\u0b6f\u0b6f'}),
|
||||
'shn_MM': (100, {0: '\u1090\u1090', 10: '\u1091\u1090', 99: '\u1099\u1099'}),
|
||||
'ar_AE': (100, {0: '\u0660', 10: '\u0661\u0660', 99: '\u0669\u0669'}),
|
||||
'bn_IN': (100, {0: '\u09e6', 10: '\u09e7\u09e6', 99: '\u09ef\u09ef'}),
|
||||
}
|
||||
|
||||
if sys.platform == 'win32':
|
||||
|
@ -199,21 +204,28 @@ class _LocaleTests(unittest.TestCase):
|
|||
def test_alt_digits_nl_langinfo(self):
|
||||
# Test nl_langinfo(ALT_DIGITS)
|
||||
tested = False
|
||||
for loc, (count, samples) in known_alt_digits.items():
|
||||
for loc in candidate_locales:
|
||||
with self.subTest(locale=loc):
|
||||
try:
|
||||
setlocale(LC_TIME, loc)
|
||||
except Error:
|
||||
self.skipTest(f'no locale {loc!r}')
|
||||
continue
|
||||
|
||||
with self.subTest(locale=loc):
|
||||
alt_digits = nl_langinfo(locale.ALT_DIGITS)
|
||||
self.assertIsInstance(alt_digits, tuple)
|
||||
if count and not alt_digits and support.is_apple:
|
||||
self.skipTest(f'ALT_DIGITS is not set for locale {loc!r} on Apple platforms')
|
||||
self.assertEqual(len(alt_digits), count)
|
||||
for i in samples:
|
||||
self.assertEqual(alt_digits[i], samples[i])
|
||||
self.assertIsInstance(alt_digits, str)
|
||||
alt_digits = alt_digits.split(';') if alt_digits else []
|
||||
if alt_digits:
|
||||
self.assertGreaterEqual(len(alt_digits), 10, alt_digits)
|
||||
loc1 = loc.split('.', 1)[0]
|
||||
if loc1 in known_alt_digits:
|
||||
count, samples = known_alt_digits[loc1]
|
||||
if count and not alt_digits:
|
||||
self.skipTest(f'ALT_DIGITS is not set for locale {loc!r} on this platform')
|
||||
self.assertEqual(len(alt_digits), count, alt_digits)
|
||||
for i in samples:
|
||||
self.assertEqual(alt_digits[i], samples[i])
|
||||
tested = True
|
||||
if not tested:
|
||||
self.skipTest('no suitable locales')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue