Skip to content

Commit

Permalink
CB-314 - create errgen platform
Browse files Browse the repository at this point in the history
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
pmuellr committed Mar 15, 2012
1 parent 3beb470 commit 574da1a
Show file tree
Hide file tree
Showing 10 changed files with 434 additions and 11 deletions.
34 changes: 34 additions & 0 deletions .wr
Original file line number Diff line number Diff line change
@@ -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
31 changes: 22 additions & 9 deletions Jakefile
Original file line number Diff line number Diff line change
@@ -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 + ' && ' +
Expand All @@ -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)
}
});

16 changes: 16 additions & 0 deletions LICENSE-for-js-file.txt
Original file line number Diff line number Diff line change
@@ -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.
6 changes: 4 additions & 2 deletions build/packager.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions lib/bootstrap/errgen.js
Original file line number Diff line number Diff line change
@@ -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()
107 changes: 107 additions & 0 deletions lib/exec/errgen.js
Original file line number Diff line number Diff line change
@@ -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)
})
28 changes: 28 additions & 0 deletions lib/platform/errgen.js
Original file line number Diff line number Diff line change
@@ -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: {}
}
42 changes: 42 additions & 0 deletions lib/plugin/errgen/device.js
Original file line number Diff line number Diff line change
@@ -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()
Loading

0 comments on commit 574da1a

Please sign in to comment.