diff options
Diffstat (limited to 'LayoutTests/fast/dom/Geolocation/script-tests/watch.js')
-rw-r--r-- | LayoutTests/fast/dom/Geolocation/script-tests/watch.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/LayoutTests/fast/dom/Geolocation/script-tests/watch.js b/LayoutTests/fast/dom/Geolocation/script-tests/watch.js new file mode 100644 index 0000000..8249f2e --- /dev/null +++ b/LayoutTests/fast/dom/Geolocation/script-tests/watch.js @@ -0,0 +1,64 @@ +description("Tests that watchPosition correctly reports position updates and errors from the Geolocation service."); + +var mockLatitude = 51.478; +var mockLongitude = -0.166; +var mockAccuracy = 100.0; + +var mockCode = 1; +var mockMessage = 'test'; + +var position; +var error; + +function checkPosition(p) { + position = p; + shouldBe('position.coords.latitude', 'mockLatitude'); + shouldBe('position.coords.longitude', 'mockLongitude'); + shouldBe('position.coords.accuracy', 'mockAccuracy'); + debug(''); +} + +function checkError(e) { + error = e; + shouldBe('error.code', 'mockCode'); + shouldBe('error.message', 'mockMessage'); + debug(''); +} + +window.layoutTestController.setGeolocationPermission(true); +window.layoutTestController.setMockGeolocationPosition(mockLatitude, mockLongitude, mockAccuracy); + +var state = 0; +navigator.geolocation.watchPosition(function(p) { + switch (state++) { + case 0: + checkPosition(p); + window.layoutTestController.setMockGeolocationPosition(++mockLatitude, ++mockLongitude, ++mockAccuracy); + break; + case 1: + checkPosition(p); + window.layoutTestController.setMockGeolocationError(mockCode, mockMessage); + break; + case 3: + checkPosition(p); + finishJSTest(); + break; + default: + testFailed('Success callback invoked unexpectedly'); + finishJSTest(); + } +}, function(e) { + switch (state++) { + case 2: + checkError(e); + window.layoutTestController.setMockGeolocationPosition(++mockLatitude, ++mockLongitude, ++mockAccuracy); + break; + default: + testFailed('Error callback invoked unexpectedly'); + finishJSTest(); + } +}); +window.layoutTestController.waitUntilDone(); + +window.jsTestIsAsync = true; +window.successfullyParsed = true; |