summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub KulĂ­k <Kulikjak@gmail.com>2019-07-02 12:46:01 +0200
committerVictor Stinner <vstinner@redhat.com>2019-07-02 12:46:00 +0200
commitc53173aa00689aa1be17ce5406289718f6b30532 (patch)
treef3f1d9bc0595434bdc16ff3d7fa7d8a3db474fb3
parentbf82cd3124df94935c6e3190c7c40b76918d2174 (diff)
downloadcpython-git-c53173aa00689aa1be17ce5406289718f6b30532.tar.gz
bpo-37335: Fix test_c_locale_coercion to handle any ASCII alias (GH-14449)
Fix unexpected ASCII aliases in locale coercion tests: normalize encoding names with codecs.lookup(encoding).name.
-rw-r--r--Lib/test/test_c_locale_coercion.py34
-rw-r--r--Misc/NEWS.d/next/Tests/2019-06-28-16-54-46.bpo-37335.LLzOx8.rst2
2 files changed, 12 insertions, 24 deletions
diff --git a/Lib/test/test_c_locale_coercion.py b/Lib/test/test_c_locale_coercion.py
index f2351fa5a2..94391c8799 100644
--- a/Lib/test/test_c_locale_coercion.py
+++ b/Lib/test/test_c_locale_coercion.py
@@ -97,11 +97,11 @@ _EncodingDetails = namedtuple("EncodingDetails", _fields)
class EncodingDetails(_EncodingDetails):
# XXX (ncoghlan): Using JSON for child state reporting may be less fragile
CHILD_PROCESS_SCRIPT = ";".join([
- "import sys, os",
- "print(sys.getfilesystemencoding())",
- "print(sys.stdin.encoding + ':' + sys.stdin.errors)",
- "print(sys.stdout.encoding + ':' + sys.stdout.errors)",
- "print(sys.stderr.encoding + ':' + sys.stderr.errors)",
+ "import sys, os, codecs",
+ "print(codecs.lookup(sys.getfilesystemencoding()).name)",
+ "print(codecs.lookup(sys.stdin.encoding).name + ':' + sys.stdin.errors)",
+ "print(codecs.lookup(sys.stdout.encoding).name + ':' + sys.stdout.errors)",
+ "print(codecs.lookup(sys.stderr.encoding).name + ':' + sys.stderr.errors)",
"print(os.environ.get('LANG', 'not set'))",
"print(os.environ.get('LC_CTYPE', 'not set'))",
"print(os.environ.get('LC_ALL', 'not set'))",
@@ -116,28 +116,15 @@ class EncodingDetails(_EncodingDetails):
stream_info = 2*[_stream.format("surrogateescape")]
# stderr should always use backslashreplace
stream_info.append(_stream.format("backslashreplace"))
- expected_lang = env_vars.get("LANG", "not set").lower()
+ expected_lang = env_vars.get("LANG", "not set")
if coercion_expected:
- expected_lc_ctype = CLI_COERCION_TARGET.lower()
+ expected_lc_ctype = CLI_COERCION_TARGET
else:
- expected_lc_ctype = env_vars.get("LC_CTYPE", "not set").lower()
- expected_lc_all = env_vars.get("LC_ALL", "not set").lower()
+ expected_lc_ctype = env_vars.get("LC_CTYPE", "not set")
+ expected_lc_all = env_vars.get("LC_ALL", "not set")
env_info = expected_lang, expected_lc_ctype, expected_lc_all
return dict(cls(fs_encoding, *stream_info, *env_info)._asdict())
- @staticmethod
- def _handle_output_variations(data):
- """Adjust the output to handle platform specific idiosyncrasies
-
- * Some platforms report ASCII as ANSI_X3.4-1968
- * Some platforms report ASCII as US-ASCII
- * Some platforms report UTF-8 instead of utf-8
- """
- data = data.replace(b"ANSI_X3.4-1968", b"ascii")
- data = data.replace(b"US-ASCII", b"ascii")
- data = data.lower()
- return data
-
@classmethod
def get_child_details(cls, env_vars):
"""Retrieves fsencoding and standard stream details from a child process
@@ -157,8 +144,7 @@ class EncodingDetails(_EncodingDetails):
if not result.rc == 0:
result.fail(py_cmd)
# All subprocess outputs in this test case should be pure ASCII
- adjusted_output = cls._handle_output_variations(result.out)
- stdout_lines = adjusted_output.decode("ascii").splitlines()
+ stdout_lines = result.out.decode("ascii").splitlines()
child_encoding_details = dict(cls(*stdout_lines)._asdict())
stderr_lines = result.err.decode("ascii").rstrip().splitlines()
return child_encoding_details, stderr_lines
diff --git a/Misc/NEWS.d/next/Tests/2019-06-28-16-54-46.bpo-37335.LLzOx8.rst b/Misc/NEWS.d/next/Tests/2019-06-28-16-54-46.bpo-37335.LLzOx8.rst
new file mode 100644
index 0000000000..71fad15dd8
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-28-16-54-46.bpo-37335.LLzOx8.rst
@@ -0,0 +1,2 @@
+Improve locale coercion tests by using codec lookup instead of more fragile
+replace().