# 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 # . 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"], } )