| 
5 | 5 | from unittest import mock  | 
6 | 6 | import unittest  | 
7 | 7 | import locale  | 
 | 8 | +import os  | 
8 | 9 | import sys  | 
9 | 10 | import codecs  | 
10 | 11 | 
 
  | 
@@ -510,16 +511,26 @@ def test_getsetlocale_issue1813(self):  | 
510 | 511 |             self.skipTest(f"setlocale(LC_CTYPE, {loc!r}) failed: {exc!r}")  | 
511 | 512 |         self.assertEqual(loc, locale.getlocale(locale.LC_CTYPE))  | 
512 | 513 | 
 
  | 
 | 514 | +    @unittest.skipUnless(os.name == 'nt', 'requires Windows')  | 
513 | 515 |     def test_setlocale_long_encoding(self):  | 
 | 516 | +        with self.assertRaises(locale.Error):  | 
 | 517 | +            locale.setlocale(locale.LC_CTYPE, 'English.%016d' % 1252)  | 
 | 518 | +        locale.setlocale(locale.LC_CTYPE, 'English.%015d' % 1252)  | 
 | 519 | +        loc = locale.setlocale(locale.LC_ALL)  | 
 | 520 | +        self.assertIn('.1252', loc)  | 
 | 521 | +        loc2 = loc.replace('.1252', '.%016d' % 1252, 1)  | 
 | 522 | +        with self.assertRaises(locale.Error):  | 
 | 523 | +            locale.setlocale(locale.LC_ALL, loc2)  | 
 | 524 | +        loc2 = loc.replace('.1252', '.%015d' % 1252, 1)  | 
 | 525 | +        locale.setlocale(locale.LC_ALL, loc2)  | 
 | 526 | + | 
514 | 527 |         # 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 | 528 |         with self.assertRaises(locale.Error):  | 
518 | 529 |             locale.setlocale(locale.LC_CTYPE, 'en_US.' + 'x'*16)  | 
519 | 530 |         locale.setlocale(locale.LC_CTYPE, 'en_US.UTF-8')  | 
520 | 531 |         loc = locale.setlocale(locale.LC_ALL)  | 
521 | 532 |         self.assertIn('.UTF-8', loc)  | 
522 |  | -        loc2 = loc.replace('UTF-8', 'x'*16, 1)  | 
 | 533 | +        loc2 = loc.replace('.UTF-8', '.' + 'x'*16, 1)  | 
523 | 534 |         with self.assertRaises(locale.Error):  | 
524 | 535 |             locale.setlocale(locale.LC_ALL, loc2)  | 
525 | 536 | 
 
  | 
 | 
0 commit comments