[llvm] 27fdf8a - [lit] Don't fail when printing test output with special chars
Joel E. Denny via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 25 15:29:35 PDT 2019
Author: Joel E. Denny
Date: 2019-10-25T18:13:13-04:00
New Revision: 27fdf8a29d1e0740c342d428fa48eda7b088ac8e
URL: https://github.com/llvm/llvm-project/commit/27fdf8a29d1e0740c342d428fa48eda7b088ac8e
DIFF: https://github.com/llvm/llvm-project/commit/27fdf8a29d1e0740c342d428fa48eda7b088ac8e.diff
LOG: [lit] Don't fail when printing test output with special chars
This addresses a UnicodeEncodeError when using Python 3.6.5 in Windows
10.
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D69207
Added:
llvm/utils/lit/tests/Inputs/shtest-shell/stdout-encoding.txt
Modified:
llvm/utils/lit/lit/display.py
llvm/utils/lit/tests/max-failures.py
llvm/utils/lit/tests/shtest-shell.py
Removed:
################################################################################
diff --git a/llvm/utils/lit/lit/display.py b/llvm/utils/lit/lit/display.py
index 5c6d6b6e08e4..26700134d2e4 100644
--- a/llvm/utils/lit/lit/display.py
+++ b/llvm/utils/lit/lit/display.py
@@ -70,7 +70,20 @@ def print_result(self, test):
if test.result.code.isFailure:
print("%s TEST '%s' FAILED %s" % ('*'*20, test.getFullName(),
'*'*20))
- print(test.result.output)
+ out = test.result.output
+ # Encode/decode so that, when using Python 3.6.5 in Windows 10,
+ # print(out) doesn't raise UnicodeEncodeError if out contains
+ # special characters. However, Python 2 might try to decode
+ # as part of the encode call if out is already encoded, so skip
+ # encoding if it raises UnicodeDecodeError.
+ if sys.stdout.encoding:
+ try:
+ out = out.encode(encoding=sys.stdout.encoding,
+ errors="replace")
+ except UnicodeDecodeError:
+ pass
+ out = out.decode(encoding=sys.stdout.encoding)
+ print(out)
print("*" * 20)
# Report test metrics, if present.
diff --git a/llvm/utils/lit/tests/Inputs/shtest-shell/stdout-encoding.txt b/llvm/utils/lit/tests/Inputs/shtest-shell/stdout-encoding.txt
new file mode 100644
index 000000000000..8a891c8c6242
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/shtest-shell/stdout-encoding.txt
@@ -0,0 +1,7 @@
+# Check that lit doesn't fail when printing special characters in its test
+# results.
+
+# RUN: cat
diff -in.bin
+
+# Fail so lit will print output.
+# RUN: false
diff --git a/llvm/utils/lit/tests/max-failures.py b/llvm/utils/lit/tests/max-failures.py
index 6ad375336922..f661980ac2b5 100644
--- a/llvm/utils/lit/tests/max-failures.py
+++ b/llvm/utils/lit/tests/max-failures.py
@@ -8,7 +8,7 @@
#
# END.
-# CHECK: Failing Tests (32)
+# CHECK: Failing Tests (33)
# CHECK: Failing Tests (1)
# CHECK: Failing Tests (2)
# CHECK: error: argument --max-failures: requires positive integer, but found '0'
diff --git a/llvm/utils/lit/tests/shtest-shell.py b/llvm/utils/lit/tests/shtest-shell.py
index 1fc8b30c7eea..cef3728dd004 100644
--- a/llvm/utils/lit/tests/shtest-shell.py
+++ b/llvm/utils/lit/tests/shtest-shell.py
@@ -413,5 +413,17 @@
# CHECK: PASS: shtest-shell :: rm-unicode-0.txt
# CHECK: PASS: shtest-shell :: sequencing-0.txt
# CHECK: XFAIL: shtest-shell :: sequencing-1.txt
+
+# CHECK: FAIL: shtest-shell :: stdout-encoding.txt
+# CHECK: *** TEST 'shtest-shell :: stdout-encoding.txt' FAILED ***
+# CHECK: $ "cat" "
diff -in.bin"
+# CHECK: # command output:
+# CHECK-NEXT: {{^.f.o.o.$}}
+# CHECK-NEXT: {{^.b.a.r..}}
+# CHECK-NEXT: {{^.b.a.z.$}}
+# CHECK-NOT: error
+# CHECK: $ "false"
+# CHECK: ***
+
# CHECK: PASS: shtest-shell :: valid-shell.txt
-# CHECK: Failing Tests (32)
+# CHECK: Failing Tests (33)
More information about the llvm-commits
mailing list