@@ -486,6 +486,46 @@ def test_japanese(self):
486
486
self .check ('jp_jp' , 'ja_JP.eucJP' )
487
487
488
488
489
+ class TestRealLocales (unittest .TestCase ):
490
+ def setUp (self ):
491
+ oldlocale = locale .setlocale (locale .LC_CTYPE )
492
+ self .addCleanup (locale .setlocale , locale .LC_CTYPE , oldlocale )
493
+
494
+ def test_getsetlocale_issue1813 (self ):
495
+ # Issue #1813: setting and getting the locale under a Turkish locale
496
+ oldlocale = locale .setlocale (locale .LC_CTYPE )
497
+ self .addCleanup (locale .setlocale , locale .LC_CTYPE , oldlocale )
498
+ try :
499
+ locale .setlocale (locale .LC_CTYPE , 'tr_TR' )
500
+ except locale .Error :
501
+ # Unsupported locale on this system
502
+ self .skipTest ('test needs Turkish locale' )
503
+ loc = locale .getlocale (locale .LC_CTYPE )
504
+ if verbose :
505
+ print ('testing with %a' % (loc ,), end = ' ' , flush = True )
506
+ try :
507
+ locale .setlocale (locale .LC_CTYPE , loc )
508
+ except locale .Error as exc :
509
+ # bpo-37945: setlocale(LC_CTYPE) fails with getlocale(LC_CTYPE)
510
+ # and the tr_TR locale on Windows. getlocale() builds a locale
511
+ # which is not recognize by setlocale().
512
+ self .skipTest (f"setlocale(LC_CTYPE, { loc !r} ) failed: { exc !r} " )
513
+ self .assertEqual (loc , locale .getlocale (locale .LC_CTYPE ))
514
+
515
+ def test_setlocale_long_encoding (self ):
516
+ # gh-137273: Debug assertion failure on Windows for long encoding.
517
+ oldlocale = locale .setlocale (locale .LC_ALL )
518
+ self .addCleanup (locale .setlocale , locale .LC_ALL , oldlocale )
519
+ with self .assertRaises (locale .Error ):
520
+ locale .setlocale (locale .LC_CTYPE , 'en_US.' + 'x' * 16 )
521
+ locale .setlocale (locale .LC_CTYPE , 'en_US.UTF-8' )
522
+ loc = locale .setlocale (locale .LC_ALL )
523
+ self .assertIn ('.UTF-8' , loc )
524
+ loc2 = loc .replace ('UTF-8' , 'x' * 16 , 1 )
525
+ with self .assertRaises (locale .Error ):
526
+ locale .setlocale (locale .LC_ALL , loc2 )
527
+
528
+
489
529
class TestMiscellaneous (unittest .TestCase ):
490
530
def test_defaults_UTF8 (self ):
491
531
# Issue #18378: on (at least) macOS setting LC_CTYPE to "UTF-8" is
@@ -552,27 +592,6 @@ def test_setlocale_category(self):
552
592
# crasher from bug #7419
553
593
self .assertRaises (locale .Error , locale .setlocale , 12345 )
554
594
555
- def test_getsetlocale_issue1813 (self ):
556
- # Issue #1813: setting and getting the locale under a Turkish locale
557
- oldlocale = locale .setlocale (locale .LC_CTYPE )
558
- self .addCleanup (locale .setlocale , locale .LC_CTYPE , oldlocale )
559
- try :
560
- locale .setlocale (locale .LC_CTYPE , 'tr_TR' )
561
- except locale .Error :
562
- # Unsupported locale on this system
563
- self .skipTest ('test needs Turkish locale' )
564
- loc = locale .getlocale (locale .LC_CTYPE )
565
- if verbose :
566
- print ('testing with %a' % (loc ,), end = ' ' , flush = True )
567
- try :
568
- locale .setlocale (locale .LC_CTYPE , loc )
569
- except locale .Error as exc :
570
- # bpo-37945: setlocale(LC_CTYPE) fails with getlocale(LC_CTYPE)
571
- # and the tr_TR locale on Windows. getlocale() builds a locale
572
- # which is not recognize by setlocale().
573
- self .skipTest (f"setlocale(LC_CTYPE, { loc !r} ) failed: { exc !r} " )
574
- self .assertEqual (loc , locale .getlocale (locale .LC_CTYPE ))
575
-
576
595
def test_invalid_locale_format_in_localetuple (self ):
577
596
with self .assertRaises (TypeError ):
578
597
locale .setlocale (locale .LC_ALL , b'fi_FI' )
0 commit comments