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/07 17:24:11 UTC

[06/51] [partial] [BlackBerry10] Added support for new platform

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/object.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/object.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/object.js
new file mode 100644
index 0000000..ea2cea5
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/object.js
@@ -0,0 +1,76 @@
+/*
+ * Utilities: A classic collection of JavaScript utilities
+ * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
+ *
+ * Licensed 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 object = require('../lib/object')
+  , array = require('../lib/array')
+  , assert = require('assert')
+  , tests = {}
+  , checkObjects;
+
+tests = {
+
+  'test merge in object': function () {
+    var expected = {user: 'geddy', key: 'key'}
+      , actual = object.merge({user: 'geddy'}, {key: 'key'});
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test merge with overwriting keys in object': function () {
+    var expected = {user: 'geddy', key: 'key'}
+      , actual = object.merge({user: 'geddy', key: 'geddyKey'}, {key: 'key'});
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test merge with objects as keys': function () {
+    var expected = {user: {name: 'geddy', password: 'random', key: 'key'}, key: 'key'}
+      , actual = object.merge({key: 'key'}, {user: {name: 'geddy', password: 'random', key: 'key'}});
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test reverseMerge in object': function () {
+    var expected = {user: 'geddy', key: 'key'}
+      , actual = object.reverseMerge({user: 'geddy'}, {key: 'key'});
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test reverseMerge with keys overwriting default in object': function () {
+    var expected = {user: 'geddy', key: 'geddyKey'}
+    , actual = object.reverseMerge({user: 'geddy', key: 'geddyKey'}, {key: 'key'});
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test reverseMerge with objects as keys': function () {
+    var expected = {user: {name: 'geddy', password: 'random', key: 'key'}, key: 'key'}
+      , actual = object.merge({user: {name: 'geddy', password: 'random', key: 'key'}}, {key: 'key'});
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test isEmpty with non empty object in object': function () {
+    var expected = false
+      , actual = object.isEmpty({user: 'geddy'});
+    assert.equal(actual, expected);
+  }
+
+, 'test isEmpty with empty object in object': function () {
+    var expected = true
+      , actual = object.isEmpty({});
+    assert.equal(actual, expected);
+  }
+
+};
+
+module.exports = tests;

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/sorted_collection.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/sorted_collection.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/sorted_collection.js
new file mode 100644
index 0000000..2701a99
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/sorted_collection.js
@@ -0,0 +1,115 @@
+/*
+ * Utilities: A classic collection of JavaScript utilities
+ * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
+ *
+ * Licensed 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 SortedCollection = require('../lib/sorted_collection').SortedCollection
+  , assert = require('assert')
+  , tests;
+
+tests = {
+
+  'test no default value': function () {
+    // Set up a collection, no default value for new items
+    var c = new SortedCollection();
+    // Add some items
+    c.addItem('testA', 'AAAA');
+    c.addItem('testB', 'BBBB');
+    c.addItem('testC', 'CCCC');
+    // Test count
+    assert.equal(3, c.count);
+    // Test getItem by string key
+    var item = c.getItem('testC');
+    assert.equal('CCCC', item);
+    // Test getItem by index number
+    var item = c.getItem(1);
+    assert.equal('BBBB', item);
+    // Test setItem by string key
+    c.setItem('testA', 'aaaa');
+    var item = c.getItem('testA');
+    assert.equal('aaaa', item);
+    // Test setItem by index number
+    c.setItem(2, 'cccc');
+    var item = c.getItem(2);
+    assert.equal('cccc', item);
+  }
+
+, 'test default value': function () {
+    // Set up a collection, default value for new items is 'foo'
+    var c = new SortedCollection('foo');
+    // Add an item with no value -- should get
+    // default value
+    c.addItem('testA');
+    // Add some items with empty/falsey values --
+    // should be set to desired values
+    c.addItem('testB', null);
+    c.addItem('testC', false);
+    // Test getItem for default value
+    var item = c.getItem('testA');
+    assert.equal('foo', item);
+    var item = c.getItem('testB');
+    assert.equal(null, item);
+    var item = c.getItem('testC');
+    assert.equal(false, item);
+  }
+
+, 'test each': function () {
+    var c = new SortedCollection()
+      , str = '';
+    // Add an item with no value -- should get
+    // default value
+    c.addItem('a', 'A');
+    c.addItem('b', 'B');
+    c.addItem('c', 'C');
+    c.addItem('d', 'D');
+    c.each(function (val, key) {
+      str += val + key;
+    });
+    assert.equal('AaBbCcDd', str);
+  }
+
+, 'test removing an item': function () {
+    var c = new SortedCollection()
+      , str = '';
+    // Add an item with no value -- should get
+    // default value
+    c.addItem('a', 'A');
+    c.addItem('b', 'B');
+    c.addItem('c', 'C');
+    c.addItem('d', 'D');
+    assert.equal(4, c.count);
+
+    omg = c.removeItem('c');
+    assert.equal(3, c.count);
+
+    c.each(function (val, key) {
+      str += val + key;
+    });
+    assert.equal('AaBbDd', str);
+  }
+
+, 'test clone': function () {
+    var c = new SortedCollection()
+      , copy;
+    c.addItem('a', 'A');
+    c.addItem('b', 'B');
+    copy = c.clone();
+    assert.equal(2, copy.count);
+    assert.equal('A', copy.getItem('a'));
+  }
+
+};
+
+module.exports = tests;

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/string.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/string.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/string.js
new file mode 100644
index 0000000..a03027c
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/string.js
@@ -0,0 +1,411 @@
+/*
+ * Utilities: A classic collection of JavaScript utilities
+ * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
+ *
+ * Licensed 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 assert = require('assert')
+  , string = require('../lib/string')
+  , tests;
+
+tests = {
+
+  'test basic escapeXML for string': function () {
+    var expected = '<html></html>'
+      , actual = string.escapeXML('<html></html>');
+    assert.equal(expected, actual);
+  }
+
+, 'test all escape characters for escapeXML': function () {
+    var expected = '&lt;&gt;&amp;&quot;&#39;'
+      , actual = string.escapeXML('<>&"\'');
+    assert.equal(expected, actual);
+  }
+
+, 'test no escape characters with string for escapeXML': function () {
+    var expected = 'Geddy'
+      , actual = string.escapeXML('Geddy');
+    assert.equal(expected, actual);
+  }
+
+, 'test no escape characters with numbers for escapeXML': function () {
+    var expected = 05
+      , actual = string.escapeXML(05);
+    assert.equal(expected, actual);
+  }
+
+, 'test basic unescapeXML for string': function () {
+    var expected = '<html></html>'
+      , actual = string.unescapeXML('&lt;html&gt;&lt;/html&gt;');
+    assert.equal(expected, actual);
+  }
+
+, 'test all escape characters for unescapeXML': function () {
+    var expected = '<>&"\''
+      , actual = string.unescapeXML('&lt;&gt;&amp;&quot;&#39;');
+    assert.equal(expected, actual);
+  }
+
+, 'test no escape characters with string for unescapeXML': function () {
+    var expected = 'Geddy'
+      , actual = string.unescapeXML('Geddy');
+    assert.equal(expected, actual);
+  }
+
+, 'test no escape characters with numbers for unescapeXML': function () {
+    var expected = 05
+      , actual = string.unescapeXML(05);
+    assert.equal(expected, actual);
+  }
+
+, 'test basic needsEscape for string': function () {
+    var expected = true
+      , actual = string.needsEscape('Geddy>');
+    assert.equal(expected, actual);
+  }
+
+, 'test basic needsEscape thats false for string': function () {
+    var expected = false
+      , actual = string.needsEscape('Geddy');
+    assert.equal(expected, actual);
+  }
+
+, 'test basic needsUnescape for string': function () {
+    var expected = true
+      , actual = string.needsEscape('&quot;Geddy&quot;');
+    assert.equal(expected, actual);
+  }
+
+, 'test basic needsUnescape thats false for string': function () {
+    var expected = false
+      , actual = string.needsEscape('Geddy');
+    assert.equal(expected, actual);
+  }
+
+,  'test escapeRegExpCharacters': function () {
+    var expected = '\\^\\/\\.\\*\\+\\?\\|\\(\\)\\[\\]\\{\\}\\\\'
+      actual = string.escapeRegExpChars('^/.*+?|()[]{}\\');
+    assert.equal(expected, actual);
+  }
+
+, 'test toArray for string': function () {
+    var data = string.toArray('geddy')
+      , expected = ['g', 'e', 'd', 'd', 'y'];
+
+    // Loop through each item and check
+    // if not, then the arrays aren't _really_ the same
+    var i = expected.length;
+    while (--i >= 0) {
+      assert.equal(expected[i], data[i]);
+    }
+  }
+
+, 'test reverse for string': function () {
+    var data = string.reverse('yddeg')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test basic ltrim for string': function () {
+    var data = string.ltrim('   geddy')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test custom char ltrim for string': function () {
+    var data = string.ltrim('&&geddy', '&')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test basic rtrim for string': function () {
+    var data = string.rtrim('geddy  ')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test custom char rtrim for string': function () {
+    var data = string.rtrim('geddy&&', '&')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test basic trim for string': function () {
+    var data = string.trim(' geddy  ')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test custom char trim for string': function () {
+    var data = string.trim('&geddy&&', '&')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test chop special-case line-ending': function () {
+    var expected = 'geddy'
+      , actual = string.chop('geddy\r\n');
+    assert.equal(expected, actual);
+  }
+
+, 'test chop not actual special-case line-ending': function () {
+    var expected = 'geddy\n'
+      , actual = string.chop('geddy\n\r');
+    assert.equal(expected, actual);
+  }
+
+, 'test chop normal line-ending': function () {
+    var expected = 'geddy'
+      , actual = string.chop('geddy\n');
+    assert.equal(expected, actual);
+  }
+
+, 'test chop whatever character': function () {
+    var expected = 'gedd'
+      , actual = string.chop('geddy');
+    assert.equal(expected, actual);
+  }
+
+, 'test chop empty string': function () {
+    var expected = ''
+      , actual = string.chop('');
+    assert.equal(expected, actual);
+  }
+
+, 'test basic lpad for string': function () {
+    var data = string.lpad('geddy', '&', 7)
+      , expected = '&&geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test lpad without width for string': function () {
+    var data = string.lpad('geddy', '&')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test lpad without width of char for string': function () {
+    var data = string.lpad('geddy')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test basic rpad for string': function () {
+    var data = string.rpad('geddy', '&', 7)
+      , expected = 'geddy&&';
+    assert.equal(expected, data);
+  }
+
+, 'test rpad without width for string': function () {
+    var data = string.rpad('geddy', '&')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test rpad without width of char for string': function () {
+    var data = string.rpad('geddy')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test basic pad for string': function () {
+    var data = string.pad('geddy', '&', 7)
+      , expected = '&geddy&';
+    assert.equal(expected, data);
+  }
+
+, 'test pad without width for string': function () {
+    var data = string.pad('geddy', '&')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test pad without width of char for string': function () {
+    var data = string.pad('geddy')
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test single tags in truncateHTML': function () {
+    var str = string.truncateHTML('<p>Once upon a time in a world</p>', { length: 10 });
+    assert.equal(str, '<p>Once up...</p>');
+  }
+
+, 'test multiple tags in truncateHTML': function () {
+    var str = string.truncateHTML('<p>Once upon a time <small>in a world</small></p>', { length: 10 });
+    assert.equal(str, '<p>Once up...<small>in a wo...</small></p>');
+  }
+
+, 'test multiple tags but only truncate once in truncateHTML': function () {
+    var str = string.truncateHTML('<p>Once upon a time <small>in a world</small></p>', { length: 10, once: true });
+    assert.equal(str, '<p>Once up...<small>in a world</small></p>');
+  }
+
+, 'test standard truncate': function () {
+    var str = string.truncate('Once upon a time in a world', { length: 10 });
+    assert.equal(str, 'Once up...');
+  }
+
+, 'test custom omission in truncate': function () {
+    var str = string.truncate('Once upon a time in a world', { length: 10, omission: '///' });
+    assert.equal(str, 'Once up///');
+  }
+
+, 'test regex seperator in truncate': function () {
+    var str = string.truncate('Once upon a time in a world', { length: 15, seperator: /\s/ });
+    assert.equal(str, 'Once upon a...');
+  }
+
+, 'test string seperator in truncate': function () {
+    var str = string.truncate('Once upon a time in a world', { length: 15, seperator: ' ' });
+    assert.equal(str, 'Once upon a...');
+  }
+
+, 'test unsafe html in truncate': function () {
+    var str = string.truncate('<p>Once upon a time in a world</p>', { length: 20 });
+    assert.equal(str, '<p>Once upon a ti...');
+  }
+
+, 'test nl2br for string': function () {
+    var data = string.nl2br("geddy\n")
+      , expected = 'geddy<br />';
+    assert.equal(expected, data);
+  }
+
+, 'test snakeize for string': function () {
+    var data = string.snakeize("geddyJs")
+      , expected = 'geddy_js';
+    assert.equal(expected, data);
+  }
+
+, 'test snakeize with beginning caps for string': function () {
+    var data = string.snakeize("GeddyJs")
+      , expected = 'geddy_js';
+    assert.equal(expected, data);
+  }
+
+, 'test camelize for string': function () {
+    var data = string.camelize("geddy_js")
+      , expected = 'geddyJs';
+    assert.equal(expected, data);
+  }
+
+, 'test camelize with initialCap for string': function () {
+    var data = string.camelize("geddy_js", {initialCap: true})
+      , expected = 'GeddyJs';
+    assert.equal(expected, data);
+  }
+
+, 'test camelize with leadingUnderscore with no underscore for string': function () {
+    var data = string.camelize("geddy_js", {leadingUnderscore: true})
+      , expected = 'geddyJs';
+    assert.equal(expected, data);
+  }
+
+, 'test camelize with leadingUnderscore with underscore for string': function () {
+    var data = string.camelize("_geddy_js", {leadingUnderscore: true})
+      , expected = '_geddyJs';
+    assert.equal(expected, data);
+  }
+
+, 'test decapitalize for string': function () {
+    var data = string.decapitalize("Geddy")
+      , expected = 'geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test capitalize for string': function () {
+    var data = string.capitalize("geddy")
+      , expected = 'Geddy';
+    assert.equal(expected, data);
+  }
+
+, 'test dasherize for string': function () {
+    var data = string.dasherize("geddyJs")
+      , expected = 'geddy-js';
+    assert.equal(expected, data);
+  }
+
+, 'test dasherize with custom replace char for string': function () {
+    var data = string.dasherize("geddyJs", "_")
+      , expected = 'geddy_js';
+    assert.equal(expected, data);
+  }
+
+, 'test underscorize for string': function () {
+    var data = string.underscorize("geddyJs")
+      , expected = 'geddy_js';
+    assert.equal(expected, data);
+  }
+
+, 'test include for string with included string': function () {
+    assert.ok(string.include('foobarbaz', 'foo'));
+  }
+
+, 'test include for string with not included string': function () {
+    assert.ok(!string.include('foobarbaz', 'qux'));
+  }
+
+, 'test getInflections for string': function () {
+    var actual = string.getInflections("string")
+      , expected = {
+        filename: {
+            singular: "string"
+          , plural: "strings"
+        },
+        constructor: {
+            singular: "String"
+          , plural: "Strings"
+        },
+        property: {
+            singular: "string"
+          , plural: "strings"
+        },
+      };
+
+    assert.deepEqual(expected, actual);
+  }
+
+, 'test inflection with odd name for string': function () {
+    var actual = string.getInflections("snow_dog")
+      , expected = {
+        filename: {
+            singular: "snow_dog"
+          , plural: "snow_dogs"
+        },
+        constructor: {
+            singular: "SnowDog"
+          , plural: "SnowDogs"
+        },
+        property: {
+            singular: "snowDog"
+          , plural: "snowDogs"
+        },
+      };
+
+    assert.deepEqual(expected, actual);
+  }
+
+, 'test uuid length for string': function () {
+    var data = string.uuid(5).length
+      , expected = 5;
+    assert.equal(expected, data);
+  }
+
+};
+
+module.exports = tests;
+
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/uri.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/uri.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/uri.js
new file mode 100644
index 0000000..8048493
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/uri.js
@@ -0,0 +1,99 @@
+/*
+ * Utilities: A classic collection of JavaScript utilities
+ * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
+ *
+ * Licensed 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 uri = require('../lib/uri')
+  , array = require('../lib/array')
+  , assert = require('assert')
+  , tests = {};
+
+tests = {
+
+  'test getFileExtension for uri': function () {
+    var data = uri.getFileExtension('users.json')
+      , actual = 'json';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify for uri': function () {
+    var data = uri.paramify({username: 'user', token: 'token', secret: 'secret'})
+      , actual = 'username=user&token=token&secret=secret';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify with conslidate option for uri': function () {
+    var data = uri.paramify({username: 'user', auth: ['token', 'secret']}, {conslidate: true})
+      , actual = 'username=user&auth=token&auth=secret';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify with includeEmpty option for uri': function () {
+    var data = uri.paramify({username: 'user', token: ''}, {includeEmpty: true})
+      , actual = 'username=user&token=';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify with includeEmpty as 0 option for uri': function () {
+    var data = uri.paramify({username: 'user', token: 0}, {includeEmpty: true})
+      , actual = 'username=user&token=0';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify with includeEmpty as null option for uri': function () {
+    var data = uri.paramify({username: 'user', token: null}, {includeEmpty: true})
+      , actual = 'username=user&token=';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify with includeEmpty as undefined option for uri': function () {
+    var data = uri.paramify({username: 'user', token: undefined}, {includeEmpty: true})
+      , actual = 'username=user&token=';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify with snakeize option for uri': function () {
+    var data = uri.paramify({username: 'user', authToken: 'token'}, {snakeize: true})
+      , actual = 'username=user&auth_token=token';
+    assert.equal(actual, data);
+  }
+
+, 'test paramify with escapeVals option for uri': function () {
+    var data = uri.paramify({username: 'user', token: '<token'}, {escapeVals: true})
+      , actual = 'username=user&token=%26lt%3Btoken';
+    assert.equal(actual, data);
+  }
+
+, 'test objectify for uri': function () {
+    var expected = {name: 'user'}
+      , actual = uri.objectify('name=user');
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test objectify with multiple matching keys for uri': function () {
+    var expected = {name: ['user', 'user2']}
+      , actual = uri.objectify('name=user&name=user2');
+    assert.deepEqual(actual, expected);
+  }
+
+, 'test objectify with no conslidation for uri': function () {
+    var expected= {name: 'user2'}
+      , actual = uri.objectify('name=user&name=user2', {consolidate: false});
+    assert.deepEqual(actual, expected);
+  }
+
+};
+
+module.exports = tests;

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/xml.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/xml.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/xml.js
new file mode 100644
index 0000000..3bb8e83
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/node_modules/utilities/test/xml.js
@@ -0,0 +1,122 @@
+/*
+ * Utilities: A classic collection of JavaScript utilities
+ * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
+ *
+ * Licensed 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 XML = require('../lib/xml').XML
+  , assert = require('assert')
+  , obj
+  , xml
+  , res
+  , serialize
+  , tests;
+
+serialize = function (o) {
+  return XML.stringify(o, {whitespace: false});
+};
+
+tests = {
+
+  'test serialized object': function () {
+    obj = {foo: 'bar'};
+    xml = serialize(obj);
+    res = '<?xml version="1.0" encoding="UTF-8"?><object><foo>bar</foo></object>';
+    assert.equal(res, xml);
+  }
+
+, 'test array of numbers': function () {
+    obj = [1, 2, 3];
+    xml = serialize(obj);
+    res = '<?xml version="1.0" encoding="UTF-8"?><numbers type="array"><number>1</number><number>2</number><number>3</number></numbers>';
+    assert.equal(res, xml);
+  }
+
+, 'test array of strings': function () {
+    obj = ['foo', 'bar'];
+    xml = serialize(obj);
+    res = '<?xml version="1.0" encoding="UTF-8"?><strings type="array"><string>foo</string><string>bar</string></strings>';
+    assert.equal(res, xml);
+  }
+
+, 'test array of mixed datatypes': function () {
+    obj = ['foo', 1];
+    xml = serialize(obj);
+    res = '<?xml version="1.0" encoding="UTF-8"?><records type="array"><record>foo</record><record>1</record></records>';
+    assert.equal(res, xml);
+  }
+
+, 'test array property of an object': function () {
+    obj = {foo: ['bar', 'baz']};
+    xml = serialize(obj);
+    res = '<?xml version="1.0" encoding="UTF-8"?><object><foo type="array"><foo>bar</foo><foo>baz</foo></foo></object>';
+    assert.equal(res, xml);
+  }
+
+, 'test setIndentLevel for xml': function () {
+    var data = XML.setIndentLevel(5)
+      , actual = 5;
+    assert.equal(actual, data)
+  }
+
+, 'test stringify with object for xml': function () {
+    var data = XML.stringify({user: 'name'})
+      , actual = '<?xml version="1.0" encoding="UTF-8"?>\n<object>\n    <user>name</user>\n</object>\n';
+    assert.equal(actual, data)
+  }
+
+, 'test stringify with array for xml': function () {
+    var data = XML.stringify(['user'])
+      , actual = '<?xml version="1.0" encoding="UTF-8"?>\n<strings type="array">\n\
+    <string>user</string>\n</strings>';
+    assert.equal(actual, data)
+  }
+
+, 'test stringify with object and no whitespace for xml': function () {
+    var data = XML.stringify({user: 'name'}, {whitespace: false})
+      , actual = '<?xml version="1.0" encoding="UTF-8"?><object><user>name</user></object>';
+    assert.equal(actual, data)
+  }
+
+, 'test stringify with object and name for xml': function () {
+    var data = XML.stringify({user: 'name'}, {name: 'omg'})
+      , actual = '<?xml version="1.0" encoding="UTF-8"?>\n<omg>\n<user>name</user>\n</omg>\n';
+    assert.equal(actual, data)
+  }
+
+, 'test stringify with object and fragment for xml': function () {
+    var data = XML.stringify({user: 'name'}, {fragment: true})
+      , actual = '<object>\n<user>name</user>\n</object>\n';
+    assert.equal(actual, data)
+  }
+
+, 'test stringify with object for xml': function () {
+    var data = XML.stringify({user: 'name'}, {level: 1})
+      , actual = '<?xml version="1.0" encoding="UTF-8"?>\n         <user>name</user>\n';
+    assert.equal(actual, data)
+  }
+
+, 'test stringify with array and no arrayRoot for xml': function () {
+    var data = XML.stringify(['user'], {arrayRoot: false})
+      , actual = '<?xml version="1.0" encoding="UTF-8"?>\n<strings type="array">\n\
+<string>user</string>\n</strings>';
+    assert.equal(actual, data)
+  }
+
+
+};
+
+module.exports = tests;
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/package.json
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/package.json b/lib/cordova-blackberry/blackberry10/node_modules/jake/package.json
new file mode 100644
index 0000000..2c9141c
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/package.json
@@ -0,0 +1,37 @@
+{
+  "name": "jake",
+  "description": "JavaScript build tool, similar to Make or Rake",
+  "keywords": [
+    "build",
+    "cli",
+    "make",
+    "rake"
+  ],
+  "version": "0.5.14",
+  "author": {
+    "name": "Matthew Eernisse",
+    "email": "mde@fleegix.org",
+    "url": "http://fleegix.org"
+  },
+  "bin": {
+    "jake": "./bin/cli.js"
+  },
+  "main": "./lib/jake.js",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/mde/jake.git"
+  },
+  "preferGlobal": true,
+  "dependencies": {
+    "minimatch": "0.2.x",
+    "utilities": "0.0.x"
+  },
+  "devDependencies": {},
+  "engines": {
+    "node": "*"
+  },
+  "readme": "### Jake -- JavaScript build tool for Node.js\n\n### Installing with [NPM](http://npmjs.org/)\n\nInstall globally with:\n\n    npm install -g jake\n\nOr you may also install it as a development dependency in a package.json file:\n\n    // package.json\n    \"devDependencies\": {\n      \"jake\": \"latest\"\n    }\n\nThen install it with `npm install`\n\nNote Jake is intended to be mostly a command-line tool, but lately there have been\nchanges to it so it can be either embedded, or run from inside your project.\n\n### Installing from source\n\nPrerequisites: Jake requires [Node.js](<http://nodejs.org/>), and the\n[utilities](https://npmjs.org/package/utilities) and\n[minimatch](https://npmjs.org/package/minimatch) modules.\n\nGet Jake:\n\n    git clone git://github.com/mde/jake.git\n\nBuild Jake:\n\n    cd jake && make && sudo make install\n\nEven if you're installing Jake from source, you'll still need NPM for installing\nthe few modules Jake depends on. `make install`
  will do this automatically for\nyou.\n\nBy default Jake is installed in \"/usr/local.\" To install it into a different\ndirectory (e.g., one that doesn't require super-user privilege), pass the PREFIX\nvariable to the `make install` command.  For example, to install it into a\n\"jake\" directory in your home directory, you could use this:\n\n    make && make install PREFIX=~/jake\n\nIf do you install Jake somewhere special, you'll need to add the \"bin\" directory\nin the install target to your PATH to get access to the `jake` executable.\n\n### Windows, installing from source\n\nFor Windows users installing from source, there are some additional steps.\n\n*Assumed: current directory is the same directory where node.exe is present.*\n\nGet Jake:\n\n    git clone git://github.com/mde/jake.git node_modules/jake\n\nCopy jake.bat and jake to the same directory as node.exe\n\n    copy node_modules/jake/jake.bat jake.bat\n    copy node_modules/jake/jake jake\n\nAdd the directory of node.
 exe to the environment PATH variable.\n\n### Basic usage\n\n    jake [options ...] [env variables ...] target\n\n### Description\n\n    Jake is a simple JavaScript build program with capabilities similar to the\n    regular make or rake command.\n\n    Jake has the following features:\n        * Jakefiles are in standard JavaScript syntax\n        * Tasks with prerequisites\n        * Namespaces for tasks\n        * Async task execution\n\n### Options\n\n    -V/v\n    --version                   Display the Jake version.\n\n    -h\n    --help                      Display help message.\n\n    -f *FILE*\n    --jakefile *FILE*           Use FILE as the Jakefile.\n\n    -C *DIRECTORY*\n    --directory *DIRECTORY*     Change to DIRECTORY before running tasks.\n\n    -q\n    --quiet                     Do not log messages to standard output.\n\n    -J *JAKELIBDIR*\n    --jakelibdir *JAKELIBDIR*   Auto-import any .jake files in JAKELIBDIR.\n                                (default is 'jake
 lib')\n\n    -B\n    --always-make               Unconditionally make all targets.\n\n    -t\n    --trace                     Enable full backtrace.\n\n    -T/ls\n    --tasks                     Display the tasks (matching optional PATTERN)\n                                with descriptions, then exit.\n\n### Jakefile syntax\n\nA Jakefile is just executable JavaScript. You can include whatever JavaScript\nyou want in it.\n\n## API Docs\n\nAPI docs [can be found here](http://mde.github.com/jake/doc/).\n\n## Tasks\n\nUse `task` to define tasks. It has one required argument, the task-name, and\nthree optional arguments:\n\n```javascript\ntask(name, [prerequisites], [action], [opts]);\n```\n\nThe `name` argument is a String with the name of the task, and `prerequisites`\nis an optional Array arg of the list of prerequisite tasks to perform first.\n\nThe `action` is a Function defininng the action to take for the task. (Note that\nObject-literal syntax for name/prerequisites in a single 
 argument a la Rake is\nalso supported, but JavaScript's lack of support for dynamic keys in Object\nliterals makes it not very useful.) The action is invoked with the Task object\nitself as the execution context (i.e, \"this\" inside the action references the\nTask object).\n\nThe `opts` argument is the normal JavaScript-style 'options' object. When a\ntask's operations are asynchronous, the `async` property should be set to\n`true`, and the task must call `complete()` to signal to Jake that the task is\ndone, and execution can proceed. By default the `async` property is `false`.\n\nTasks created with `task` are always executed when asked for (or are a\nprerequisite). Tasks created with `file` are only executed if no file with the\ngiven name exists or if any of its file-prerequisites are more recent than the\nfile named by the task. Also, if any prerequisite is a regular task, the file\ntask will always be executed.\n\nUse `desc` to add a string description of the task.\n\nHere's a
 n example:\n\n```javascript\ndesc('This is the default task.');\ntask('default', function (params) {\n  console.log('This is the default task.');\n});\n\ndesc('This task has prerequisites.');\ntask('hasPrereqs', ['foo', 'bar', 'baz'], function (params) {\n  console.log('Ran some prereqs first.');\n});\n```\n\nAnd here's an example of an asynchronous task:\n\n```javascript\ndesc('This is an asynchronous task.');\ntask('asyncTask', {async: true}, function () {\n  setTimeout(complete, 1000);\n});\n```\n\nA Task is also an EventEmitter which emits the 'complete' event when it is\nfinished. This allows asynchronous tasks to be run from within other asked via\neither `invoke` or `execute`, and ensure they will complete before the rest of\nthe containing task executes. See the section \"Running tasks from within other\ntasks,\" below.\n\n### File-tasks\n\nCreate a file-task by calling `file`.\n\nFile-tasks create a file from one or more other files. With a file-task, Jake\nchecks both that
  the file exists, and also that it is not older than the files\nspecified by any prerequisite tasks. File-tasks are particularly useful for\ncompiling something from a tree of source files.\n\n```javascript\ndesc('This builds a minified JS file for production.');\nfile('foo-minified.js', ['bar', 'foo-bar.js', 'foo-baz.js'], function () {\n  // Code to concat and minify goes here\n});\n```\n\n### Directory-tasks\n\nCreate a directory-task by calling `directory`.\n\nDirectory-tasks create a directory for use with for file-tasks. Jake checks for\nthe existence of the directory, and only creates it if needed.\n\n```javascript\ndesc('This creates the bar directory for use with the foo-minified.js file-task.');\ndirectory('bar');\n```\n\nThis task will create the directory when used as a prerequisite for a file-task,\nor when run from the command-line.\n\n### Namespaces\n\nUse `namespace` to create a namespace of tasks to perform. Call it with two arguments:\n\n```javascript\nnamespace(na
 me, namespaceTasks);\n```\n\nWhere is `name` is the name of the namespace, and `namespaceTasks` is a function\nwith calls inside it to `task` or `desc` definining all the tasks for that\nnamespace.\n\nHere's an example:\n\n```javascript\ndesc('This is the default task.');\ntask('default', function () {\n  console.log('This is the default task.');\n});\n\nnamespace('foo', function () {\n  desc('This the foo:bar task');\n  task('bar', function () {\n    console.log('doing foo:bar task');\n  });\n\n  desc('This the foo:baz task');\n  task('baz', ['default', 'foo:bar'], function () {\n    console.log('doing foo:baz task');\n  });\n\n});\n```\n\nIn this example, the foo:baz task depends on the the default and foo:bar tasks.\n\n### Passing parameters to jake\n\nParameters can be passed to Jake two ways: plain arguments, and environment\nvariables.\n\nTo pass positional arguments to the Jake tasks, enclose them in square braces,\nseparated by commas, after the name of the task on the comma
 nd-line. For\nexample, with the following Jakefile:\n\n```javascript\ndesc('This is an awesome task.');\ntask('awesome', function (a, b, c) {\n  console.log(a, b, c);\n});\n```\n\nYou could run `jake` like this:\n\n    jake awesome[foo,bar,baz]\n\nAnd you'd get the following output:\n\n    foo bar baz\n\nNote that you *cannot* uses spaces between the commas separating the parameters.\n\nAny parameters passed after the Jake task that contain an equals sign (=) will\nbe added to process.env.\n\nWith the following Jakefile:\n\n```javascript\ndesc('This is an awesome task.');\ntask('awesome', function (a, b, c) {\n  console.log(a, b, c);\n  console.log(process.env.qux, process.env.frang);\n});\n```\n\nYou could run `jake` like this:\n\n    jake awesome[foo,bar,baz] qux=zoobie frang=asdf\n\nAnd you'd get the following output:\n\n    foo bar baz\n    zoobie asdf\nRunning `jake` with no arguments runs the default task.\n\n__Note for zsh users__ : you will need to escape the brackets or wra
 p in single\nquotes like this to pass parameters :\n\n    jake 'awesome[foo,bar,baz]'\n\nAn other solution is to desactivate permannently file-globbing for the `jake`\ncommand. You can do this by adding this line to your `.zshrc` file :\n\n    alias jake=\"noglob jake\"\n\n### Cleanup after all tasks run, jake 'complete' event\n\nThe base 'jake' object is an EventEmitter, and fires a 'complete' event after\nrunning all tasks.\n\nThis is sometimes useful when a task starts a process which keeps the Node\nevent-loop running (e.g., a database connection). If you know you want to stop\nthe running Node process after all tasks have finished, you can set a listener\nfor the 'complete' event, like so:\n\n```javascript\njake.addListener('complete', function () {\n  process.exit();\n});\n```\n\n### Running tasks from within other tasks\n\nJake supports the ability to run a task from within another task via the\n`invoke` and `execute` methods.\n\nThe `invoke` method will run the desired task,
  along with its prerequisites:\n\n```javascript\ndesc('Calls the foo:bar task and its prerequisites.');\ntask('invokeFooBar', function () {\n  // Calls foo:bar and its prereqs\n  jake.Task['foo:bar'].invoke();\n});\n```\n\nThe `invoke` method will only run the task once, even if you call it repeatedly.\n\n```javascript\ndesc('Calls the foo:bar task and its prerequisites.');\ntask('invokeFooBar', function () {\n  // Calls foo:bar and its prereqs\n  jake.Task['foo:bar'].invoke();\n  // Does nothing\n  jake.Task['foo:bar'].invoke();\n});\n```\n\nThe `execute` method will run the desired task without its prerequisites:\n\n```javascript\ndesc('Calls the foo:bar task without its prerequisites.');\ntask('executeFooBar', function () {\n  // Calls foo:bar without its prereqs\n  jake.Task['foo:baz'].execute();\n});\n```\n\nCalling `execute` repeatedly will run the desired task repeatedly.\n\n```javascript\ndesc('Calls the foo:bar task without its prerequisites.');\ntask('executeFooBar', funct
 ion () {\n  // Calls foo:bar without its prereqs\n  jake.Task['foo:baz'].execute();\n  // Can keep running this over and over\n  jake.Task['foo:baz'].execute();\n  jake.Task['foo:baz'].execute();\n});\n```\n\nIf you want to run the task and its prerequisites more than once, you can use\n`invoke` with the `reenable` method.\n\n```javascript\ndesc('Calls the foo:bar task and its prerequisites.');\ntask('invokeFooBar', function () {\n  // Calls foo:bar and its prereqs\n  jake.Task['foo:bar'].invoke();\n  // Does nothing\n  jake.Task['foo:bar'].invoke();\n  // Only re-runs foo:bar, but not its prerequisites\n  jake.Task['foo:bar'].reenable();\n  jake.Task['foo:bar'].invoke();\n});\n```\n\nThe `reenable` method takes a single Boolean arg, a 'deep' flag, which reenables\nthe task's prerequisites if set to true.\n\n```javascript\ndesc('Calls the foo:bar task and its prerequisites.');\ntask('invokeFooBar', function () {\n  // Calls foo:bar and its prereqs\n  jake.Task['foo:bar'].invoke();\n
   // Does nothing\n  jake.Task['foo:bar'].invoke();\n  // Re-runs foo:bar and all of its prerequisites\n  jake.Task['foo:bar'].reenable(true);\n  jake.Task['foo:bar'].invoke();\n});\n```\n\nIt's easy to pass params on to a sub-task run via `invoke` or `execute`:\n\n```javascript\ndesc('Passes params on to other tasks.');\ntask('passParams', function () {\n  var t = jake.Task['foo:bar'];\n  // Calls foo:bar, passing along current args\n  t.invoke.apply(t, arguments);\n});\n```\n\n### Managing asynchrony without prereqs (e.g., when using `invoke`)\n\nYou can mix sync and async without problems when using normal prereqs, because\nthe Jake execution loop takes care of the difference for you. But when you call\n`invoke` or `execute`, you have to manage the asynchrony yourself.\n\nHere's a correct working example:\n\n```javascript\ntask('async1', ['async2'], {async: true}, function () {\n    console.log('-- async1 start ----------------');\n    setTimeout(function () {\n        console.lo
 g('-- async1 done ----------------');\n        complete();\n    }, 1000);\n});\n\ntask('async2', {async: true}, function () {\n    console.log('-- async2 start ----------------');\n    setTimeout(function () {\n        console.log('-- async2 done ----------------');\n        complete();\n    }, 500);\n});\n\ntask('init', ['async1', 'async2'], {async: true}, function () {\n    console.log('-- init start ----------------');\n    setTimeout(function () {\n        console.log('-- init done ----------------');\n        complete();\n    }, 100);\n});\n\ntask('default', {async: true}, function () {\n  console.log('-- default start ----------------');\n  var init = jake.Task.init;\n  init.addListener('complete', function () {\n    console.log('-- default done ----------------');\n    complete();\n  });\n  init.invoke();\n});\n```\n\nYou have to declare the \"default\" task as asynchronous as well, and call\n`complete` on it when \"init\" finishes. Here's the output:\n\n    -- default start 
 ----------------\n    -- async2 start ----------------\n    -- async2 done ----------------\n    -- async1 start ----------------\n    -- async1 done ----------------\n    -- init start ----------------\n    -- init done ----------------\n    -- default done ----------------\n\nYou get what you expect -- \"default\" starts, the rest runs, and finally\n\"default\" finishes.\n\n### Evented tasks\n\nTasks are EventEmitters. They can fire 'complete' and 'error' events.\n\nIf a task called via `invoke` is asynchronous, you can set a listener on the\n'complete' event to run any code that depends on it.\n\n```javascript\ndesc('Calls the async foo:baz task and its prerequisites.');\ntask('invokeFooBaz', {async: true}, function () {\n  var t = jake.Task['foo:baz'];\n  t.addListener('complete', function () {\n    console.log('Finished executing foo:baz');\n    // Maybe run some other code\n    // ...\n    // Complete the containing task\n    complete();\n  });\n  // Kick off foo:baz\n  t.invo
 ke();\n});\n```\n\nIf you want to handle the errors in a task in some specific way, you can set a\nlistener for the 'error' event, like so:\n\n```javascript\nnamespace('vronk', function () {\n  task('groo', function () {\n    var t = jake.Task['vronk:zong'];\n    t.addListener('error', function (e) {\n      console.log(e.message);\n    });\n    t.invoke();\n  });\n\n  task('zong', function () {\n    throw new Error('OMFGZONG');\n  });\n});\n```\n\nIf no specific listener is set for the \"error\" event, errors are handled by\nJake's generic error-handling.\n\n### Aborting a task\n\nYou can abort a task by calling the `fail` function, and Jake will abort the\ncurrently running task. You can pass a customized error message to `fail`:\n\n```javascript\ndesc('This task fails.');\ntask('failTask', function () {\n  fail('Yikes. Something back happened.');\n});\n```\n\nYou can also pass an optional exit status-code to the fail command, like so:\n\n```javascript\ndesc('This task fails with a
 n exit-status of 42.');\ntask('failTaskQuestionCustomStatus', function () {\n  fail('What is the answer?', 42);\n});\n```\n\nThe process will exit with a status of 42.\n\nUncaught errors will also abort the currently running task.\n\n### Showing the list of tasks\n\nPassing `jake` the -T or --tasks flag will display the full list of tasks\navailable in a Jakefile, along with their descriptions:\n\n    $ jake -T\n    jake default       # This is the default task.\n    jake asdf          # This is the asdf task.\n    jake concat.txt    # File task, concating two files together\n    jake failure       # Failing task.\n    jake lookup        # Jake task lookup by name.\n    jake foo:bar       # This the foo:bar task\n    jake foo:fonebone  # This the foo:fonebone task\n\nSetting a value for -T/--tasks will filter the list by that value:\n\n    $ jake -T foo\n    jake foo:bar       # This the foo:bar task\n    jake foo:fonebone  # This the foo:fonebone task\n\nThe list displayed will be 
 all tasks whose namespace/name contain the filter-string.\n\n## Breaking things up into multiple files\n\nJake will automatically look for files with a .jake extension in a 'jakelib'\ndirectory in your project, and load them (via `require`) after loading your\nJakefile. (The directory name can be overridden using the -J/--jakelibdir\ncommand-line option.)\n\nThis allows you to break your tasks up over multiple files -- a good way to do\nit is one namespace per file: e.g., a `zardoz` namespace full of tasks in\n'jakelib/zardox.jake'.\n\nNote that these .jake files each run in their own module-context, so they don't\nhave access to each others' data. However, the Jake API methods, and the\ntask-hierarchy are globally available, so you can use tasks in any file as\nprerequisites for tasks in any other, just as if everything were in a single\nfile.\n\nEnvironment-variables set on the command-line are likewise also naturally\navailable to code in all files via process.env.\n\n## File-uti
 ls\n\nSince shelling out in Node is an asynchronous operation, Jake comes with a few\nuseful file-utilities with a synchronous API, that make scripting easier.\n\nThe `jake.mkdirP` utility recursively creates a set of nested directories. It\nwill not throw an error if any of the directories already exists. Here's an example:\n\n```javascript\njake.mkdirP('app/views/layouts');\n```\n\nThe `jake.cpR` utility does a recursive copy of a file or directory. It takes\ntwo arguments, the file/directory to copy, and the destination. Note that this\ncommand can only copy files and directories; it does not perform globbing (so\narguments like '*.txt' are not possible).\n\n```javascript\njake.cpR(path.join(sourceDir, '/templates'), currentDir);\n```\n\nThis would copy 'templates' (and all its contents) into `currentDir`.\n\nThe `jake.readdirR` utility gives you a recursive directory listing, giving you\noutput somewhat similar to the Unix `find` command. It only works with a\ndirectory name, an
 d does not perform filtering or globbing.\n\n```javascript\njake.readdirR('pkg');\n```\n\nThis would return an array of filepaths for all files in the 'pkg' directory,\nand all its subdirectories.\n\nThe `jake.rmRf` utility recursively removes a directory and all its contents.\n\n```javascript\njake.rmRf('pkg');\n```\n\nThis would remove the 'pkg' directory, and all its contents.\n\n## Running shell-commands: `jake.exec` and `jake.createExec`\n\nJake also provides a more general utility function for running a sequence of\nshell-commands.\n\n### `jake.exec`\n\nThe `jake.exec` command takes an array of shell-command strings, and an optional\ncallback to run after completing them. Here's an example from Jake's Jakefile,\nthat runs the tests:\n\n```javascript\ndesc('Runs the Jake tests.');\ntask('test', {async: true}, function () {\n  var cmds = [\n    'node ./tests/parseargs.js'\n  , 'node ./tests/task_base.js'\n  , 'node ./tests/file_task.js'\n  ];\n  jake.exec(cmds, {printStdout: tru
 e}, function () {\n    console.log('All tests passed.');\n    complete();\n  });\n\ndesc('Runs some apps in interactive mode.');\ntask('interactiveTask', {async: true}, function () {\n  var cmds = [\n    'node' // Node conosle\n  , 'vim' // Open Vim\n  ];\n  jake.exec(cmds, {interactive: true}, function () {\n    complete();\n  });\n});\n```\n\nIt also takes an optional options-object, with the following options:\n\n * `interactive` (tasks are interactive, trumps printStdout and\n    printStderr below, default false)\n\n * `printStdout` (print to stdout, default false)\n\n * `printStderr` (print to stderr, default false)\n\n * `breakOnError` (stop execution on error, default true)\n\nThis command doesn't pipe input between commands -- it's for simple execution.\n\n### `jake.createExec` and the evented Exec object\n\nJake also provides an evented interface for running shell commands. Calling\n`jake.createExec` returns an instance of `jake.Exec`, which is an `EventEmitter`\nthat fires
  events as it executes commands.\n\nIt emits the following events:\n\n* 'cmdStart': When a new command begins to run. Passes one arg, the command\nbeing run.\n\n* 'cmdEnd': When a command finishes. Passes one arg, the command\nbeing run.\n\n* 'stdout': When the stdout for the child-process recieves data. This streams\nthe stdout data. Passes one arg, the chunk of data.\n\n* 'stderr': When the stderr for the child-process recieves data. This streams\nthe stderr data. Passes one arg, the chunk of data.\n\n* 'error': When a shell-command exits with a non-zero status-code. Passes two\nargs -- the error message, and the status code. If you do not set an error\nhandler, and a command exits with an error-code, Jake will throw the unhandled\nerror. If `breakOnError` is set to true, the Exec object will emit and 'error'\nevent after the first error, and stop any further execution.\n\nTo begin running the commands, you have to call the `run` method on it. It also\nhas an `append` method for a
 dding new commands to the list of commands to run.\n\nHere's an example:\n\n```javascript\nvar ex = jake.createExec(['do_thing.sh'], {printStdout: true});\nex.addListener('error', function (msg, code) {\n  if (code == 127) {\n    console.log(\"Couldn't find do_thing script, trying do_other_thing\");\n    ex.append('do_other_thing.sh');\n  }\n  else {\n    fail('Fatal error: ' + msg, code);\n  }\n});\nex.run();\n```\n\nUsing the evented Exec object gives you a lot more flexibility in running shell\ncommmands. But if you need something more sophisticated, Procstreams\n(<https://github.com/polotek/procstreams>) might be a good option.\n\n## Logging and output\n\nUsing the -q/--quiet flag at the command-line will stop Jake from sending its\nnormal output to standard output. Note that this only applies to built-in output\nfrom Jake; anything you output normally from your tasks will still be displayed.\n\nIf you want to take advantage of the -q/--quiet flag in your own programs, you\ncan 
 use `jake.logger.log` and `jake.logger.error` for displaying output. These\ntwo commands will respect the flag, and suppress output correctly when the\nquiet-flag is on.\n\nYou can check the current value of this flag in your own tasks by using\n`jake.program.opts.quiet`. If you want the output of a `jake.exec` shell-command\nto respect the quiet-flag, set your `printStdout` and `printStderr` options to\nfalse if the quiet-option is on:\n\n```javascript\ntask('echo', {async: true}, function () {\n  jake.exec(['echo \"hello\"'], function () {\n    jake.logger.log('Done.');\n    complete();\n  }, {printStdout: !jake.program.opts.quiet});\n});\n```\n\n## PackageTask\n\nInstantiating a PackageTask programmically creates a set of tasks for packaging\nup your project for distribution. Here's an example:\n\n```javascript\nvar t = new jake.PackageTask('fonebone', 'v0.1.2112', function () {\n  var fileList = [\n    'Jakefile'\n  , 'README.md'\n  , 'package.json'\n  , 'lib/*'\n  , 'bin/*'\n  
 , 'tests/*'\n  ];\n  this.packageFiles.include(fileList);\n  this.needTarGz = true;\n  this.needTarBz2 = true;\n});\n```\n\nThis will automatically create a 'package' task that will assemble the specified\nfiles in 'pkg/fonebone-v0.1.2112,' and compress them according to the specified\noptions. After running `jake package`, you'll have the following in pkg/:\n\n    fonebone-v0.1.2112\n    fonebone-v0.1.2112.tar.bz2\n    fonebone-v0.1.2112.tar.gz\n\nPackageTask also creates a 'clobber' task that removes the pkg/\ndirectory.\n\nThe [PackageTask API\ndocs](http://mde.github.com/jake/doc/symbols/jake.PackageTask.html) include a\nlot more information, including different archiving options.\n\n### FileList\n\nJake's FileList takes a list of glob-patterns and file-names, and lazy-creates a\nlist of files to include. Instead of immediately searching the filesystem to\nfind the files, a FileList holds the pattern until it is actually used.\n\nWhen any of the normal JavaScript Array methods (
 or the `toArray` method) are\ncalled on the FileList, the pending patterns are resolved into an actual list of\nfile-names. FileList uses the [minimatch](https://github.com/isaacs/minimatch) module.\n\nTo build the list of files, use FileList's `include` and `exclude` methods:\n\n```javascript\nvar list = new jake.FileList();\nlist.include('foo/*.txt');\nlist.include(['bar/*.txt', 'README.md']);\nlist.include('Makefile', 'package.json');\nlist.exclude('foo/zoobie.txt');\nlist.exclude(/foo\\/src.*.txt/);\nconsole.log(list.toArray());\n```\n\nThe `include` method can be called either with an array of items, or multiple\nsingle parameters. Items can be either glob-patterns, or individual file-names.\n\nThe `exclude` method will prevent files from being included in the list. These\nfiles must resolve to actual files on the filesystem. It can be called either\nwith an array of items, or mutliple single parameters. Items can be\nglob-patterns, individual file-names, string-representations
  of\nregular-expressions, or regular-expression literals.\n\n## TestTask\n\nInstantiating a TestTask programmically creates a simple task for running tests\nfor your project. The first argument of the constructor is the project-name\n(used in the description of the task), and the second argument is a function\nthat defines the task. It allows you to specifify what files to run as tests,\nand what to name the task that gets created (defaults to \"test\" if unset).\n\n```javascript\nvar t = new jake.TestTask('fonebone', function () {\n  var fileList = [\n    'tests/*'\n  , 'lib/adapters/**/test.js'\n  ];\n  this.testFiles.include(fileList);\n  this.testFiles.exclude('tests/helper.js');\n  this.testName = 'testMainAndAdapters';\n});\n```\n\nTests in the specified file should be in the very simple format of\ntest-functions hung off the export. These tests are converted into Jake tasks\nwhich Jake then runs normally.\n\nIf a test needs to run asynchronously, simply define the test-functi
 on with a\nsingle argument, a callback. Jake will define this as an asynchronous task, and\nwill wait until the callback is called in the test function to run the next test.\n\nHere's an example test-file:\n\n```javascript\nvar assert = require('assert')\n  , tests;\n\ntests = {\n  'sync test': function () {\n    // Assert something\n    assert.ok(true);\n  }\n, 'async test': function (next) {\n    // Assert something else\n    assert.ok(true);\n    // Won't go next until this is called\n    next();\n  }\n, 'another sync test': function () {\n    // Assert something else\n    assert.ok(true);\n  }\n};\n\nmodule.exports = tests;\n```\n\nJake's tests are also a good example of use of a TestTask.\n\n## NpmPublishTask\n\nThe NpmPublishTask builds on top of PackageTask to allow you to do a version\nbump of your project, package it, and publish it to NPM. Define the task with\nyour project's name, and the list of files you want packaged and published to\nNPM.\n\nHere's an example from Jak
 e's Jakefile:\n\n```javascript\nvar p = new jake.NpmPublishTask('jake', [\n  'Makefile'\n, 'Jakefile'\n, 'README.md'\n, 'package.json'\n, 'lib/*'\n, 'bin/*'\n, 'tests/*'\n]);\n```\n\nThe NpmPublishTask will automatically create a `publish` task which performs the\nfollowing steps:\n\n1. Bump the version number in your package.json\n2. Commit change in git, push it to GitHub\n3. Create a git tag for the version\n4. Push the tag to GitHub\n5. Package the new version of your project\n6. Publish it to NPM\n7. Clean up the package\n\n## CoffeeScript Jakefiles\n\nJake can also handle Jakefiles in CoffeeScript. Be sure to make it\nJakefile.coffee so Jake knows it's in CoffeeScript.\n\nHere's an example:\n\n```coffeescript\nutil = require('util')\n\ndesc 'This is the default task.'\ntask 'default', (params) ->\n  console.log 'Ths is the default task.'\n  console.log(util.inspect(arguments))\n  jake.Task['new'].invoke []\n\ntask 'new', ->\n  console.log 'ello from new'\n  jake.Task['foo:next
 '].invoke ['param']\n\nnamespace 'foo', ->\n  task 'next', (param) ->\n    console.log 'ello from next with param: ' + param\n```\n\n## Related projects\n\nJames Coglan's \"Jake\": <http://github.com/jcoglan/jake>\n\nConfusingly, this is a Ruby tool for building JavaScript packages from source code.\n\n280 North's Jake: <http://github.com/280north/jake>\n\nThis is also a JavaScript port of Rake, which runs on the Narwhal platform.\n\n### License\n\nLicensed under the Apache License, Version 2.0\n(<http://www.apache.org/licenses/LICENSE-2.0>)\n",
+  "readmeFilename": "README.md",
+  "_id": "jake@0.5.14",
+  "_from": "jake@*"
+}

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/Jakefile
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/Jakefile b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/Jakefile
new file mode 100644
index 0000000..7e49ab2
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/Jakefile
@@ -0,0 +1,214 @@
+var exec = require('child_process').exec
+  , fs = require('fs');
+
+desc('The default task.');
+task('default', function () {
+  console.log('default task');
+});
+
+desc('No action.');
+task({'noAction': ['default']});
+
+desc('No action, no prereqs.');
+task('noActionNoPrereqs');
+
+desc('Accepts args and env vars.');
+task('argsEnvVars', function () {
+  var res = {
+    args: arguments
+  , env: {
+      foo: process.env.foo
+    , baz: process.env.baz
+    }
+  };
+  console.log(JSON.stringify(res));
+});
+
+namespace('foo', function () {
+  desc('The foo:bar task.');
+  task('bar', function () {
+    if (arguments.length) {
+      console.log('foo:bar[' +
+          Array.prototype.join.call(arguments, ',') +
+          '] task');
+    }
+    else {
+      console.log('foo:bar task');
+    }
+  });
+
+  desc('The foo:baz task, calls foo:bar as a prerequisite.');
+  task('baz', ['foo:bar'], function () {
+    console.log('foo:baz task');
+  });
+
+  desc('The foo:qux task, calls foo:bar with cmdline args as a prerequisite.');
+  task('qux', ['foo:bar[asdf,qwer]'], function () {
+    console.log('foo:qux task');
+  });
+
+  desc('The foo:frang task, calls foo:bar with passed args as a prerequisite.');
+  task('frang', function () {
+    var task = jake.Task['foo:bar'];
+    // Do args pass-through
+    task.invoke.apply(task, arguments);
+    console.log('foo:frang task');
+  });
+
+  desc('The foo:zoobie task, has no prerequisites.');
+  task('zoobie', function () {
+    console.log('foo:zoobie task');
+  });
+
+  desc('The foo:voom task, has no prerequisites.');
+  task('voom', function () {
+    console.log('foo:voom task');
+  });
+
+  desc('The foo:asdf task, has the same prereq twice.');
+  task('asdf', ['foo:bar', 'foo:baz'], function () {
+    console.log('foo:asdf task');
+  });
+
+});
+
+namespace('bar', function () {
+  desc('The bar:foo task, has no prerequisites, is async.');
+  task('foo', function () {
+    console.log('bar:foo task');
+    complete();
+  }, {async: true});
+
+  desc('The bar:bar task, has the async bar:foo task as a prerequisite.');
+  task('bar', ['bar:foo'], function () {
+    console.log('bar:bar task');
+  });
+
+});
+
+namespace('hoge', function () {
+  desc('The hoge:hoge task, has no prerequisites.');
+  task('hoge', function () {
+    console.log('hoge:hoge task');
+  });
+
+  desc('The hoge:piyo task, has no prerequisites.');
+  task('piyo', function () {
+    console.log('hoge:piyo task');
+  });
+
+  desc('The hoge:fuga task, has hoge:hoge and hoge:piyo as prerequisites.');
+  task('fuga', ['hoge:hoge', 'hoge:piyo'], function () {
+    console.log('hoge:fuga task');
+  });
+
+  desc('The hoge:charan task, has hoge:fuga as a prerequisite.');
+  task('charan', ['hoge:fuga'], function () {
+    console.log('hoge:charan task');
+  });
+
+  desc('The hoge:gero task, has hoge:fuga as a prerequisite.');
+  task('gero', ['hoge:fuga'], function () {
+    console.log('hoge:gero task');
+  });
+
+  desc('The hoge:kira task, has hoge:charan and hoge:gero as prerequisites.');
+  task('kira', ['hoge:charan', 'hoge:gero'], function () {
+    console.log('hoge:kira task');
+  });
+
+});
+
+namespace('fileTest', function () {
+  directory('foo');
+
+  desc('File task, concatenating two files together');
+  file({'foo/concat.txt': ['fileTest:foo', 'fileTest:foo/src1.txt', 'fileTest:foo/src2.txt']}, function () {
+    console.log('fileTest:foo/concat.txt task');
+    var data1 = fs.readFileSync('foo/src1.txt');
+    var data2 = fs.readFileSync('foo/src2.txt');
+    fs.writeFileSync('foo/concat.txt', data1 + data2);
+  });
+
+  desc('File task, async creation with child_process.exec');
+  file('foo/src1.txt', function () {
+    fs.writeFile('foo/src1.txt', 'src1', function (err) {
+      if (err) {
+        throw err;
+      }
+      console.log('fileTest:foo/src1.txt task');
+      complete();
+    });
+  }, {async: true});
+
+  desc('File task, sync creation with writeFileSync');
+  file('foo/src2.txt', ['default'], function () {
+    fs.writeFileSync('foo/src2.txt', 'src2');
+    console.log('fileTest:foo/src2.txt task');
+  });
+
+  desc('File task, do not run unless the prereq file changes');
+  file('foo/from-src1.txt', ['fileTest:foo', 'fileTest:foo/src1.txt'], function () {
+    var data = fs.readFileSync('foo/src1.txt');
+    fs.writeFileSync('foo/from-src1.txt', data);
+    console.log('fileTest:foo/from-src1.txt task');
+  }, {async: true});
+
+  desc('File task, run if the prereq file changes');
+  task('touch-prereq', function() {
+    fs.writeFileSync('foo/prereq.txt', 'UPDATED');
+  })
+
+  desc('File task, has a preexisting file (with no associated task) as a prereq');
+  file('foo/from-prereq.txt', ['fileTest:foo', 'foo/prereq.txt'], function () {
+    var data = fs.readFileSync('foo/prereq.txt');
+    fs.writeFileSync('foo/from-prereq.txt', data);
+    console.log('fileTest:foo/from-prereq.txt task');
+  });
+
+  directory('foo/bar/baz');
+
+  desc('Write a file in a nested subdirectory');
+  file('foo/bar/baz/bamf.txt', ['foo/bar/baz'], function () {
+    fs.writeFileSync('foo/bar/baz/bamf.txt', 'w00t');
+  });
+
+});
+
+task('blammo');
+// Define task
+task('voom', ['blammo'], function () {
+  console.log(this.prereqs.length);
+});
+
+// Modify, add a prereq
+task('voom', ['noActionNoPrereqs']);
+
+namespace('vronk', function () {
+  task('groo', function () {
+    var t = jake.Task['vronk:zong'];
+    t.addListener('error', function (e) {
+      console.log(e.message);
+    });
+    t.invoke();
+  });
+  task('zong', function () {
+    throw new Error('OMFGZONG');
+  });
+});
+
+// define namespace
+namespace('one', function() {
+  task('one', function() {
+    console.log('one:one');
+  });
+});
+
+// modify namespace (add task)
+namespace('one', function() {
+  task('two', ['one:one'], function() {
+    console.log('one:two');
+  });
+});
+
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/exec.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/exec.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/exec.js
new file mode 100644
index 0000000..0dec945
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/exec.js
@@ -0,0 +1,113 @@
+var assert = require('assert')
+  , h = require('./helpers')
+  , jake = {}
+  , utils = require('../lib/utils');
+
+utils.mixin(jake, utils);
+
+var tests = {
+  'before': function () {
+    process.chdir('./test');
+  }
+
+, 'after': function () {
+    process.chdir('../');
+  }
+
+, 'test basic exec': function (next) {
+    var ex = jake.createExec('ls', function () {})
+      , evts = { // Events should fire in this order
+          cmdStart: [0, null]
+        , stdout: [1, null]
+        , cmdEnd: [2, null]
+        , end: [3, null]
+        }
+      , incr = 0; // Increment with each event to check order
+    assert.ok(ex instanceof jake.Exec);
+    // Make sure basic events fire and fire in the right order
+    for (var p in evts) {
+      (function (p) {
+        ex.addListener(p, function () {
+          evts[p][1] = incr;
+          incr++;
+        });
+      })(p);
+    }
+    ex.run();
+    ex.addListener('end', function () {
+      for (var p in evts) {
+        assert.equal(evts[p][0], evts[p][1]);
+      }
+      next();
+    });
+
+  }
+
+, 'test an exec failure': function (next) {
+    var ex = jake.createExec('false', function () {});
+    ex.addListener('error', function (msg, code) {
+      assert.equal(1, code);
+      next();
+    });
+    ex.run();
+  }
+
+, 'test exec stdout events': function (next) {
+    var ex = jake.createExec('echo "foo"', function () {});
+    ex.addListener('stdout', function (data) {
+      assert.equal("foo", h.trim(data.toString()));
+      next();
+    });
+    ex.run();
+  }
+
+, 'test exec stderr events': function (next) {
+    var ex = jake.createExec('echo "foo" 1>&2', function () {});
+    ex.addListener('stderr', function (data) {
+      assert.equal("foo", h.trim(data.toString()));
+      next();
+    });
+    ex.run();
+  }
+
+, 'test piping results into next command': function (next) {
+    var ex = jake.createExec('ls', function () {})
+      , data
+      , appended = false;
+
+    ex.addListener('stdout', function (d) {
+      data += h.trim(d.toString());
+    });
+
+    // After the first command ends, get the accumulated result,
+    // and use it to build a new command to append to the queue.
+    // Grep through the result for files that end in .js
+    ex.addListener('cmdEnd', function () {
+      // Only append after the first cmd, avoid infinite loop
+      if (appended) {
+        return;
+      }
+      appended = true;
+      // Take the original output and build the new command
+      ex.append('echo "' + data + '" | grep "\\.js$"');
+      // Clear out data
+      data = '';
+    });
+
+    // And the end, the stdout data has been cleared once, and the new
+    // data should be the result of the second command
+    ex.addListener('end', function () {
+      // Should be a list of files ending in .js
+      data = data.split('\n');
+      data.forEach(function (d) {
+        assert.ok(/\.js$/.test(d));
+      });
+      next();
+    });
+    ex.run();
+  }
+
+};
+
+module.exports = tests;
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/file_task.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/file_task.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/file_task.js
new file mode 100644
index 0000000..f279100
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/file_task.js
@@ -0,0 +1,123 @@
+var assert = require('assert')
+  , fs = require('fs')
+  , path = require('path')
+  , exec = require('child_process').exec
+  , h = require('./helpers');
+
+var cleanUpAndNext = function (callback) {
+  exec('rm -fr ./foo', function (err, stdout, stderr) {
+    if (err) { throw err }
+    if (stderr || stdout) {
+      console.log (stderr || stdout);
+    }
+    callback();
+  });
+};
+
+var tests = {
+
+  'before': function (next) {
+    process.chdir('./test');
+    cleanUpAndNext(next);
+  }
+
+, 'after': function () {
+    process.chdir('../');
+  }
+
+, 'test concating two files': function (next) {
+    h.exec('../bin/cli.js fileTest:foo/concat.txt', function (out) {
+      var data;
+      assert.equal('fileTest:foo/src1.txt task\ndefault task\nfileTest:foo/src2.txt task\n' +
+          'fileTest:foo/concat.txt task', out);
+      // Check to see the two files got concat'd
+      data = fs.readFileSync(process.cwd() + '/foo/concat.txt');
+      assert.equal('src1src2', data.toString());
+      cleanUpAndNext(next);
+    });
+  }
+
+, 'test where a file-task prereq does not change': function (next) {
+    h.exec('../bin/cli.js fileTest:foo/from-src1.txt', function (out) {
+      assert.equal('fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task', out);
+      h.exec('../bin/cli.js fileTest:foo/from-src1.txt', function (out) {
+        // Second time should be a no-op
+        assert.equal('', out);
+        next(); // Don't clean up
+      });
+    });
+  }
+
+, 'file-task where prereq file is modified': function (next) {
+    setTimeout(function () {
+      exec('touch ./foo/src1.txt', function (err, data) {
+        if (err) {
+          throw err;
+        }
+        h.exec('../bin/cli.js fileTest:foo/from-src1.txt', function (out) {
+          assert.equal('fileTest:foo/from-src1.txt task', out);
+          cleanUpAndNext(next);
+        });
+      });
+    }, 1000); // Wait to do the touch to ensure mod-time is different
+  }
+
+, 'test where a file-task prereq does not change with --always-make': function (next) {
+    h.exec('../bin/cli.js fileTest:foo/from-src1.txt', function (out) {
+      assert.equal('fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task',
+        out);
+      h.exec('../bin/cli.js -B fileTest:foo/from-src1.txt', function (out) {
+        assert.equal('fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task',
+          out);
+        cleanUpAndNext(next);
+      });
+    });
+  }
+
+, 'test a preexisting file': function (next) {
+    var prereqData = 'howdy';
+    h.exec('mkdir -p foo', function (out) {
+      fs.writeFileSync('foo/prereq.txt', prereqData);
+      h.exec('../bin/cli.js fileTest:foo/from-prereq.txt', function (out) {
+        var data;
+        assert.equal('fileTest:foo/from-prereq.txt task', out);
+        data = fs.readFileSync(process.cwd() + '/foo/from-prereq.txt');
+        assert.equal(prereqData, data.toString());
+        h.exec('../bin/cli.js fileTest:foo/from-prereq.txt', function (out) {
+          // Second time should be a no-op
+          assert.equal('', out);
+          cleanUpAndNext(next);
+        });
+      });
+    });
+  }
+
+, 'test a preexisting file with --always-make flag': function (next) {
+    var prereqData = 'howdy';
+    h.exec('mkdir -p foo', function (out) {
+      fs.writeFileSync('foo/prereq.txt', prereqData);
+      h.exec('../bin/cli.js fileTest:foo/from-prereq.txt', function (out) {
+        var data;
+        assert.equal('fileTest:foo/from-prereq.txt task', out);
+        data = fs.readFileSync(process.cwd() + '/foo/from-prereq.txt');
+        assert.equal(prereqData, data.toString());
+        h.exec('../bin/cli.js -B fileTest:foo/from-prereq.txt', function (out) {
+          assert.equal('fileTest:foo/from-prereq.txt task', out);
+          cleanUpAndNext(next);
+        });
+      });
+    });
+  }
+
+, 'test nested directory-task': function (next) {
+    h.exec('../bin/cli.js fileTest:foo/bar/baz/bamf.txt', function (out) {
+      data = fs.readFileSync(process.cwd() + '/foo/bar/baz/bamf.txt');
+      assert.equal('w00t', data);
+      cleanUpAndNext(next);
+    });
+  }
+
+};
+
+module.exports = tests;
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/foo.html
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/foo.html b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/foo.html
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/foo.txt
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/foo.txt b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/foo.txt
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/helpers.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/helpers.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/helpers.js
new file mode 100644
index 0000000..34e540e
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/helpers.js
@@ -0,0 +1,59 @@
+var exec = require('child_process').exec;
+
+var helpers = new (function () {
+  var _tests
+    , _names = []
+    , _name
+    , _callback
+    , _runner = function () {
+        if (!!(_name = _names.shift())) {
+          console.log('Running ' + _name);
+          _tests[_name]();
+        }
+        else {
+          _callback();
+        }
+      };
+
+  this.exec = function (cmd, callback) {
+    cmd += ' --trace';
+    exec(cmd, function (err, stdout, stderr) {
+      var out = helpers.trim(stdout);
+      if (err) {
+        throw err;
+      }
+      if (stderr) {
+        callback(stderr);
+      }
+      else {
+        callback(out);
+      }
+    });
+  };
+
+  this.trim = function (s) {
+    var str = s || '';
+    return str.replace(/^\s*|\s*$/g, '');
+  };
+
+  this.parse = function (s) {
+    var str = s || '';
+    str = helpers.trim(str);
+    str = str.replace(/'/g, '"');
+    return JSON.parse(str);
+  };
+
+  this.run = function (tests, callback) {
+    _tests = tests;
+    _names = Object.keys(tests);
+    _callback = callback;
+    _runner();
+  };
+
+  this.next = function () {
+    _runner();
+  };
+
+})();
+
+module.exports = helpers;

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/namespace.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/namespace.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/namespace.js
new file mode 100644
index 0000000..d255d4e
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/namespace.js
@@ -0,0 +1,27 @@
+var assert = require('assert')
+  , h = require('./helpers')
+  , jake = {}
+  , utils = require('../lib/utils');
+
+utils.mixin(jake, utils);
+
+var tests = {
+  'before': function() {
+    process.chdir('./test');
+  }
+
+, 'after': function() {
+    process.chdir('../');
+  }
+
+, 'test modifying a namespace by adding a new task': function(next) {
+    h.exec('../bin/cli.js one:two', function(out) {
+      assert.equal('one:one\none:two', out);
+      next();
+    });
+  }
+
+};
+
+module.exports = tests;
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/parseargs.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/parseargs.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/parseargs.js
new file mode 100644
index 0000000..5997d07
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/parseargs.js
@@ -0,0 +1,150 @@
+var parseargs = require('../lib/parseargs')
+  , assert = require('assert')
+  , optsReg = [
+      { full: 'directory'
+      , abbr: 'C'
+      , preempts: false
+      , expectValue: true
+      }
+    , { full: 'jakefile'
+      , abbr: 'f'
+      , preempts: false
+      , expectValue: true
+      }
+    , { full: 'tasks'
+      , abbr: 'T'
+      , preempts: true
+      }
+    , { full: 'tasks'
+      , abbr: 'ls'
+      , preempts: true
+      }
+    , { full: 'trace'
+      , abbr: 't'
+      , preempts: false
+      , expectValue: false
+      }
+    , { full: 'help'
+      , abbr: 'h'
+      , preempts: true
+      }
+    , { full: 'version'
+      , abbr: 'V'
+      , preempts: true
+      }
+    ]
+  , p = new parseargs.Parser(optsReg)
+  , z = function (s) { return s.split(' '); }
+  , res;
+
+var tests = {
+
+  'test long preemptive opt and val with equal-sign, ignore further opts': function () {
+    res = p.parse(z('--tasks=foo --jakefile=asdf'));
+    assert.equal('foo', res.opts.tasks);
+    assert.equal(undefined, res.opts.jakefile);
+  }
+
+, 'test long preemptive opt and val without equal-sign, ignore further opts': function () {
+    res = p.parse(z('--tasks foo --jakefile=asdf'));
+    assert.equal('foo', res.opts.tasks);
+    assert.equal(undefined, res.opts.jakefile);
+  }
+
+, 'test long preemptive opt and no val, ignore further opts': function () {
+    res = p.parse(z('--tasks --jakefile=asdf'));
+    assert.equal(true, res.opts.tasks);
+    assert.equal(undefined, res.opts.jakefile);
+  }
+
+, 'test preemptive opt with no val, should be true': function () {
+    res = p.parse(z('-T'));
+    assert.equal(true, res.opts.tasks);
+  }
+
+, 'test preemptive opt with no val, should be true and ignore further opts': function () {
+    res = p.parse(z('-T -f'));
+    assert.equal(true, res.opts.tasks);
+    assert.equal(undefined, res.opts.jakefile);
+  }
+
+, 'test preemptive opt with val, should be val': function () {
+    res = p.parse(z('-T zoobie -f foo/bar/baz'));
+    assert.equal('zoobie', res.opts.tasks);
+    assert.equal(undefined, res.opts.jakefile);
+  }
+
+, 'test -f expects a value, -t does not (howdy is task-name)': function () {
+    res = p.parse(z('-f zoobie -t howdy'));
+    assert.equal('zoobie', res.opts.jakefile);
+    assert.equal(true, res.opts.trace);
+    assert.equal('howdy', res.taskNames[0]);
+  }
+
+, 'test different order, -f expects a value, -t does not (howdy is task-name)': function () {
+    res = p.parse(z('-f zoobie howdy -t'));
+    assert.equal('zoobie', res.opts.jakefile);
+    assert.equal(true, res.opts.trace);
+    assert.equal('howdy', res.taskNames[0]);
+  }
+
+, 'test -f expects a value, -t does not (foo=bar is env var)': function () {
+    res = p.parse(z('-f zoobie -t foo=bar'));
+    assert.equal('zoobie', res.opts.jakefile);
+    assert.equal(true, res.opts.trace);
+    assert.equal('bar', res.envVars.foo);
+    assert.equal(undefined, res.taskName);
+  }
+
+, 'test -f expects a value, -t does not (foo=bar is env-var, task-name follows)': function () {
+    res = p.parse(z('-f zoobie -t howdy foo=bar'));
+    assert.equal('zoobie', res.opts.jakefile);
+    assert.equal(true, res.opts.trace);
+    assert.equal('bar', res.envVars.foo);
+    assert.equal('howdy', res.taskNames[0]);
+  }
+
+, 'test -t does not expect a value, -f does (throw howdy away)': function () {
+    res = p.parse(z('-t howdy -f zoobie'));
+    assert.equal(true, res.opts.trace);
+    assert.equal('zoobie', res.opts.jakefile);
+    assert.equal(undefined, res.taskName);
+
+  }
+
+, 'test --trace does not expect a value, -f does (throw howdy away)': function () {
+    res = p.parse(z('--trace howdy --jakefile zoobie'));
+    assert.equal(true, res.opts.trace);
+    assert.equal('zoobie', res.opts.jakefile);
+    assert.equal(undefined, res.taskName);
+  }
+
+, 'test --trace does not expect a value, -f does (throw howdy away)': function () {
+    res = p.parse(z('--trace=howdy --jakefile=zoobie'));
+    assert.equal(true, res.opts.trace);
+    assert.equal('zoobie', res.opts.jakefile);
+    assert.equal(undefined, res.taskName);
+  }
+
+/*
+, 'test task-name with positional args': function () {
+    res = p.parse(z('foo:bar[asdf,qwer]'));
+    assert.equal('asdf', p.taskArgs[0]);
+    assert.equal('qwer', p.taskArgs[1]);
+  }
+
+, 'test opts, env vars, task-name with positional args': function () {
+    res = p.parse(z('-f ./tests/Jakefile -t default[asdf,qwer] foo=bar'));
+    assert.equal('./tests/Jakefile', res.opts.jakefile);
+    assert.equal(true, res.opts.trace);
+    assert.equal('bar', res.envVars.foo);
+    assert.equal('default', res.taskName);
+    assert.equal('asdf', p.taskArgs[0]);
+    assert.equal('qwer', p.taskArgs[1]);
+  }
+*/
+
+};
+
+module.exports = tests;
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jake/test/task_base.js
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jake/test/task_base.js b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/task_base.js
new file mode 100644
index 0000000..7d4269e
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jake/test/task_base.js
@@ -0,0 +1,137 @@
+var assert = require('assert')
+  , h = require('./helpers');
+
+var tests = {
+
+  'before': function () {
+    process.chdir('./test');
+  }
+
+, 'after': function () {
+    process.chdir('../');
+  }
+
+, 'test default task': function (next) {
+    h.exec('../bin/cli.js', function (out) {
+      assert.equal('default task', out);
+      h.exec('../bin/cli.js default', function (out) {
+        assert.equal('default task', out);
+        next();
+      });
+    });
+  }
+
+, 'test task with no action': function (next) {
+    h.exec('../bin/cli.js noAction', function (out) {
+      assert.equal('default task', out);
+      next();
+    });
+  }
+
+, 'test a task with no action and no prereqs': function (next) {
+    h.exec('../bin/cli.js noActionNoPrereqs', function () {
+      next();
+    });
+  }
+
+, 'test passing args to a task': function (next) {
+    h.exec('../bin/cli.js argsEnvVars[foo,bar]', function (out) {
+      var parsed = h.parse(out)
+        , args = parsed.args;
+      assert.equal(args[0], 'foo');
+      assert.equal(args[1], 'bar');
+      next();
+    });
+  }
+
+, 'test a task with environment vars': function (next) {
+    h.exec('../bin/cli.js argsEnvVars foo=bar baz=qux', function (out) {
+      var parsed = h.parse(out)
+        , env = parsed.env;
+      assert.equal(env.foo, 'bar');
+      assert.equal(env.baz, 'qux');
+      next();
+    });
+  }
+
+, 'test passing args and using environment vars': function (next) {
+    h.exec('../bin/cli.js argsEnvVars[foo,bar] foo=bar baz=qux', function (out) {
+      var parsed = h.parse(out)
+        , args = parsed.args
+        , env = parsed.env;
+      assert.equal(args[0], 'foo');
+      assert.equal(args[1], 'bar');
+      assert.equal(env.foo, 'bar');
+      assert.equal(env.baz, 'qux');
+      next();
+    });
+  }
+
+, 'test a simple prereq': function (next) {
+    h.exec('../bin/cli.js foo:baz', function (out) {
+      assert.equal('foo:bar task\nfoo:baz task', out);
+      next();
+    });
+  }
+
+, 'test a duplicate prereq only runs once': function (next) {
+    h.exec('../bin/cli.js foo:asdf', function (out) {
+      assert.equal('foo:bar task\nfoo:baz task\nfoo:asdf task', out);
+      next();
+    });
+  }
+
+, 'test a prereq with command-line args': function (next) {
+    h.exec('../bin/cli.js foo:qux', function (out) {
+      assert.equal('foo:bar[asdf,qwer] task\nfoo:qux task', out);
+      next();
+    });
+  }
+
+, 'test a prereq with args via invoke': function (next) {
+    h.exec('../bin/cli.js foo:frang[zxcv,uiop]', function (out) {
+      assert.equal('foo:bar[zxcv,uiop] task\nfoo:frang task', out);
+      next();
+    });
+  }
+
+, 'test prereq execution-order': function (next) {
+    h.exec('../bin/cli.js hoge:fuga', function (out) {
+      assert.equal('hoge:hoge task\nhoge:piyo task\nhoge:fuga task', out);
+      next();
+    });
+  }
+
+, 'test basic async task': function (next) {
+    h.exec('../bin/cli.js bar:bar', function (out) {
+      assert.equal('bar:foo task\nbar:bar task', out);
+      next();
+    });
+  }
+
+, 'test that current-prereq index gets reset': function (next) {
+    h.exec('../bin/cli.js hoge:kira', function (out) {
+      assert.equal('hoge:hoge task\nhoge:piyo task\nhoge:fuga task\n' +
+          'hoge:charan task\nhoge:gero task\nhoge:kira task', out);
+      next();
+    });
+  }
+
+, 'test modifying a task by adding prereq during execution': function (next) {
+    h.exec('../bin/cli.js voom', function (out) {
+      assert.equal(2, out);
+      next();
+    });
+  }
+
+, 'test listening for task error-event': function (next) {
+    h.exec('../bin/cli.js vronk:groo', function (out) {
+      assert.equal('OMFGZONG', out);
+      next();
+    });
+  }
+
+};
+
+module.exports = tests;
+

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/6831bed4/lib/cordova-blackberry/blackberry10/node_modules/jasmine-node/.npmignore
----------------------------------------------------------------------
diff --git a/lib/cordova-blackberry/blackberry10/node_modules/jasmine-node/.npmignore b/lib/cordova-blackberry/blackberry10/node_modules/jasmine-node/.npmignore
new file mode 100755
index 0000000..1e90ec5
--- /dev/null
+++ b/lib/cordova-blackberry/blackberry10/node_modules/jasmine-node/.npmignore
@@ -0,0 +1,9 @@
+.DS_Store
+.idea
+*.iml
+*.ipr
+*.iws
+*.tmproj
+.project
+.settings
+.externalToolBuilders
\ No newline at end of file