callback-exception.js revision e78cbe89e6f337f2f1fe40315be88f742b547151
13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsendescription("Tests that when an exception is thrown in the success callback, the error callback is not invoked. Note that this test throws an exception which is not caught.");
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvar mockLatitude = 51.478;
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvar mockLongitude = -0.166;
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvar mockAccuracy = 100;
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickwindow.layoutTestController.setGeolocationPermission(true);
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochwindow.layoutTestController.setMockGeolocationPosition(mockLatitude,
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                       mockLongitude,
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                                       mockAccuracy);
11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
12513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvar position;
13513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnavigator.geolocation.getCurrentPosition(function(p) {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    position = p
153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    shouldBe('position.coords.latitude', 'mockLatitude');
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    shouldBe('position.coords.longitude', 'mockLongitude');
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    shouldBe('position.coords.accuracy', 'mockAccuracy');
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // Yield to allow for the error callback to be invoked. The timer
2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // must be started before the exception is thrown.
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    window.setTimeout(finishJSTest, 0);
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    throw new Error('Exception in success callback');
233f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}, function(e) {
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    testFailed('Error callback invoked unexpectedly');
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    finishJSTest();
26513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch});
27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickwindow.layoutTestController.waitUntilDone();
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochwindow.jsTestIsAsync = true;
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochwindow.successfullyParsed = true;
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick