| <!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> |