dom/reporting/tests/test_deprecated.html
author Andrea Marchesini <amarchesini@mozilla.com>
Wed, 14 Nov 2018 20:02:33 +0100
changeset 446334 3e311bf1af407110e07215872044d8451347ff8f
child 458367 dd2caed0182342a7be4e89942c7f7407a286b5da
permissions -rw-r--r--
Bug 1492036 - Reporting API - part 5 - tests, r=smaug

<!DOCTYPE HTML>
<html>
<head>
  <title>Test for Deprecated reports</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>

<script type="application/javascript">

let testingInterface;

(new Promise(resolve => {
  info("Testing DeprecatedTestingInterface report");
  let obs = new ReportingObserver((reports, o) => {
    is(obs, o, "Same observer!");
    ok(reports.length == 1, "We have 1 report");

    let report = reports[0];
    is(report.type, "deprecation", "Deprecation report received");
    is(report.url, location.href, "URL is window.location");
    ok(!!report.body, "The report has a body");
    ok(report.body instanceof DeprecationReportBody, "Correct type for the body");
    is(report.body.id, "DeprecatedTestingInterface", "report.body.id matches DeprecatedTestingMethod");
    ok(!report.body.anticipatedRemoval, "We don't have a anticipatedRemoval");
    ok(report.body.message.includes("TestingDeprecatedInterface"), "We have a message");
    is(report.body.sourceFile, location.href, "We have a sourceFile");
    is(report.body.lineNumber, 40, "We have a lineNumber");
    is(report.body.columnNumber, 21, "We have a columnNumber");

    obs.disconnect();
    resolve();
  });
  ok(!!obs, "ReportingObserver is a thing");

  obs.observe();
  ok(true, "ReportingObserver.observe() is callable");

  testingInterface = new TestingDeprecatedInterface();
  ok(true, "Created a deprecated interface");
}))

.then(() => {
  info("Testing DeprecatedTestingMethod report");
  return new Promise(resolve => {
    let obs = new ReportingObserver((reports, o) => {
      is(obs, o, "Same observer!");
      ok(reports.length == 1, "We have 1 report");

      let report = reports[0];
      is(report.type, "deprecation", "Deprecation report received");
      is(report.url, location.href, "URL is window.location");
      ok(!!report.body, "The report has a body");
      ok(report.body instanceof DeprecationReportBody, "Correct type for the body");
      is(report.body.id, "DeprecatedTestingMethod", "report.body.id matches DeprecatedTestingMethod");
      ok(!report.body.anticipatedRemoval, "We don't have a anticipatedRemoval");
      ok(report.body.message.includes("TestingDeprecatedInterface.deprecatedMethod"), "We have a message");
      is(report.body.sourceFile, location.href, "We have a sourceFile");
      is(report.body.lineNumber, 71, "We have a lineNumber");
      is(report.body.columnNumber, 4, "We have a columnNumber");

      obs.disconnect();
      resolve();
    });
    ok(!!obs, "ReportingObserver is a thing");

    obs.observe();
    ok(true, "ReportingObserver.observe() is callable");

    testingInterface.deprecatedMethod();
    ok(true, "Run a deprecated method.");
  });
})

.then(() => {
  info("Testing DeprecatedTestingAttribute report");
  return new Promise(resolve => {
    let obs = new ReportingObserver((reports, o) => {
      is(obs, o, "Same observer!");
      ok(reports.length == 1, "We have 1 report");

      let report = reports[0];
      is(report.type, "deprecation", "Deprecation report received");
      is(report.url, location.href, "URL is window.location");
      ok(!!report.body, "The report has a body");
      ok(report.body instanceof DeprecationReportBody, "Correct type for the body");
      is(report.body.id, "DeprecatedTestingAttribute", "report.body.id matches DeprecatedTestingAttribute");
      ok(!report.body.anticipatedRemoval, "We don't have a anticipatedRemoval");
      ok(report.body.message.includes("TestingDeprecatedInterface.deprecatedAttribute"), "We have a message");
      is(report.body.sourceFile, location.href, "We have a sourceFile");
      is(report.body.lineNumber, 103, "We have a lineNumber");
      is(report.body.columnNumber, 4, "We have a columnNumber");

      obs.disconnect();
      resolve();
    });
    ok(!!obs, "ReportingObserver is a thing");

    obs.observe();
    ok(true, "ReportingObserver.observe() is callable");

    ok(testingInterface.deprecatedAttribute, "Attributed called");
  });
})

.then(() => {
  info("Testing ReportingObserver.takeRecords()");
  let p = new Promise(resolve => {
    let obs = new ReportingObserver((reports, o) => {
      is(obs, o, "Same observer!");
      resolve(obs);
    });
    ok(!!obs, "ReportingObserver is a thing");

    obs.observe();
    ok(true, "ReportingObserver.observe() is callable");

    testingInterface.deprecatedMethod();
    ok(true, "Run a deprecated method.");
  });

  return p.then(obs => {
    let reports = obs.takeRecords();
    is(reports.length, 0, "No reports after an callback");

    testingInterface.deprecatedAttribute + 1;

    reports = obs.takeRecords();
    ok(reports.length >= 1, "We have at least 1 report");

    reports = obs.takeRecords();
    is(reports.length, 0, "No more reports");
  });
})

.then(() => { SimpleTest.finish(); });

SimpleTest.waitForExplicitFinish();

</script>
</body>
</html>