@@ -90,6 +90,14 @@ def accept(loc):
9090 'bn_IN' : (100 , {0 : '\u09e6 ' , 10 : '\u09e7 \u09e6 ' , 99 : '\u09ef \u09ef ' }),
9191}
9292
93+ known_era = {
94+ 'C' : (0 , '' ),
95+ 'en_US' : (0 , '' ),
96+ 'ja_JP' : (11 , '+:1:2019/05/01:2019/12/31:令和:%EC元年' ),
97+ 'zh_TW' : (3 , '+:1:1912/01/01:1912/12/31:民國:%EC元年' ),
98+ 'th_TW' : (1 , '+:1:-543/01/01:+*:พ.ศ.:%EC %Ey' ),
99+ }
100+
93101if sys .platform == 'win32' :
94102 # ps_AF doesn't work on Windows: see bpo-38324 (msg361830)
95103 del known_numerics ['ps_AF' ]
@@ -228,6 +236,44 @@ def test_alt_digits_nl_langinfo(self):
228236 if not tested :
229237 self .skipTest ('no suitable locales' )
230238
239+ @unittest .skipUnless (nl_langinfo , "nl_langinfo is not available" )
240+ @unittest .skipUnless (hasattr (locale , 'ERA' ), "requires locale.ERA" )
241+ @unittest .skipIf (
242+ support .is_emscripten or support .is_wasi ,
243+ "musl libc issue on Emscripten, bpo-46390"
244+ )
245+ def test_era_nl_langinfo (self ):
246+ # Test nl_langinfo(ERA)
247+ tested = False
248+ for loc in candidate_locales :
249+ with self .subTest (locale = loc ):
250+ try :
251+ setlocale (LC_TIME , loc )
252+ setlocale (LC_CTYPE , loc )
253+ except Error :
254+ self .skipTest (f'no locale { loc !r} ' )
255+ continue
256+
257+ with self .subTest (locale = loc ):
258+ era = nl_langinfo (locale .ERA )
259+ self .assertIsInstance (era , str )
260+ if era :
261+ self .assertEqual (era .count (':' ), (era .count (';' ) + 1 ) * 5 , era )
262+
263+ loc1 = loc .split ('.' , 1 )[0 ]
264+ if loc1 in known_era :
265+ count , sample = known_era [loc1 ]
266+ if count :
267+ if not era :
268+ self .skipTest (f'ERA is not set for locale { loc !r} on this platform' )
269+ self .assertGreaterEqual (era .count (';' ) + 1 , count )
270+ self .assertIn (sample , era )
271+ else :
272+ self .assertEqual (era , '' )
273+ tested = True
274+ if not tested :
275+ self .skipTest ('no suitable locales' )
276+
231277 def test_float_parsing (self ):
232278 # Bug #1391872: Test whether float parsing is okay on European
233279 # locales.
0 commit comments