summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_embed.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_embed.py')
-rw-r--r--Lib/test/test_embed.py39
1 files changed, 19 insertions, 20 deletions
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index b6311e4..9155c40 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -268,10 +268,10 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'dump_refs': 0,
'malloc_stats': 0,
- # None means that the default encoding is read at runtime:
- # see get_locale_encoding().
+ # None means that the value is get by get_locale_encoding()
'filesystem_encoding': None,
- 'filesystem_errors': sys.getfilesystemencodeerrors(),
+ 'filesystem_errors': None,
+
'utf8_mode': 0,
'coerce_c_locale': 0,
'coerce_c_locale_warn': 0,
@@ -294,7 +294,8 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'quiet': 0,
'user_site_directory': 1,
'buffered_stdio': 1,
- # None means that check_config() gets the expected encoding at runtime
+
+ # None means that the value is get by get_stdio_encoding()
'stdio_encoding': None,
'stdio_errors': None,
@@ -303,7 +304,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'_frozen': 0,
}
-
def get_stdio_encoding(self, env):
code = 'import sys; print(sys.stdout.encoding, sys.stdout.errors)'
args = (sys.executable, '-c', code)
@@ -315,18 +315,12 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
out = proc.stdout.rstrip()
return out.split()
- def get_locale_encoding(self, isolated):
- if sys.platform in ('win32', 'darwin') or support.is_android:
- # Windows, macOS and Android use UTF-8
- return "utf-8"
-
- code = ('import codecs, locale, sys',
- 'locale.setlocale(locale.LC_CTYPE, "")',
- 'enc = locale.nl_langinfo(locale.CODESET)',
- 'enc = codecs.lookup(enc).name',
- 'print(enc)')
- args = (sys.executable, '-c', '; '.join(code))
- env = dict(os.environ)
+ def get_filesystem_encoding(self, isolated, env):
+ code = ('import codecs, locale, sys; '
+ 'print(sys.getfilesystemencoding(), '
+ 'sys.getfilesystemencodeerrors())')
+ args = (sys.executable, '-c', code)
+ env = dict(env)
if not isolated:
env['PYTHONCOERCECLOCALE'] = '0'
env['PYTHONUTF8'] = '0'
@@ -336,7 +330,8 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
if proc.returncode:
raise Exception(f"failed to get the locale encoding: "
f"stdout={proc.stdout!r} stderr={proc.stderr!r}")
- return proc.stdout.rstrip()
+ out = proc.stdout.rstrip()
+ return out.split()
def check_config(self, testname, expected):
expected = dict(self.DEFAULT_CONFIG, **expected)
@@ -356,8 +351,12 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
expected['stdio_encoding'] = res[0]
if expected['stdio_errors'] is None:
expected['stdio_errors'] = res[1]
- if expected['filesystem_encoding'] is None:
- expected['filesystem_encoding'] = self.get_locale_encoding(expected['isolated'])
+ if expected['filesystem_encoding'] is None or expected['filesystem_errors'] is None:
+ res = self.get_filesystem_encoding(expected['isolated'], env)
+ if expected['filesystem_encoding'] is None:
+ expected['filesystem_encoding'] = res[0]
+ if expected['filesystem_errors'] is None:
+ expected['filesystem_errors'] = res[1]
for key, value in expected.items():
expected[key] = str(value)