Permalink
Browse files

CB-314 - create errgen platform

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

This is a work-in-progress, only a couple of tests and overrides
have been implemented.  Decent start.

Some drive-by enhancements:

- Added a .wr file - see: https://github.com/pmuellr/wr

- Moved the require()'s in the Jakefile to the top

- Added a new Jakefile subtask to ensure we're in the right
  directory before running.  Things broke if you weren't in
  the base directory

- Added a new 'dalek' task for Dalek lovers everywhere

- Now that there's a separate 'dalek' task, it's function
  can be removed from the 'build' task

- Made the build use the correct Apache license source header
  stuff ala http://www.apache.org/legal/src-headers.html#headers
  • Loading branch information...
1 parent 3beb470 commit 574da1a6512636b412078ae02d29308dd184ffc2 @pmuellr pmuellr committed Mar 15, 2012
Showing with 434 additions and 11 deletions.
  1. +34 −0 .wr
  2. +22 −9 Jakefile
  3. +16 −0 LICENSE-for-js-file.txt
  4. +4 −2 build/packager.js
  5. +20 −0 lib/bootstrap/errgen.js
  6. +107 −0 lib/exec/errgen.js
  7. +28 −0 lib/platform/errgen.js
  8. +42 −0 lib/plugin/errgen/device.js
  9. +86 −0 test/errgen/errgen-tests.js
  10. +75 −0 test/errgen/index.html
View
@@ -0,0 +1,34 @@
+# ------------------------------------------------------------------------------
+# 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.
+# ------------------------------------------------------------------------------
+
+# ------------------------------------------------------------------------------
+# a .wr file to rebuild cordova when a source file changes
+# see: https://github.com/pmuellr/wr
+# npm install wr
+# ------------------------------------------------------------------------------
+
+--stdoutcolor blue
+--stderrcolor red
+
+jake
+
+build
+Jakefile
+lib
+test
View
@@ -1,12 +1,14 @@
+var util = require('util')
+var fs = require('fs')
+var childProcess = require('child_process')
+var path = require("path")
desc("runs build");
task('default', ['build', 'test'], function () {});
desc("clean");
-task('clean', [], function () {
- var childProcess = require('child_process');
- var path = require("path");
+task('clean', ['set-cwd'], function () {
var DEPLOY = path.join(__dirname,"pkg");
var cmd = 'rm -rf ' + DEPLOY + ' && ' +
@@ -18,21 +20,32 @@ task('clean', [], function () {
desc("compiles the source files for all extensions");
task('build', ['clean'], function () {
- var util = require('util'),
- fs = require('fs'),
- packager = require("./build/packager");
+ var packager = require("./build/packager");
packager.write("blackberry");
packager.write("playbook");
packager.write("ios");
packager.write("wp7");
packager.write("android");
+ packager.write("errgen");
- util.puts(fs.readFileSync("build/dalek", "utf-8"));
});
+desc("prints a dalek");
+task('dalek', ['set-cwd'], function () {
+ util.puts(fs.readFileSync("build/dalek", "utf-8"));
+})
+
desc("runs the unit tests in node");
-task('test', [], require('./test/runner').node);
+task('test', ['set-cwd'], require('./test/runner').node);
desc("starts a webserver to point at to run the unit tests");
-task('btest', [], require('./test/runner').browser);
+task('btest', ['set-cwd'], require('./test/runner').browser);
+
+desc("make sure we're in the right directory");
+task('set-cwd', [], function() {
+ if (__dirname != process.cwd()) {
+ process.chdir(__dirname)
+ }
+});
+
@@ -0,0 +1,16 @@
+ 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.
View
@@ -95,11 +95,13 @@ module.exports = {
},
bundle: function (platform) {
+ console.log("building platform: " + platform);
+
var output = "";
//include LICENSE
- output += include("LICENSE", function (file) {
- return "/*\n" + file + "\n*/\n";
+ output += include("LICENSE-for-js-file.txt", function (file) {
+ return "/*\n" + file + "*/\n";
});
// wrap the entire thing in one more closure
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+require('cordova/channel').onNativeReady.fire()
View
@@ -0,0 +1,107 @@
+/*
+ * 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.
+ */
+
+/**
+ * Execute a cordova command. It is up to the native side whether this action
+ * is synchronous or asynchronous. The native side can return:
+ * Synchronous: PluginResult object as a JSON string
+ * Asynchrounous: Empty string ""
+ * If async, the native side will cordova.callbackSuccess or cordova.callbackError,
+ * depending upon the result of the action.
+ *
+ * @param {Function} success The success callback
+ * @param {Function} fail The fail callback
+ * @param {String} service The name of the service to use
+ * @param {String} action Action to be run in cordova
+ * @param {String[]} [args] Zero or more arguments to pass to the method
+ */
+
+//------------------------------------------------------------------------------
+module.exports = function exec(success, fail, service, action, args) {
+ var signature = service + "::" + action
+
+ //--------------------------------------------------------------------------
+ function callFail() {
+ var args = "<unable to JSONify>"
+
+ try {
+ args = JSON.stringify(args)
+ }
+ catch (e) {}
+
+ var call = signature + "(" + args + ")"
+
+ if (!fail) {
+ console.log("failure callback not set for " + call)
+ return
+ }
+
+ if (typeof(fail) != 'function') {
+ console.log("failure callback not a function for " + call)
+ return
+ }
+
+ try {
+ fail("expected errgen failure for " + call)
+ }
+ catch (e) {
+ console.log("exception running failure callback for " + call)
+ console.log(" exception: " + e)
+ return
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ if (Overrides[signature]) {
+ Overrides[signature].call(null, success, fail, args)
+ return
+ }
+
+ setTimeout(callFail, 10)
+}
+
+//------------------------------------------------------------------------------
+var Overrides = {}
+
+//------------------------------------------------------------------------------
+function addOverride(func) {
+ var name = func.name.replace('__', '::')
+ Overrides[name] = func
+}
+
+//------------------------------------------------------------------------------
+addOverride(function Accelerometer__setTimeout(success, fail, args) {
+ setTimeout(function() {
+ fail("Accelerometer::setTimeout")
+ }, 10)
+})
+
+//------------------------------------------------------------------------------
+addOverride(function Accelerometer__getTimeout(success, fail, args) {
+ setTimeout(function() {
+ fail("Accelerometer::getTimeout")
+ }, 10)
+})
+
+//------------------------------------------------------------------------------
+addOverride(function Network_Status__getConnectionInfo(success, fail) {
+ setTimeout(function() {
+ success("none")
+ }, 10)
+})
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+// required call to kick off the device ready callback
+require('cordova/plugin/errgen/device')
+
+//------------------------------------------------------------------------------
+module.exports = {
+ id: "errgen",
+ initialize: function() {},
+ objects: {}
+}
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+
+/**
+ * this represents the mobile device, and provides properties for inspecting the model, version, UUID of the
+ * phone, etc.
+ * @constructor
+ */
+
+//------------------------------------------------------------------------------
+function Device() {
+ window.DeviceInfo = {}
+
+ this.platform = "errgen"
+ this.version = "any"
+ this.name = "errgen"
+ this.phonegap = {}
+ this.gap = this.phonegap
+ this.uuid = "1234-5678-9012-3456"
+ this.available = true
+
+ require('cordova/channel').onCordovaInfoReady.fire()
+}
+
+//------------------------------------------------------------------------------
+module.exports = window.DeviceInfo = new Device()
Oops, something went wrong. Retry.

0 comments on commit 574da1a

Please sign in to comment.