mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
gh-126727: Fix locale.nl_langinfo(locale.ERA) (GH-126730)
It now returns multiple era description segments separated by semicolons. Previously it only returned the first segment on platforms with Glibc.
This commit is contained in:
parent
eaf2171082
commit
4803cd0244
4 changed files with 95 additions and 28 deletions
|
@ -90,6 +90,14 @@ known_alt_digits = {
|
|||
'bn_IN': (100, {0: '\u09e6', 10: '\u09e7\u09e6', 99: '\u09ef\u09ef'}),
|
||||
}
|
||||
|
||||
known_era = {
|
||||
'C': (0, ''),
|
||||
'en_US': (0, ''),
|
||||
'ja_JP': (11, '+:1:2019/05/01:2019/12/31:令和:%EC元年'),
|
||||
'zh_TW': (3, '+:1:1912/01/01:1912/12/31:民國:%EC元年'),
|
||||
'th_TW': (1, '+:1:-543/01/01:+*:พ.ศ.:%EC %Ey'),
|
||||
}
|
||||
|
||||
if sys.platform == 'win32':
|
||||
# ps_AF doesn't work on Windows: see bpo-38324 (msg361830)
|
||||
del known_numerics['ps_AF']
|
||||
|
@ -230,6 +238,43 @@ class _LocaleTests(unittest.TestCase):
|
|||
if not tested:
|
||||
self.skipTest('no suitable locales')
|
||||
|
||||
@unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
|
||||
@unittest.skipUnless(hasattr(locale, 'ERA'), "requires locale.ERA")
|
||||
@unittest.skipIf(
|
||||
support.is_emscripten or support.is_wasi,
|
||||
"musl libc issue on Emscripten, bpo-46390"
|
||||
)
|
||||
def test_era_nl_langinfo(self):
|
||||
# Test nl_langinfo(ERA)
|
||||
tested = False
|
||||
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):
|
||||
era = nl_langinfo(locale.ERA)
|
||||
self.assertIsInstance(era, str)
|
||||
if era:
|
||||
self.assertEqual(era.count(':'), (era.count(';') + 1) * 5, era)
|
||||
|
||||
loc1 = loc.split('.', 1)[0]
|
||||
if loc1 in known_era:
|
||||
count, sample = known_era[loc1]
|
||||
if count:
|
||||
if not era:
|
||||
self.skipTest(f'ERA is not set for locale {loc!r} on this platform')
|
||||
self.assertGreaterEqual(era.count(';') + 1, count)
|
||||
self.assertIn(sample, era)
|
||||
else:
|
||||
self.assertEqual(era, '')
|
||||
tested = True
|
||||
if not tested:
|
||||
self.skipTest('no suitable locales')
|
||||
|
||||
def test_float_parsing(self):
|
||||
# Bug #1391872: Test whether float parsing is okay on European
|
||||
# locales.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue