You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2012/05/07 22:52:06 UTC
[3/8] js commit: further reworking geolocation
further reworking geolocation
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/0d7e3e7b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/0d7e3e7b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/0d7e3e7b
Branch: refs/heads/master
Commit: 0d7e3e7b1524b6d003c743b1ebecfd21e05a7317
Parents: 97aa789
Author: Fil Maj <ma...@gmail.com>
Authored: Sat Mar 24 12:54:14 2012 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Mon May 7 13:51:05 2012 -0700
----------------------------------------------------------------------
lib/common/plugin/geolocation.js | 3 -
test/test.geolocation.js | 85 +++++++++++++++-----------------
2 files changed, 40 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/0d7e3e7b/lib/common/plugin/geolocation.js
----------------------------------------------------------------------
diff --git a/lib/common/plugin/geolocation.js b/lib/common/plugin/geolocation.js
index 2cc7330..0831d0c 100644
--- a/lib/common/plugin/geolocation.js
+++ b/lib/common/plugin/geolocation.js
@@ -129,9 +129,6 @@ var geolocation = {
options = parseParameters(options);
var id = utils.createUUID();
- timers[id] = window.setInterval(function() {
- geolocation.getCurrentPosition(successCallback, errorCallback, options);
- }, options.timeout);
return id;
},
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/0d7e3e7b/test/test.geolocation.js
----------------------------------------------------------------------
diff --git a/test/test.geolocation.js b/test/test.geolocation.js
index dbd04cf..6daaa4c 100644
--- a/test/test.geolocation.js
+++ b/test/test.geolocation.js
@@ -51,7 +51,7 @@ describe("geolocation", function () {
it("should throw an exception if used with no arguments", function() {
expect(function() { geo.getCurrentPosition();}).toThrow("getCurrentPosition must be called with at least one argument.");
});
- })
+ });
describe("position acquisition", function() {
it("should provide a cached position if one exists and has a timestamp value conforming with passed in maximumAge", function() {
// Create a date object from 2 seconds ago to store as cached position.
@@ -149,60 +149,55 @@ describe("geolocation", function () {
});
});
- describe("when watching the position", function () {
+ describe("watchPosition", function () {
var utils = require('cordova/utils');
- beforeEach(function () {
- spyOn(window, "setInterval").andReturn("2");
- spyOn(utils, "createUUID").andReturn("leeroy jenkins");
- });
+ describe("arguments", function () {
+ it("uses default PositionOptions if none are specified", function () {
+ geo.watchPosition(s, e);
+ expect(exec).toHaveBeenCalledWith(jasmine.any(Function), jasmine.any(Function), "Geolocation", "getLocation", [false, Infinity, 0]);
+ });
- it("gets and returns an id from createUUID", function () {
- var id = geo.watchPosition(s, e);
- expect(utils.createUUID).toHaveBeenCalled();
- expect(id).toBe("leeroy jenkins");
- });
+ it("uses the maximumAge option if specified", function () {
+ geo.watchPosition(s, e, {maximumAge: 10});
+ expect(exec).toHaveBeenCalledWith(jasmine.any(Function), jasmine.any(Function), "Geolocation", "getLocation", [false, Infinity, 10]);
+ });
- it("sets an interval for the default timeout", function () {
- geo.watchPosition(s, e);
- expect(window.setInterval).toHaveBeenCalledWith(jasmine.any(Function), Infinity);
- });
+ it("uses the enableHighAccuracy option if specified", function () {
+ geo.watchPosition(s, e, {enableHighAccuracy: true, maximumAge: 100});
+ expect(exec).toHaveBeenCalledWith(jasmine.any(Function), jasmine.any(Function), "Geolocation", "getLocation", [true, Infinity, 100]);
+ });
- it("sets an interval for the provided timeout", function () {
- geo.watchPosition(s, e, {timeout: 10});
- expect(window.setInterval).toHaveBeenCalledWith(jasmine.any(Function), 10);
- });
+ it("uses the timeout option if specified and positive", function () {
+ geo.watchPosition(s, e, {timeout: 1000});
+ expect(exec).toHaveBeenCalledWith(jasmine.any(Function), jasmine.any(Function), "Geolocation", "getLocation", [false, 1000, 0]);
+ });
- it("calls exec on the given interval", function () {
- geo.watchPosition(s, e);
- var func = window.setInterval.mostRecentCall.args[0];
- func();
- expect(exec).toHaveBeenCalled();
- });
- });
+ it("uses a timeout value of 0 if specified and negative, which should call the error callback immediately (since we have no cached position)", function () {
+ geo.watchPosition(s, e, {timeout: -1000});
+ expect(e).toHaveBeenCalledWith({
+ code:PositionError.TIMEOUT,
+ message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceed's provided PositionOptions' maximumAge parameter."
+ });
+ });
- describe("when clearing the watch", function () {
- beforeEach(function () {
- spyOn(window, "setInterval").andReturn("woohoo");
- spyOn(window, "clearInterval");
- });
+ it("can be used with one, two or three arguments", function() {
+ expect(function() { geo.watchPosition(s); }).not.toThrow();
+ expect(function() { geo.watchPosition(s,e); }).not.toThrow();
+ expect(function() { geo.watchPosition(s,e,{}); }).not.toThrow();
+ });
- it("calls clear interval for the watch", function () {
- var timer = geo.watchPosition(s, e);
- geo.clearWatch(timer);
- expect(window.clearInterval).toHaveBeenCalledWith("woohoo");
+ it("should throw an exception if used with no arguments", function() {
+ expect(function() { geo.watchPosition();}).toThrow("watchPosition must be called with at least one argument.");
+ });
});
-
- it("only calls clear interval once", function () {
- var timer = geo.watchPosition(s, e);
- geo.clearWatch(timer);
- geo.clearWatch(timer);
- expect(window.clearInterval.callCount).toBe(1);
+ describe("position acquisition", function() {
+ it("should invoke the success callback every time the position changes");
+ it("should invoke the error callback if position could not be retrieved");
+
});
+ });
- it("doesn't call clear interval when no watch", function () {
- geo.clearWatch("derp");
- expect(window.clearInterval).not.toHaveBeenCalled();
- });
+ describe("clearWatch", function () {
});
});