summaryrefslogtreecommitdiffstats
path: root/js/src/tests/lib/wptreport.py
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/lib/wptreport.py')
-rw-r--r--js/src/tests/lib/wptreport.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/js/src/tests/lib/wptreport.py b/js/src/tests/lib/wptreport.py
new file mode 100644
index 0000000000..95fa9b1ed7
--- /dev/null
+++ b/js/src/tests/lib/wptreport.py
@@ -0,0 +1,85 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Integration between the jstests harness and `WptreportFormatter`.
+#
+# `WptreportFormatter` uses the data format specified in
+# <https://firefox-source-docs.mozilla.org/mozbase/mozlog.html>.
+
+from time import time
+
+from wptrunner.formatters.wptreport import WptreportFormatter
+
+
+class WptreportHandler(object):
+ def __init__(self, out):
+ """
+ Initialize the WptreportHandler handler.
+
+ :param str out: path to a file to write output to.
+ """
+ self.out = out
+ self.formatter = WptreportFormatter()
+
+ def suite_start(self):
+ """
+ Produce the "suite_start" message at the present time.
+ """
+ self.formatter.suite_start(
+ {
+ "time": time(),
+ "run_info": {},
+ }
+ )
+
+ def suite_end(self):
+ """
+ Produce the "suite_end" message at the present time and write the
+ results to the file path given in the constructor.
+ """
+ result = self.formatter.suite_end(
+ {
+ "time": time(),
+ }
+ )
+ with open(self.out, "w") as fp:
+ fp.write(result)
+
+ def test(self, result, duration):
+ """
+ Produce the "test_start", "test_status" and "test_end" messages, as
+ appropriate.
+
+ :param dict result: a dictionary with the test results. It should
+ include the following keys:
+ * "name": the ID of the test;
+ * "status": the actual status of the whole test;
+ * "expected": the expected status of the whole test;
+ * "subtests": a list of dicts with keys "test",
+ "subtest", "status" and "expected".
+ :param float duration: the runtime of the test
+ """
+ testname = result["name"]
+
+ end_time = time()
+ start_time = end_time - duration
+
+ self.formatter.test_start(
+ {
+ "test": testname,
+ "time": start_time,
+ }
+ )
+
+ for subtest in result["subtests"]:
+ self.formatter.test_status(subtest)
+
+ self.formatter.test_end(
+ {
+ "test": testname,
+ "time": end_time,
+ "status": result["status"],
+ "expected": result["expected"],
+ }
+ )