<!DOCTYPE html>
<meta charset="utf-8">
<title>Accelerometer Sensor IDL tests</title>
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="help" href="https://w3c.github.io/accelerometer/">
<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, accelerometer]) {
  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(accelerometer);
  idl_array.add_objects({
    Accelerometer: ['new Accelerometer();'],
    LinearAccelerationSensor: ['new LinearAccelerationSensor();'],
    GravitySensor: ['new GravitySensor();']
  });
  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/accelerometer.idl",
  ].map(fetchText)).then(doTest);
}, "Test IDL implementation of Accelerometer Sensor");
</script>
