You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by lo...@apache.org on 2013/05/13 22:59:13 UTC

webworks commit: [CB-3371] Fixed Battery plugin start to change contexts rather than throw an error - Also added support for working across multiple webViews

Updated Branches:
  refs/heads/future 1890c10c2 -> b13f11b3b


[CB-3371] Fixed Battery plugin start to change contexts rather than throw an error
- Also added support for working across multiple webViews


Project: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/commit/b13f11b3
Tree: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/tree/b13f11b3
Diff: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/diff/b13f11b3

Branch: refs/heads/future
Commit: b13f11b3bfda3053611de7a83fbd94c75a4fdc63
Parents: 1890c10
Author: Jeffrey Heifetz <jh...@blackberry.com>
Authored: Mon Apr 29 14:21:16 2013 -0400
Committer: lorinbeer <lo...@adobe.com>
Committed: Mon May 13 13:46:51 2013 -0700

----------------------------------------------------------------------
 .../plugins/Battery/src/blackberry10/index.js      |   33 ++++++----
 blackberry10/bin/test/plugins/Battery/index.js     |   48 ++++++++++-----
 2 files changed, 54 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/b13f11b3/blackberry10/bin/templates/project/plugins/Battery/src/blackberry10/index.js
----------------------------------------------------------------------
diff --git a/blackberry10/bin/templates/project/plugins/Battery/src/blackberry10/index.js b/blackberry10/bin/templates/project/plugins/Battery/src/blackberry10/index.js
index fcac7b2..07a943c 100644
--- a/blackberry10/bin/templates/project/plugins/Battery/src/blackberry10/index.js
+++ b/blackberry10/bin/templates/project/plugins/Battery/src/blackberry10/index.js
@@ -17,32 +17,41 @@
 var SYSTEM_EVENTS = ["device.battery.statusChange",
                      "device.battery.chargeLow",
                      "device.battery.chargeCritical"],
-    clientListener;
+    device = window.qnx.webplatform.device,
+    _clientListeners = {};
 
 module.exports = {
     start: function (success, fail, args, env) {
-        var result = new PluginResult(args, env);
-        if (!!clientListener) {
-            result.error("Battery listener already running");
-        } else {
-            clientListener = function (info) {
+        var result = new PluginResult(args, env),
+            listener = function (info) {
                 result.callbackOk(info, true);
             };
+
+        if (_clientListeners[env.webview.id]) {
+            //TODO: Change back to erroring out after reset is implemented
+            //result.error("Battery listener already running");
             SYSTEM_EVENTS.forEach(function (event) {
-                window.qnx.webplatform.device.addEventListener(event, clientListener);
+                device.removeEventListener(event, _clientListeners[env.webview.id]);
             });
-            result.noResult(true);
         }
+
+        _clientListeners[env.webview.id] = listener;
+        SYSTEM_EVENTS.forEach(function (event) {
+            device.addEventListener(event, listener);
+        });
+        result.noResult(true);
     },
     stop: function (success, fail, args, env) {
-        var result = new PluginResult(args, env);
-        if (!clientListener) {
+        var result = new PluginResult(args, env),
+            listener = _clientListeners[env.webview.id];
+
+        if (!listener) {
             result.error("Battery listener has not started");
         } else {
             SYSTEM_EVENTS.forEach(function (event) {
-                window.qnx.webplatform.device.removeEventListener(event, clientListener);
+                device.removeEventListener(event, listener);
             });
-            clientListener = null;
+            delete _clientListeners[env.webview.id];
             result.noResult(false);
         }
     }

http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/b13f11b3/blackberry10/bin/test/plugins/Battery/index.js
----------------------------------------------------------------------
diff --git a/blackberry10/bin/test/plugins/Battery/index.js b/blackberry10/bin/test/plugins/Battery/index.js
index a9c610a..9343890 100644
--- a/blackberry10/bin/test/plugins/Battery/index.js
+++ b/blackberry10/bin/test/plugins/Battery/index.js
@@ -19,55 +19,71 @@ describe("Battery", function () {
     var _apiDir = __dirname + "./../../../templates/project/plugins/Battery/src/blackberry10/",
         index,
         callback,
-        result = {
+        mockPluginResult = {
             ok: jasmine.createSpy(),
             error: jasmine.createSpy(),
             noResult: jasmine.createSpy(),
             callbackOk: jasmine.createSpy()
+        },
+        noop = function () {},
+        args,
+        env = {
+            webview: {
+                id: 42
+            }
         };
 
+
     beforeEach(function () {
-        index = require(_apiDir + "index");
         GLOBAL.window = {
             qnx: {
                 webplatform: {
                     device: {
-                        addEventListener: jasmine.createSpy().andCallFake(function (evt, cb) {
+                        addEventListener: jasmine.createSpy("webplatform.device.addEventListener").andCallFake(function (evt, cb) {
                             callback = cb;
                         }),
-                        removeEventListener: jasmine.createSpy()
+                        removeEventListener: jasmine.createSpy("webplatform.device.removeEventListener")
                     }
                 }
             }
         };
         GLOBAL.PluginResult = function () {
-            return result;
+            return mockPluginResult;
         };
+        index = require(_apiDir + "index");
     });
 
     afterEach(function () {
-        index = null;
         delete GLOBAL.window;
         delete GLOBAL.PluginResult;
+        delete require.cache[require.resolve(_apiDir + "index")];
     });
 
     describe("start", function () {
 
         it("calls noResult and keeps callbacks", function () {
-            index.start();
+            index.start(noop, noop, args, env);
+            expect(window.qnx.webplatform.device.removeEventListener).not.toHaveBeenCalled();
             expect(window.qnx.webplatform.device.addEventListener).toHaveBeenCalled();
-            expect(result.noResult).toHaveBeenCalledWith(true);
+            expect(mockPluginResult.noResult).toHaveBeenCalledWith(true);
+            expect(mockPluginResult.error).not.toHaveBeenCalled();
         });
 
         it("callback calls ok and keeps callbacks", function () {
             callback("OK");
-            expect(result.callbackOk).toHaveBeenCalledWith("OK", true);
+            expect(mockPluginResult.callbackOk).toHaveBeenCalledWith("OK", true);
+            expect(mockPluginResult.error).not.toHaveBeenCalled();
         });
 
-        it("calls error if already started", function () {
-            index.start();
-            expect(window.qnx.webplatform.device.addEventListener).not.toHaveBeenCalled();
-            expect(result.error).toHaveBeenCalled();
+        it("does not call error if already started", function () {
+            index.start(noop, noop, args, env);
+            window.qnx.webplatform.device.addEventListener.reset();
+            mockPluginResult.noResult.reset();
+            index.start(noop, noop, args, env);
+            expect(window.qnx.webplatform.device.removeEventListener).toHaveBeenCalled();
+            expect(window.qnx.webplatform.device.addEventListener).toHaveBeenCalled();
+            expect(mockPluginResult.error).not.toHaveBeenCalled();
+            expect(mockPluginResult.noResult).toHaveBeenCalledWith(true);
         });
 
 
@@ -76,9 +92,11 @@ describe("Battery", function () {
     describe("stop", function () {
 
         it("calls noResult and does not keep callbacks", function () {
-            index.stop();
+            index.start(noop, noop, args, env);
+            window.qnx.webplatform.device.removeEventListener.reset();
+            index.stop(noop, noop, args, env);
             expect(window.qnx.webplatform.device.removeEventListener).toHaveBeenCalled();
-            expect(result.noResult).toHaveBeenCalledWith(false);
+            expect(mockPluginResult.noResult).toHaveBeenCalledWith(false);
         });
 
     });