bpo-18378: Recognize "UTF-8" as a valid name in locale._parse_localen… · miss-islington/cpython@b0caf32 (original) (raw)

Original file line number Diff line number Diff line change
@@ -493,6 +493,42 @@ def test_japanese(self):
493 493
494 494
495 495 class TestMiscellaneous(unittest.TestCase):
496 +def test_defaults_UTF8(self):
497 +# Issue #18378: on (at least) macOS setting LC_CTYPE to "UTF-8" is
498 +# valid. Futhermore LC_CTYPE=UTF is used by the UTF-8 locale coercing
499 +# during interpreter startup (on macOS).
500 +import _locale
501 +import os
502 +
503 +self.assertEqual(locale._parse_localename('UTF-8'), (None, 'UTF-8'))
504 +
505 +if hasattr(_locale, '_getdefaultlocale'):
506 +orig_getlocale = _locale._getdefaultlocale
507 +del _locale._getdefaultlocale
508 +else:
509 +orig_getlocale = None
510 +
511 +orig_env = {}
512 +try:
513 +for key in ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE'):
514 +if key in os.environ:
515 +orig_env[key] = os.environ[key]
516 +del os.environ[key]
517 +
518 +os.environ['LC_CTYPE'] = 'UTF-8'
519 +
520 +self.assertEqual(locale.getdefaultlocale(), (None, 'UTF-8'))
521 +
522 +finally:
523 +for k in orig_env:
524 +os.environ[k] = orig_env[k]
525 +
526 +if 'LC_CTYPE' not in orig_env:
527 +del os.environ['LC_CTYPE']
528 +
529 +if orig_getlocale is not None:
530 +_locale._getdefaultlocale = orig_getlocale
531 +
496 532 def test_getpreferredencoding(self):
497 533 # Invoke getpreferredencoding to make sure it does not cause exceptions.
498 534 enc = locale.getpreferredencoding()