<!doctype html>
<meta charset="utf-8" />
<title>Geolocation Test: heading is null when stationary</title>
<link rel="help" href="https://www.w3.org/TR/geolocation/#c9" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js?feature=bidi"></script>
<script src="/resources/testdriver-vendor.js"></script>

<script>
  const latitude = 51.478;
  const longitude = -0.166;
  const accuracy = 100;

  promise_setup(async () => {
    await test_driver.set_permission({ name: "geolocation" }, "granted");
  });

  promise_test(async (t) => {
    t.add_cleanup(async () => {
      await test_driver.bidi.emulation.set_geolocation_override({
        coordinates: null,
      });
    });

    // Set geolocation with speed = 0 (stationary)
    await test_driver.bidi.emulation.set_geolocation_override({
      coordinates: {
        latitude,
        longitude,
        accuracy,
        speed: 0,
      },
    });

    const position = await new Promise((resolve, reject) => {
      navigator.geolocation.getCurrentPosition(resolve, reject);
    });

    // When stationary (speed is 0), heading must be null, not NaN
    assert_equals(
      position.coords.heading,
      null,
      "heading must be null when device is stationary (speed is 0)",
    );
    assert_equals(position.coords.speed, 0, "speed should be 0");
  }, "heading is null when stationary (speed is 0)");

  promise_test(async (t) => {
    t.add_cleanup(async () => {
      await test_driver.bidi.emulation.set_geolocation_override({
        coordinates: null,
      });
    });

    // Set geolocation with speed > 0 (moving) and a heading
    await test_driver.bidi.emulation.set_geolocation_override({
      coordinates: {
        latitude,
        longitude,
        accuracy,
        speed: 10,
        heading: 90,
      },
    });

    const position = await new Promise((resolve, reject) => {
      navigator.geolocation.getCurrentPosition(resolve, reject);
    });

    // When moving (speed > 0), heading should be the specified value
    assert_equals(
      position.coords.heading,
      90,
      "heading should be 90 when moving",
    );
    assert_equals(position.coords.speed, 10, "speed should be 10");
  }, "heading has a value when moving (speed > 0)");
</script>
