You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2013/01/29 20:07:51 UTC

[29/37] js commit: [blackberry] modulemapper refactor for app plugin.

[blackberry] modulemapper refactor for app plugin.

- Removes the last usage of cordova/builder.
- Refactors tests a bit.
- Introduces test helpers: modulereplacer & propertyreplacer

https://issues.apache.org/jira/browse/CB-2227


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

Branch: refs/heads/symbolmapping
Commit: f7333b60cf2482e736f4a5f29e938bcd54f49328
Parents: 8e933d3
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Jan 25 15:36:35 2013 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Mon Jan 28 19:56:48 2013 -0500

----------------------------------------------------------------------
 lib/blackberry/platform.js                  |   12 ++----
 lib/blackberry/plugin/java/app/bbsymbols.js |   24 +++++++++++
 lib/blackberry/plugin/java/platform.js      |    9 ----
 lib/common/builder.js                       |   24 +++++-----
 lib/scripts/bootstrap-test.js               |   30 +++++++++++++
 lib/test/modulereplacer.js                  |   33 +++++++++++++++
 lib/test/propertyreplacer.js                |   48 ++++++++++++++++++++++
 test/blackberry/qnx/test.platform.js        |    7 ---
 test/blackberry/test.platform.js            |   39 ++++++++++++-----
 9 files changed, 178 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/lib/blackberry/platform.js
