diff --git a/tools/run-tests.py b/tools/run-tests.py index c09f61ed26..a189508737 100755 --- a/tools/run-tests.py +++ b/tools/run-tests.py @@ -288,7 +288,8 @@ def create_binary(job, options): subprocess.check_output(build_cmd) ret = 0 except subprocess.CalledProcessError as err: - print(err.output.decode("utf8")) + # For python <-> native program, we use default encoding with error='ignore' to not lost data + print(err.output.decode(errors="ignore")) ret = err.returncode BINARY_CACHE[binary_key] = (ret, build_dir_path) diff --git a/tools/runners/run-test-suite.py b/tools/runners/run-test-suite.py index 04ea68a828..4f3af6ee89 100755 --- a/tools/runners/run-test-suite.py +++ b/tools/runners/run-test-suite.py @@ -79,6 +79,7 @@ def execute_test_command(test_cmd): kwargs = {} if sys.version_info.major >= 3: kwargs['encoding'] = 'unicode_escape' + kwargs['errors'] = 'ignore' process = subprocess.Popen(test_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True, **kwargs) stdout = process.communicate()[0] diff --git a/tools/runners/test262-harness.py b/tools/runners/test262-harness.py index 33350ed194..462359e62a 100755 --- a/tools/runners/test262-harness.py +++ b/tools/runners/test262-harness.py @@ -42,6 +42,7 @@ from __future__ import print_function +import codecs import logging import optparse import os @@ -402,13 +403,13 @@ def open_file(self): text=self.text) def write(self, string): - os.write(self.file_desc, string) + os.write(self.file_desc, string.encode("utf8", "ignore")) def read(self): - file_desc = file(self.name) + file_desc = open(self.name, "rb") result = file_desc.read() file_desc.close() - return result + return result.decode("utf8", "ignore") def close(self): if not self.is_closed: @@ -460,12 +461,12 @@ def report_outcome(self, long_format): def write_output(self, target): out = self.stdout.strip() if out: - target.write("--- output --- \n %s" % out) + target.write(u"--- output --- \n %s" % out) error = self.stderr.strip() if error: - target.write("--- errors --- \n %s" % error) + target.write(u"--- errors --- \n %s" % error) - target.write("\n--- exit code: %d ---\n" % self.exit_code) + target.write(u"\n--- exit code: %d ---\n" % self.exit_code) def has_failed(self): return self.exit_code != 0 @@ -496,7 +497,7 @@ def __init__(self, suite, name, full_path, strict_mode, command_template, module self.full_path = full_path self.strict_mode = strict_mode with open(self.full_path, "rb") as file_desc: - self.contents = file_desc.read() + self.contents = file_desc.read().decode("utf8", "ignore") test_record = parse_test_record(self.contents, name) self.test = test_record["test"] del test_record["test"] @@ -762,8 +763,8 @@ def get_include(self, name): if not name in self.include_cache: static = path.join(self.lib_root, name) if path.exists(static): - with open(static) as file_desc: - contents = file_desc.read() + with open(static, "rb") as file_desc: + contents = file_desc.read().decode("utf8", "ignore") contents = re.sub(r'\r\n', '\n', contents) self.include_cache[name] = contents + "\n" else: @@ -851,7 +852,7 @@ def run(self, command_template, tests, print_summary, full_summary, logname, job report_error("No tests to run") progress = ProgressIndicator(len(cases)) if logname: - self.logf = open(logname, "w") + self.logf = codecs.open(logname, "w", encoding="utf8", errors="ignore") if job_count == 1: for case in cases: