| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <title>HTML5 Geo-location test</title> | |
| <link rel="stylesheet" href="/filez/_main/third_party/js/qunit/qunit.css"> | |
| <script src="/filez/_main/third_party/js/qunit/qunit.js"></script> | |
| <script src="/filez/_main/third_party/js/qunit/qunit_test_runner.js"></script> | |
| <script type="text/javascript" src="../test_bootstrap.js"></script> | |
| <script type="text/javascript"> | |
| goog.require('bot'); | |
| goog.require('bot.geolocation'); | |
| goog.require('bot.html5'); | |
| goog.require('bot.test'); | |
| goog.require('bot.userAgent'); | |
| goog.require('goog.Promise'); | |
| goog.require('goog.labs.userAgent.platform'); | |
| goog.require('goog.userAgent'); | |
| goog.require('goog.userAgent.product'); | |
| </script> | |
| <script type="text/javascript"> | |
| // WebDriver does not enable geolocation for Android. | |
| // WebDriver does not enable geolocation for Edge. | |
| // WebDriver does not enable geolocation for Firefox. | |
| // WebDriver does not enable geolocation for IE 9. | |
| // WebDriver does not enable geolocation for Safari. | |
| // Chrome 50+ disables geolocation APIs on insecure origins; see | |
| // https://goo.gl/rStTGz. | |
| var GEOLOCATION_NOT_WORKING = | |
| !bot.html5.isSupported(bot.html5.API.GEOLOCATION) || | |
| goog.userAgent.product.ANDROID || | |
| goog.userAgent.product.EDGE || | |
| goog.userAgent.product.FIREFOX || | |
| goog.userAgent.product.SAFARI || | |
| goog.userAgent.product.CHROME || | |
| // Geolocation is blocked by user consent screen on Chrome for Android. | |
| (goog.labs.userAgent.platform.isAndroid() && | |
| goog.userAgent.product.CHROME) || | |
| bot.userAgent.IE_DOC_9; | |
| QUnit.config.testTimeout = 10000; // 10s | |
| /** | |
| * This method checks if the device location | |
| * can be retrieved, i.e. non-null value of Position within the timeout | |
| * period. | |
| */ | |
| QUnit.test('locationWithinDefaultInterval', function(assert) { | |
| if (GEOLOCATION_NOT_WORKING) { | |
| assert.ok(true, 'Skipping: geolocation not working'); | |
| return; | |
| } | |
| var done = assert.async(); | |
| try { | |
| bot.geolocation.getCurrentPosition(function() { | |
| assert.ok(true, 'Location retrieved'); | |
| done(); | |
| }, function(error) { | |
| switch (error.code) { | |
| case error.POSITION_UNAVAILABLE: | |
| // Some test machines run on a private ip address range where | |
| // location is not be available, so do not consider this case | |
| // as an error. | |
| assert.ok(true, 'Position unavailable - acceptable'); | |
| done(); | |
| return; | |
| case error.PERMISSION_DENIED: | |
| assert.ok(false, 'User denied the request for Geolocation.'); | |
| done(); | |
| return; | |
| case error.TIMEOUT: | |
| assert.ok(false, 'When enabled, location should be known within ' + | |
| (bot.geolocation.DEFAULT_OPTIONS.timeout / 1000) + 's'); | |
| done(); | |
| return; | |
| default: | |
| assert.ok(false, 'An unknown error occurred. ' + error.message); | |
| done(); | |
| return; | |
| } | |
| }); | |
| } catch (e) { | |
| assert.strictEqual(e.code, bot.ErrorCode.UNKNOWN_ERROR); | |
| done(); | |
| } | |
| }); | |
| /** | |
| * Tested with Chrome and Firefox. It checks if the device location cannot | |
| * can be retrieved, i.e. null value of Position, when requested to | |
| * retrieve the position with high accuracy and immediately (no cached). | |
| * Note: Firefox seems to return the position even in this case. | |
| * The HTML5 standard states If the value of the timeout variable is 0, | |
| * invoke the errorCallback (if present) with a new PositionError object | |
| * whose code attribute is set to TIMEOUT. | |
| */ | |
| QUnit.test('locationNoTimeout', function(assert) { | |
| if (GEOLOCATION_NOT_WORKING) { | |
| assert.ok(true, 'Skipping: geolocation not working'); | |
| return; | |
| } | |
| var posOptions = { | |
| enableHighAccuracy: true, | |
| maximumAge: 0, | |
| timeout: 0 | |
| }; | |
| var done = assert.async(); | |
| try { | |
| bot.geolocation.getCurrentPosition( | |
| function() { | |
| assert.ok(false, 'Location within 0s timeout interval and 0s max age fails'); | |
| done(); | |
| }, | |
| function() { | |
| assert.ok(true, 'Expected timeout error'); | |
| done(); | |
| }, | |
| posOptions); | |
| } catch (e) { | |
| assert.strictEqual(e.code, bot.ErrorCode.UNKNOWN_ERROR); | |
| done(); | |
| } | |
| }); | |
| // TODO: Add more tests to check the returned value. | |
| </script> | |
| </head> | |
| <body> | |
| <div id="qunit"></div> | |
| <div id="qunit-fixture"></div> | |
| </body> | |
| </html> |