summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2020-01-24 17:27:12 (GMT)
committerBen Gamari <ben@smart-cactus.org>2020-01-24 20:00:19 (GMT)
commita84a8e56ef77875f8210fa5c5c2a9eb2c58dc0cd (patch)
treea20d1c2330fdcc8f35f1471a1de8a8bbbc225f30
parent738e2912bfa2122074630d38693a260e4b58aeaf (diff)
downloadghc-wip/testsuite-dump-encoding.zip
ghc-wip/testsuite-dump-encoding.tar.gz
ghc-wip/testsuite-dump-encoding.tar.bz2
testsuite: Don't crash on encoding failure in printwip/testsuite-dump-encoding
If the user doesn't use a Unicode locale then the testsuite driver would previously throw framework failures due to encoding failures. We now rather use the `replace` error-handling strategy.
-rw-r--r--testsuite/driver/testlib.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index b534d11..a4960e8 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -1768,10 +1768,10 @@ def read_stdout( name: TestName ) -> str:
return in_testdir(name, 'run.stdout').read_text(encoding='UTF-8')
def dump_stdout( name: TestName ) -> None:
- str = read_stdout(name).strip()
- if str:
+ s = read_stdout(name).strip()
+ if s:
print("Stdout (", name, "):")
- print(str)
+ safe_print(s)
def stderr_ok(name: TestName, way: WayName) -> bool:
actual_stderr_file = add_suffix(name, 'run.stderr')
@@ -1786,10 +1786,10 @@ def read_stderr( name: TestName ) -> str:
return in_testdir(name, 'run.stderr').read_text(encoding='UTF-8')
def dump_stderr( name: TestName ) -> None:
- str = read_stderr(name).strip()
- if str:
+ s = read_stderr(name).strip()
+ if s:
print("Stderr (", name, "):")
- print(str)
+ safe_print(s)
def read_no_crs(f: Path) -> str:
s = ''
@@ -2207,14 +2207,18 @@ def normalise_asm( s: str ) -> str:
out.append(ins[0])
return '\n'.join(out)
+def safe_print(s: str) -> None:
+ s2 = s.encode(sys.stdout.encoding, errors='replace')
+ print(s2)
+
def if_verbose( n: int, s: str ) -> None:
if config.verbose >= n:
- print(s)
+ safe_print(s)
def dump_file(f: Path):
try:
with f.open() as file:
- print(file.read())
+ safe_print(file.read())
except Exception:
print('')