[llvm] 54bea88 - [lit] Add --wtt-output option to report results in WTT (.wtl) format (#211066)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 10 22:29:48 PDT 2026
Author: Yasser Khan
Date: 2026-08-10T22:29:42-07:00
New Revision: 54bea8844e0a1b8e19b9dbd968d491ee0bf8f3f0
URL: https://github.com/llvm/llvm-project/commit/54bea8844e0a1b8e19b9dbd968d491ee0bf8f3f0
DIFF: https://github.com/llvm/llvm-project/commit/54bea8844e0a1b8e19b9dbd968d491ee0bf8f3f0.diff
LOG: [lit] Add --wtt-output option to report results in WTT (.wtl) format (#211066)
Adds a WttReport reporter and a --wtt-output <file> option that writes a
WTT (Windows Test Technology) .wtl log. This lets lit report test
specific pass/fail results in a format consumable by Windows lab
infrastructure.
The reporter follows the existing pattern in reports.py (ResultDBReport,
XunitReport, TimeTraceReport) and is wired through cl_arguments.py like
the other output options. PASS/XFAIL map to Pass and everything else to
Fail. UNSUPPORTED tests are reported as Pass with a summary of skipped
tests.
Note: AI was used to help create the file.write commands and for
creating the testing content based on issues humans and AI resolved
during development.
Associated RFC:
https://discourse.llvm.org/t/rfc-add-a-wtt-output-format-for-reporting-lit-results-to-windows-test-infrastructure/91215
Added:
llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py
llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini
llvm/utils/lit/tests/Inputs/wtt-output/fail.ini
llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg
llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini
llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini
llvm/utils/lit/tests/Inputs/wtt-output/pass.ini
llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini
llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini
llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini
llvm/utils/lit/tests/test-output-wtt.py
Modified:
llvm/utils/lit/lit/cl_arguments.py
llvm/utils/lit/lit/reports.py
Removed:
################################################################################
diff --git a/llvm/utils/lit/lit/cl_arguments.py b/llvm/utils/lit/lit/cl_arguments.py
index 4b3b45cf8fa2e..be0f154a10552 100644
--- a/llvm/utils/lit/lit/cl_arguments.py
+++ b/llvm/utils/lit/lit/cl_arguments.py
@@ -334,6 +334,11 @@ def parse_args():
type=lit.reports.TimeTraceReport,
help="Write Chrome tracing compatible JSON to the specified file",
)
+ execution_group.add_argument(
+ "--wtt-output",
+ type=lit.reports.WttReport,
+ help="Write a WTT (.wtl) log file for Windows test infrastructure consumption",
+ )
# This option only exists for the benefit of LLVM's Buildkite CI pipelines.
# As soon as it is not needed, it should be removed. Its help text would be:
# When enabled, lit will add a unique element to the output file name,
@@ -571,6 +576,7 @@ def parse_args():
opts.xunit_xml_output,
opts.resultdb_output,
opts.time_trace_output,
+ opts.wtt_output,
],
)
)
diff --git a/llvm/utils/lit/lit/reports.py b/llvm/utils/lit/lit/reports.py
index 4a166e16c500a..998b29494497c 100755
--- a/llvm/utils/lit/lit/reports.py
+++ b/llvm/utils/lit/lit/reports.py
@@ -302,3 +302,162 @@ def _get_test_event(self, test, first_start_time):
"dur": int(elapsed_time * 1000000.0),
"name": test_name,
}
+
+
+def _wtt_attr(text: str) -> str:
+ """Prepare text for a WTT XML attribute value.
+
+ Flattens newlines/tabs to spaces (raw newlines are illegal in XML
+ attributes), drops invalid XML chars using the shared helper, then
+ quotes. quoteattr adds the quotes.
+ """
+ text = (
+ text.replace("\r\n", " ")
+ .replace("\n", " ")
+ .replace("\r", " ")
+ .replace("\t", " ")
+ )
+ return quo(remove_invalid_xml_chars(text))
+
+
+class WttReport(Report):
+ def write_results(self, tests, elapsed: float) -> None:
+ with open(self.output_file, "w", encoding="utf-16") as f:
+ self._write_results_to_file(tests, elapsed, f)
+
+ def _write_results_to_file(self, tests, elapsed: float, file) -> None:
+ tests.sort(key=by_suite_and_test_path)
+
+ machine = os.getenv("COMPUTERNAME", "")
+ pid = os.getpid()
+
+ starts = [t.result.start for t in tests if t.result and t.result.start]
+ base = min(starts) if starts else 0.0
+ base_dt = datetime.datetime.fromtimestamp(base)
+ base_time = base_dt.strftime("%Y:%m:%d %H:%M:%S") + ":%03d" % (
+ base_dt.microsecond // 1000
+ )
+
+ def times(test) -> tuple[int, int]:
+ elapsed_time = test.result.elapsed or 0.0
+ start_time = test.result.start - base if test.result.start else 0.0
+ return int(start_time), int(start_time + elapsed_time)
+
+ root_ctx = 1
+ end_ticks = int(elapsed)
+
+ def rc(ref_ctx: str) -> str:
+ return f'\t<rti id="" />\n\t<ctx id="{ref_ctx}" />\n'
+
+ file.write('<?xml version="1.0" encoding="utf-16"?>\n')
+ file.write("<WTT-Logger>\n")
+
+ file.write(
+ f'<RTI ID="" Machine="{machine}" ProcessName="lit" '
+ f'ProcessID="{pid}" ThreadID="0" '
+ f'BaseTime="{base_time}" Frequency="1" />\n'
+ )
+ file.write(f'<CTX ID="{root_ctx}" Current="WTTLOG" Parent="ROOT" />\n')
+
+ passed = 0
+ failed = 0
+ unsupported = 0
+ excluded = 0
+ skipped = 0
+
+ for test in tests:
+ if test.result is None:
+ continue
+
+ code = test.result.code
+ name = test.getFullName()
+ created_at, logged_at = times(test)
+
+ # UNSUPPORTED: report as Pass (feature not applicable on this device).
+ if code == lit.Test.UNSUPPORTED:
+ file.write(f'<CTX ID="" Current={_wtt_attr(name)} Parent="WTTLOG" />\n')
+ file.write(
+ f'<StartTest Title={_wtt_attr(name)} TUID="" CA="{created_at}" LA="{created_at}">\n{rc("")}</StartTest>\n'
+ )
+ unsupported_msg = _wtt_attr(
+ "UNSUPPORTED on this device; reported as Pass (not applicable)."
+ )
+ file.write(
+ f'<Msg UserText={unsupported_msg} CA="{logged_at}" LA="{logged_at}">\n{rc("")}</Msg>\n'
+ )
+ file.write(
+ f'<EndTest Title={_wtt_attr(name)} TUID="" Result="Pass" Repro="" CA="{logged_at}" LA="{logged_at}">\n{rc("")}</EndTest>\n'
+ )
+ unsupported += 1
+ continue
+
+ # EXCLUDED / SKIPPED: omitted from the log and from pass/fail results.
+ if code == lit.Test.EXCLUDED:
+ excluded += 1
+ continue
+ if code == lit.Test.SKIPPED:
+ skipped += 1
+ continue
+
+ if code in (lit.Test.PASS, lit.Test.XFAIL):
+ result = "Pass"
+ passed += 1
+ else:
+ result = "Fail"
+ failed += 1
+
+ file.write(f'<CTX ID="" Current={_wtt_attr(name)} Parent="WTTLOG" />\n')
+ file.write(
+ f'<StartTest Title={_wtt_attr(name)} TUID="" CA="{created_at}" LA="{created_at}">\n{rc("")}</StartTest>\n'
+ )
+
+ # Write error output for failures (WTT uses <Error>, not <Err>).
+ if result == "Fail" and test.result.output:
+ error_text = _wtt_attr(test.result.output[:4096])
+ file.write(
+ f'<Error UserText={error_text} CA="{logged_at}" LA="{logged_at}">\n{rc("")}</Error>\n'
+ )
+
+ if result == "Pass" and test.result.output:
+ pass_text = _wtt_attr(test.result.output[:1024])
+ file.write(
+ f'<Msg UserText={pass_text} CA="{logged_at}" LA="{logged_at}">\n{rc("")}</Msg>\n'
+ )
+
+ file.write(
+ f'<EndTest Title={_wtt_attr(name)} TUID="" Result="{result}" Repro="" CA="{logged_at}" LA="{logged_at}">\n{rc("")}</EndTest>\n'
+ )
+
+ # Tally of UNSUPPORTED tests reported as Pass.
+ if unsupported > 0:
+ tally = _wtt_attr(
+ f"{unsupported} test(s) were UNSUPPORTED on this device and "
+ f"reported as Pass (not applicable)."
+ )
+ file.write(
+ f'<Msg UserText={tally} CA="{end_ticks}" LA="{end_ticks}">\n{rc(root_ctx)}</Msg>\n'
+ )
+
+ # Tally of tests omitted from results.
+ not_run = excluded + skipped
+ if not_run > 0:
+ parts = []
+ if excluded:
+ parts.append(f"{excluded} excluded")
+ if skipped:
+ parts.append(f"{skipped} skipped")
+ tally = _wtt_attr(
+ f"{not_run} test(s) were not run ({', '.join(parts)}) and are "
+ f"omitted from the pass/fail results."
+ )
+ file.write(
+ f'<Msg UserText={tally} CA="{end_ticks}" LA="{end_ticks}">\n{rc(root_ctx)}</Msg>\n'
+ )
+
+ total = passed + failed + unsupported
+ file.write(
+ f'<PFRollup Total="{total}" Passed="{passed + unsupported}" Failed="{failed}" '
+ f'Blocked="0" Warned="0" Skipped="0" CA="{end_ticks}" LA="{end_ticks}">\n'
+ f"{rc(root_ctx)}</PFRollup>\n"
+ )
+ file.write("</WTT-Logger>\n")
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py b/llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py
new file mode 100644
index 0000000000000..43da0973df614
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/dummy_format.py
@@ -0,0 +1,39 @@
+import os
+import configparser
+
+import lit.formats
+import lit.Test
+
+
+class DummyFormat(lit.formats.FileBasedTest):
+ def execute(self, test, lit_config):
+ # In this dummy format, expect that each test file is actually just a
+ # .ini format dump of the results to report.
+
+ source_path = test.getSourcePath()
+
+ cfg = configparser.ConfigParser()
+ cfg.read(source_path)
+
+ # Create the basic test result.
+ result_code = cfg.get("global", "result_code")
+ result_output = cfg.get("global", "result_output")
+ result = lit.Test.Result(getattr(lit.Test, result_code), result_output)
+
+ if cfg.has_option("global", "required_feature"):
+ required_feature = cfg.get("global", "required_feature")
+ if required_feature:
+ test.requires.append(required_feature)
+
+ # Load additional metrics.
+ for key, value_str in cfg.items("results"):
+ value = eval(value_str)
+ if isinstance(value, int):
+ metric = lit.Test.IntMetricValue(value)
+ elif isinstance(value, float):
+ metric = lit.Test.RealMetricValue(value)
+ else:
+ raise RuntimeError("unsupported result type")
+ result.addMetric(key, metric)
+
+ return result
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini b/llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini
new file mode 100644
index 0000000000000..f62ede446872a
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/excluded.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = EXCLUDED
+result_output = not shown
+
+[results]
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/fail.ini b/llvm/utils/lit/tests/Inputs/wtt-output/fail.ini
new file mode 100644
index 0000000000000..0a92119f654fa
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/fail.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = FAIL
+result_output = test failed
+
+[results]
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg b/llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg
new file mode 100644
index 0000000000000..a2a65a115f81a
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/lit.cfg
@@ -0,0 +1,11 @@
+import site
+
+site.addsitedir(os.path.dirname(__file__))
+import dummy_format
+
+config.name = "wtt-data"
+config.suffixes = [".ini"]
+config.test_format = dummy_format.DummyFormat()
+config.test_source_root = None
+config.test_exec_root = None
+config.target_triple = None
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini b/llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini
new file mode 100644
index 0000000000000..09fb2a132929f
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/missing_feature.ini
@@ -0,0 +1,7 @@
+[global]
+result_code = UNSUPPORTED
+result_output = not shown
+
+required_feature = dummy_feature
+
+[results]
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini b/llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini
new file mode 100644
index 0000000000000..a5264cd40288c
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/multiline_fail.ini
@@ -0,0 +1,6 @@
+[global]
+result_code = FAIL
+result_output = first line
+ second "line" & <tag> ]]>
+
+[results]
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/pass.ini b/llvm/utils/lit/tests/Inputs/wtt-output/pass.ini
new file mode 100644
index 0000000000000..c1e2241526398
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/pass.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = PASS
+result_output = not shown
+
+[results]
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini b/llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini
new file mode 100644
index 0000000000000..b70b168441bf3
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/pass_with_output.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = PASS
+result_output = ran ok
+
+[results]
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini b/llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini
new file mode 100644
index 0000000000000..0d567b35a0a4b
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/unsupported.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = UNSUPPORTED
+result_output = not shown
+
+[results]
diff --git a/llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini b/llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini
new file mode 100644
index 0000000000000..3ca7fa60f1f0c
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/wtt-output/xfail.ini
@@ -0,0 +1,5 @@
+[global]
+result_code = XFAIL
+result_output = expected fail
+
+[results]
diff --git a/llvm/utils/lit/tests/test-output-wtt.py b/llvm/utils/lit/tests/test-output-wtt.py
new file mode 100644
index 0000000000000..b28f40d8b1ba1
--- /dev/null
+++ b/llvm/utils/lit/tests/test-output-wtt.py
@@ -0,0 +1,124 @@
+# Test the WTT (.wtl) reporter (--wtt-output).
+#
+# The reporter writes UTF-16, which FileCheck cannot read directly, so
+# transcode the log to UTF-8 once and then assert the entire output. The
+# reporter emits tests in a stable (suite, path) order, so the log is
+# deterministic.
+
+# RUN: rm -f %t.wtl %t.wtl.utf8
+# RUN: not %{lit} --wtt-output %t.wtl %{inputs}/wtt-output
+# RUN: %{python} -c "import io; io.open(r'%t.wtl.utf8','w',encoding='utf-8').write(io.open(r'%t.wtl',encoding='utf-16').read())"
+# RUN: FileCheck %s < %t.wtl.utf8
+
+# The only volatile fields are the machine/pid/timestamp in the <RTI> header and
+# the CA/LA tick counts (elapsed seconds, which round up on slower machines);
+# everything else is fixed, so the rest of the log is asserted verbatim.
+
+# CHECK: <?xml version="1.0" encoding="utf-16"?>
+# CHECK-NEXT: <WTT-Logger>
+# CHECK-NEXT: <RTI ID="" Machine="{{.*}}" ProcessName="lit" ProcessID="{{[0-9]+}}" ThreadID="0" BaseTime="{{.*}}" Frequency="1" />
+# CHECK-NEXT: <CTX ID="1" Current="WTTLOG" Parent="ROOT" />
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: fail.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: fail.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Error UserText="test failed" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Error>
+# CHECK-NEXT: <EndTest Title="wtt-data :: fail.ini" TUID="" Result="Fail" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: missing_feature.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: missing_feature.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="UNSUPPORTED on this device; reported as Pass (not applicable)." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: missing_feature.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: multiline_fail.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: multiline_fail.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Error UserText='first line second "line" & <tag> ]]>' CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Error>
+# CHECK-NEXT: <EndTest Title="wtt-data :: multiline_fail.ini" TUID="" Result="Fail" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: pass.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: pass.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="not shown" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: pass.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: pass_with_output.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: pass_with_output.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="ran ok" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: pass_with_output.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: unsupported.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: unsupported.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="UNSUPPORTED on this device; reported as Pass (not applicable)." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: unsupported.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <CTX ID="" Current="wtt-data :: xfail.ini" Parent="WTTLOG" />
+# CHECK-NEXT: <StartTest Title="wtt-data :: xfail.ini" TUID="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </StartTest>
+# CHECK-NEXT: <Msg UserText="expected fail" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <EndTest Title="wtt-data :: xfail.ini" TUID="" Result="Pass" Repro="" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="" />
+# CHECK-NEXT: </EndTest>
+# CHECK-NEXT: <Msg UserText="2 test(s) were UNSUPPORTED on this device and reported as Pass (not applicable)." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="1" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <Msg UserText="1 test(s) were not run (1 excluded) and are omitted from the pass/fail results." CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="1" />
+# CHECK-NEXT: </Msg>
+# CHECK-NEXT: <PFRollup Total="7" Passed="5" Failed="2" Blocked="0" Warned="0" Skipped="0" CA="{{[0-9]+}}" LA="{{[0-9]+}}">
+# CHECK-NEXT: <rti id="" />
+# CHECK-NEXT: <ctx id="1" />
+# CHECK-NEXT: </PFRollup>
+# CHECK-NEXT: </WTT-Logger>
More information about the llvm-commits
mailing list