<!DOCTYPE html>
<meta charset="utf-8" />
<title>Reporting: Generate Test Report</title>
<link rel="author" title="Paul Meyer" href="paulmeyer@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script>
  // Test that the "generate_test_report" API works.
  async_test(function(test) {
    var observer = new ReportingObserver(function(reports) {
      test.step(function() {
        assert_equals(reports.length, 1);
        // Ensure that the contents of the report are valid.
        assert_equals(reports[0].type, "test");
        assert_true(reports[0].url.endsWith("reporting/generateTestReport.html"));
        assert_equals(reports[0].body.message, "Test message.");
        // Ensure that the toJSON() call of the report are valid.
        const reportJSON = reports[0].toJSON();
        assert_equals(reports[0].type, reportJSON.type);
        assert_equals(reports[0].url, reportJSON.url);
        assert_equals(reports[0].body.message, reportJSON.body.message);
        // Ensure that report can be successfully JSON serialized.
        assert_equals(JSON.stringify(reports[0]), JSON.stringify(reportJSON));
      });
      test.done();
    });
    observer.observe();

    // This should result in a "test" type report being generated and observed.
    test_driver.generate_test_report("Test message.")
      .catch(test.unreached_func('generate test report failed'));
  }, "Generate Test Report");
</script>
