<!DOCTYPE html>
<meta charset="utf-8">
<title>Magnetometer Sensor IDL tests</title>
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="help" href="https://w3c.github.io/magnetometer/">
<link rel="help" href="https://w3c.github.io/sensors/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script>
"use strict";

function doTest([dom, generic_sensor, magnetometer]) {
  const idl_array = new IdlArray();
  idl_array.add_untested_idls(dom);
  idl_array.add_untested_idls('interface EventHandler {};');
  idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
  idl_array.add_idls(magnetometer);
  idl_array.add_objects({
    Magnetometer: ['new Magnetometer();'],
    UncalibratedMagnetometer: ['new UncalibratedMagnetometer();']
  });
  idl_array.test();
}

function fetchText(url) {
  return fetch(url).then((response) => response.text());
}

promise_test(() => {
  return Promise.all([
    "/interfaces/dom.idl",
    "/interfaces/generic-sensor.idl",
    "/interfaces/magnetometer.idl",
  ].map(fetchText)).then(doTest);
}, "Test IDL implementation of Magnetometer Sensor");
</script>