----------------------------------------------------------------------
diff --git a/lib/blackberry/platform.js b/lib/blackberry/platform.js
index 9eb9994..0e9dd79 100644
--- a/lib/blackberry/platform.js
+++ b/lib/blackberry/platform.js
@@ -37,18 +37,14 @@ module.exports = {
         }
     },
     initialize: function() {
-        var builder = require('cordova/builder'),
-            modulemapper = require('cordova/modulemapper'),
+        var modulemapper = require('cordova/modulemapper'),
             platform = require('cordova/plugin/' + this.runtime() + '/platform');
 
-        builder.buildIntoButDoNotClobber(platform.defaults, window);
-        builder.buildIntoAndClobber(platform.clobbers, window);
-        builder.buildIntoAndMerge(platform.merges, window);
-
         modulemapper.loadMatchingModules(/cordova.*\/symbols$/);
         modulemapper.loadMatchingModules(new RegExp('cordova/.*' + this.runtime() + '/.*bbsymbols$'));
-        modulemapper.mapModules(window);
+        modulemapper.mapModules(this.contextObj);
 
         platform.initialize();
-    }
+    },
+    contextObj: this // Used for testing.
 };

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/lib/blackberry/plugin/java/app/bbsymbols.js
----------------------------------------------------------------------
diff --git a/lib/blackberry/plugin/java/app/bbsymbols.js b/lib/blackberry/plugin/java/app/bbsymbols.js
new file mode 100644
index 0000000..3ad17f7
--- /dev/null
+++ b/lib/blackberry/plugin/java/app/bbsymbols.js
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+
+var modulemapper = require('cordova/modulemapper');
+
+modulemapper.clobbers('cordova/plugin/java/app', 'navigator.app');

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/lib/blackberry/plugin/java/platform.js
----------------------------------------------------------------------
diff --git a/lib/blackberry/plugin/java/platform.js b/lib/blackberry/plugin/java/platform.js
index 2eefada..a28ae6b 100644
--- a/lib/blackberry/plugin/java/platform.js
+++ b/lib/blackberry/plugin/java/platform.js
@@ -144,14 +144,5 @@ module.exports = {
 
         // Trap BlackBerry WebWorks exit. Allow plugins to clean up before exiting.
         blackberry.app.event.onExit(app.exitApp);
-    },
-    clobbers: {
-        navigator: {
-            children: {
-                app: {
-                    path: "cordova/plugin/java/app"
-                }
-            }
-        }
     }
 };

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/lib/common/builder.js
----------------------------------------------------------------------
diff --git a/lib/common/builder.js b/lib/common/builder.js
index d7fc1ea..b3b4d39 100644
--- a/lib/common/builder.js
+++ b/lib/common/builder.js
@@ -30,6 +30,7 @@ function each(objects, func, context) {
 }
 
 function clobber(obj, key, value) {
+    exports.replaceHookForTesting(obj, key);
     obj[key] = value;
     // Getters can only be overridden by getters.
     if (obj[key] !== value) {
@@ -113,16 +114,15 @@ function recursiveMerge(target, src) {
     }
 }
 
-module.exports = {
-    buildIntoButDoNotClobber: function(objects, target) {
-        include(target, objects, false, false);
-    },
-    buildIntoAndClobber: function(objects, target) {
-        include(target, objects, true, false);
-    },
-    buildIntoAndMerge: function(objects, target) {
-        include(target, objects, true, true);
-    },
-    recursiveMerge: recursiveMerge,
-    assignOrWrapInDeprecateGetter: assignOrWrapInDeprecateGetter
+exports.buildIntoButDoNotClobber = function(objects, target) {
+    include(target, objects, false, false);
 };
+exports.buildIntoAndClobber = function(objects, target) {
+    include(target, objects, true, false);
+};
+exports.buildIntoAndMerge = function(objects, target) {
+    include(target, objects, true, true);
+};
+exports.recursiveMerge = recursiveMerge;
+exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter;
+exports.replaceHookForTesting = function() {};

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/lib/scripts/bootstrap-test.js
----------------------------------------------------------------------
diff --git a/lib/scripts/bootstrap-test.js b/lib/scripts/bootstrap-test.js
new file mode 100644
index 0000000..531ea4a
--- /dev/null
+++ b/lib/scripts/bootstrap-test.js
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var propertyreplacer = require('cordova/propertyreplacer');
+
+require('cordova/builder').replaceHookForTesting = function(obj, key) {
+    // This doesn't clean up non-clobbering assignments, nor does it work for
+    // getters. It does work to un-clobber clobbered / merged symbols, which
+    // is generally good enough for tests.
+    if (obj[key]) {
+        propertyreplacer.stub(obj, key);
+    }
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/lib/test/modulereplacer.js
----------------------------------------------------------------------
diff --git a/lib/test/modulereplacer.js b/lib/test/modulereplacer.js
new file mode 100644
index 0000000..b5a2461
--- /dev/null
+++ b/lib/test/modulereplacer.js
@@ -0,0 +1,33 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/*global spyOn:false */
+
+var propertyreplacer = require('cordova/propertyreplacer');
+
+exports.replace = function(moduleName, newValue) {
+    propertyreplacer.stub(define.moduleMap, moduleName, null);
+    define.remove(moduleName);
+    define(moduleName, function(require, exports, module) {
+        module.exports = newValue;
+    });
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/lib/test/propertyreplacer.js
----------------------------------------------------------------------
diff --git a/lib/test/propertyreplacer.js b/lib/test/propertyreplacer.js
new file mode 100644
index 0000000..18c5d3b
--- /dev/null
+++ b/lib/test/propertyreplacer.js
@@ -0,0 +1,48 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+
+// Use this helper module to stub out properties within Jasmine tests.
+// Original values will be restored after each test.
+
+var curStubs = null;
+
+function removeAllStubs() {
+    for (var i = curStubs.length - 1, stub; stub = curStubs[i]; --i) {
+        stub.obj[stub.key] = stub.value;
+    }
+    curStubs = null;
+}
+
+exports.stub = function(obj, key, value) {
+    if (!curStubs) {
+        curStubs = [];
+        jasmine.getEnv().currentSpec.after(removeAllStubs);
+    }
+
+    curStubs.push({
+        obj: obj,
+        key: key,
+        value: obj[key]
+    });
+    obj[key] = value;
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/test/blackberry/qnx/test.platform.js
----------------------------------------------------------------------
diff --git a/test/blackberry/qnx/test.platform.js b/test/blackberry/qnx/test.platform.js
index 87e18a3..231c5ca 100644
--- a/test/blackberry/qnx/test.platform.js
+++ b/test/blackberry/qnx/test.platform.js
@@ -120,11 +120,4 @@ describe("blackberry qnx platform", function () {
         });
 
     });
-
-    describe('export merges', function(){
-        it('should define the compass path', function(){
-            expect(platform.merges.navigator.children.compass.path).toEqual("cordova/plugin/qnx/compass");
-        });
-    });
-    
 });

http://git-wip-us.apache.org/repos/asf/cordova-js/blob/f7333b60/test/blackberry/test.platform.js
----------------------------------------------------------------------
diff --git a/test/blackberry/test.platform.js b/test/blackberry/test.platform.js
index 183e449..8e2a9d0 100644
--- a/test/blackberry/test.platform.js
+++ b/test/blackberry/test.platform.js
@@ -20,7 +20,18 @@
 */
 
 describe("blackberry platform", function () {
-    var platform = require('cordova/blackberryplatform');
+    var modulemapper = require('cordova/modulemapper'),
+        modulereplacer = require('cordova/modulereplacer'),
+        platform = require('cordova/blackberryplatform');
+
+    org = {};
+    org.apache = {};
+    org.apache.cordova = {};
+    org.apache.cordova.JavaPluginManager = {};
+
+    beforeEach(function () {
+        modulereplacer.replace('cordova/platform', platform);
+    });
 
     describe("when getting the runtime", function () {
         it("returns qnx for the bb10 user agent", function () {
@@ -46,11 +57,16 @@ describe("blackberry platform", function () {
     });
 
     describe("when initializing", function () {
-        var builder = require('cordova/builder');
-
         beforeEach(function () {
-            spyOn(builder, "buildIntoAndClobber");
-            spyOn(builder, "buildIntoAndMerge");
+            platform.contextObj = {};
+            var count = 0;
+            // Don't load non-blackberry symbol modules.
+            var loadMatchingModulesSpy = spyOn(modulemapper, 'loadMatchingModules');
+            loadMatchingModulesSpy.andCallFake(function(pattern) {
+                if (!pattern.exec('cordova/foo/symbols')) {
+                    return loadMatchingModulesSpy.originalValue.apply(this, arguments);
+                }
+            });
         });
 
         it("calls initialize for the platform from the runtime", function () {
@@ -58,32 +74,31 @@ describe("blackberry platform", function () {
 
             spyOn(air, "initialize");
             spyOn(platform, "runtime").andReturn("air");
-
             platform.initialize();
 
             expect(air.initialize).toHaveBeenCalled();
         });
 
-        it("builds given platforms objects into window and clobbers them", function () {
+        it("builds java platforms objects into window", function () {
             var java = require('cordova/plugin/java/platform');
 
             spyOn(java, "initialize");
             spyOn(platform, "runtime").andReturn("java");
-
             platform.initialize();
 
-            expect(builder.buildIntoAndClobber).toHaveBeenCalledWith(java.clobbers, window);
+            expect(platform.contextObj.File).not.toBeUndefined();
+            expect(platform.contextObj.navigator.app).not.toBeUndefined();
         });
 
-        it("builds given platforms merges into window and merges them", function () {
+        it("builds qnx objects into window", function () {
             var qnx = require('cordova/plugin/qnx/platform');
 
             spyOn(qnx, "initialize");
             spyOn(platform, "runtime").andReturn("qnx");
-
             platform.initialize();
 
-            expect(builder.buildIntoAndMerge).toHaveBeenCalledWith(qnx.merges, window);
+            expect(platform.contextObj.open).not.toBeUndefined();
+            expect(platform.contextObj.navigator.compass).not.toBeUndefined();
         });
     });
 });