|
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