@@ -486,6 +486,44 @@ 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
+ try :
497
+ locale .setlocale (locale .LC_CTYPE , 'tr_TR' )
498
+ except locale .Error :
499
+ # Unsupported locale on this system
500
+ self .skipTest ('test needs Turkish locale' )
501
+ loc = locale .getlocale (locale .LC_CTYPE )
502
+ if verbose :
503
+ print ('testing with %a' % (loc ,), end = ' ' , flush = True )
504
+ try :
505
+ locale .setlocale (locale .LC_CTYPE , loc )
506
+ except locale .Error as exc :
507
+ # bpo-37945: setlocale(LC_CTYPE) fails with getlocale(LC_CTYPE)
508
+ # and the tr_TR locale on Windows. getlocale() builds a locale
509
+ # which is not recognize by setlocale().
510
+ self .skipTest (f"setlocale(LC_CTYPE, { loc !r} ) failed: { exc !r} " )
511
+ self .assertEqual (loc , locale .getlocale (locale .LC_CTYPE ))
512
+
513
+ def test_setlocale_long_encoding (self ):
514
+ # gh-137273: Debug assertion failure on Windows for long encoding.
515
+ oldlocale = locale .setlocale (locale .LC_ALL )
516
+ self .addCleanup (locale .setlocale , locale .LC_ALL , oldlocale )
517
+ with self .assertRaises (locale .Error ):
518
+ locale .setlocale (locale .LC_CTYPE , 'en_US.' + 'x' * 16 )
519
+ locale .setlocale (locale .LC_CTYPE , 'en_US.UTF-8' )
520
+ loc = locale .setlocale (locale .LC_ALL )
521
+ self .assertIn ('.UTF-8' , loc )
522
+ loc2 = loc .replace ('UTF-8' , 'x' * 16 , 1 )
523
+ with self .assertRaises (locale .Error ):
524
+ locale .setlocale (locale .LC_ALL , loc2 )
525
+
526
+
489
527
class TestMiscellaneous (unittest .TestCase ):
490
528
def test_defaults_UTF8 (self ):
491
529
# Issue #18378: on (at least) macOS setting LC_CTYPE to "UTF-8" is
@@ -552,27 +590,6 @@ def test_setlocale_category(self):
552
590
# crasher from bug #7419
553
591
self .assertRaises (locale .Error , locale .setlocale , 12345 )
554
592
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
593
def test_invalid_locale_format_in_localetuple (self ):
577
594
with self .assertRaises (TypeError ):
578
595
locale .setlocale (locale .LC_ALL , b'fi_FI' )
0 commit comments