@@ -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() |