// META: script=/resources/testdriver.js?feature=bidi // META: script=/resources/testdriver-vendor.js "use strict"; function check_equals(original, json) { const proto = Object.getPrototypeOf(original); const keys = Object.keys(proto).filter( (k) => typeof original[k] !== "function", ); for (const key of keys) { assert_equals( original[key], json[key], `${original.constructor.name} ${key} entry does not match its toJSON value`, ); } } promise_setup(async () => { // Ensure permission is granted before proceeding. await test_driver.bidi.permissions.set_permission({ descriptor: {name: "geolocation"}, state: "granted", }); }); promise_test(async (t) => { t.add_cleanup(async () => { await test_driver.bidi.emulation.set_geolocation_override( {coordinates: null}); }); const latitude = 51.478; const longitude = -0.166; const accuracy = 100; await test_driver.bidi.emulation.set_geolocation_override({ coordinates: {latitude, longitude, accuracy} }); const position = await new Promise((resolve, reject) => { navigator.geolocation.getCurrentPosition(resolve, reject); }); const json = position.toJSON(); assert_equals( position.timestamp, json.timestamp, "GeolocationPosition timestamp entry does not match its toJSON value", ); check_equals(position.coords, json.coords); check_equals(position.coords, position.coords.toJSON()); }, "Test toJSON() in GeolocationPosition and GeolocationCoordinates.");