You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by be...@apache.org on 2013/06/04 02:20:22 UTC

git commit: consolidated paltform-specific references to platforms.js

Updated Branches:
  refs/heads/platform-reorg [created] 4e3bef047


consolidated paltform-specific references to platforms.js


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

Branch: refs/heads/platform-reorg
Commit: 4e3bef0473dc6029af2e28d6f916760533c17d4f
Parents: f77fe9b
Author: Benn Mapes <be...@gmail.com>
Authored: Mon Jun 3 16:58:58 2013 -0700
Committer: Benn Mapes <be...@gmail.com>
Committed: Mon Jun 3 17:18:55 2013 -0700

----------------------------------------------------------------------
 bootstrap.js                      |   17 +++++---------
 package.json                      |    2 +-
 platforms.js                      |   23 +++++++++++++++++++-
 spec/cordova-cli/platform.spec.js |   18 ++++++++--------
 src/compile.js                    |   20 ++++++++--------
 src/emulate.js                    |   36 ++++++++++---------------------
 src/platform.js                   |   27 +++++++++--------------
 src/plugin.js                     |   21 ++++++------------
 src/plugin_parser.js              |    1 -
 src/prepare.js                    |   36 ++++++++++---------------------
 src/serve.js                      |   17 ++++----------
 src/util.js                       |    4 +-
 test_runner.js                    |    7 ++++-
 13 files changed, 102 insertions(+), 127 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/bootstrap.js
----------------------------------------------------------------------
diff --git a/bootstrap.js b/bootstrap.js
index 4750571..c222b9c 100644
--- a/bootstrap.js
+++ b/bootstrap.js
@@ -22,11 +22,6 @@
 
 var util      = require('./src/util'),
     create    = require('./src/create'),
-    a_parser  = require('./src/metadata/android_parser'),
-    b_parser  = require('./src/metadata/blackberry_parser'),
-    i_parser  = require('./src/metadata/ios_parser'),
-    wp7_parser= require('./src/metadata/wp7_parser'),
-    wp8_parser= require('./src/metadata/wp8_parser'),
     n         = require('ncallbacks'),
     path      = require('path'),
     fs        = require('fs'),
@@ -35,11 +30,11 @@ var util      = require('./src/util'),
 
 // Library requirements checkers
 var min_reqs = {
-    "android":a_parser.check_requirements,
-    "ios":i_parser.check_requirements,
-    "blackberry":b_parser.check_requirements,
-    "wp7":wp7_parser.check_requirements,
-    "wp8":wp7_parser.check_requirements
+    "android":platforms['android'].parser.check_requirements,
+    "ios":platforms['ios'].parser.check_requirements,
+    /*"blackberry":platforms['blackberry'].parser.check_requirements,*/
+    "wp7":platforms['wp7'].parser.check_requirements,
+    "wp8":platforms['wp8'].parser.check_requirements
 }
 
 // Create native projects using bin/create
@@ -69,7 +64,7 @@ var end = n(platforms.length, function() {
     }
 });
 
-platforms.forEach(function(platform) {
+Object.keys(platforms).forEach(function(platform) {
     min_reqs[platform](function(err) {
         if (err) {
             console.error('WARNING: Your system does not meet requirements to create ' + platform + ' projects. See error output below.');

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index e2ea2ff..8a14472 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
     "open": "0.0.3"
   },
   "devDependencies": {
-    "jasmine-node":"1.3.x"
+    "jasmine-node":"1.8.x"
   },
   "author": "Anis Kadri",
   "contributors": [

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/platforms.js
----------------------------------------------------------------------
diff --git a/platforms.js b/platforms.js
index c49c797..b2f7b0b 100644
--- a/platforms.js
+++ b/platforms.js
@@ -17,4 +17,25 @@
     under the License.
 */
 
-module.exports = ['ios', 'android', /*'blackberry',*/ 'wp7', 'wp8'];
+module.exports = {
+    'ios' : {
+        parser : require('./src/metadata/ios_parser'),
+        url    : 'https://git-wip-us.apache.org/repos/asf/cordova-ios.git'
+    }, 
+    'android' : {
+        parser : require('./src/metadata/android_parser'),
+        url    : 'https://git-wip-us.apache.org/repos/asf/cordova-ios.git'
+    }, 
+    'wp7' : {
+        parser : require('./src/metadata/wp7_parser'),
+        url    : 'https://git-wip-us.apache.org/repos/asf/cordova-wp7.git'
+    },
+    'wp8' : {
+        parser : require('./src/metadata/wp8_parser'),
+        url    : 'https://git-wip-us.apache.org/repos/asf/cordova-wp8.git'
+    }/*,
+    blackberry : {
+        parser : require('./metadata/blackberry_parser'),
+        url    : 'https://git-wip-us.apache.org/repos/asf/cordova-blackberry.git'
+    }*/
+};

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/spec/cordova-cli/platform.spec.js
----------------------------------------------------------------------
diff --git a/spec/cordova-cli/platform.spec.js b/spec/cordova-cli/platform.spec.js
index 5aab03d..2aa0177 100644
--- a/spec/cordova-cli/platform.spec.js
+++ b/spec/cordova-cli/platform.spec.js
@@ -27,6 +27,7 @@ var cordova = require('../../cordova'),
     util = require('../../src/util'),
     hooker = require('../../src/hooker'),
     platforms = require('../../platforms'),
+    platform  = require('../../src/platform'),
     tempDir = path.join(__dirname, '..', '..', 'temp');
     android_parser = require('../../src/metadata/android_parser'),
     ios_parser = require('../../src/metadata/ios_parser'),
@@ -104,16 +105,15 @@ describe('platform command', function() {
         });
 
         it('should handle multiple platforms', function() {
-            var arc = spyOn(android_parser, 'check_requirements');
-            var brc = spyOn(blackberry_parser, 'check_requirements');
+            spyOn(platform, 'supports').andCallFake(function(target, callback) {
+                    callback(null);
+            });
             var sh = spyOn(shell, 'exec');
-            cordova.platform('add', ['android', 'blackberry']);
-            arc.mostRecentCall.args[0](false);
-            brc.mostRecentCall.args[0](false);
-            var android_create = path.join('android', 'bin', 'create');
-            var bb_create      = path.join('blackberry', 'bin', 'create');
-            expect(sh.argsForCall[0][0]).toContain(android_create);
-            expect(sh.argsForCall[1][0]).toContain(bb_create);
+            cordova.platform('add', ['foo', 'bar']);
+            var foo_create = path.join('foo', 'bin', 'create');
+            var bar_create      = path.join('bar', 'bin', 'create');
+            expect(sh.argsForCall[0][0]).toContain(foo_create);
+            expect(sh.argsForCall[1][0]).toContain(bar_create);
         });
     });
 

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/compile.js
----------------------------------------------------------------------
diff --git a/src/compile.js b/src/compile.js
index 2521811..4cf3b85 100644
--- a/src/compile.js
+++ b/src/compile.js
@@ -45,7 +45,7 @@ function shell_out_to_debug(projectRoot, platform, callback) {
 }
 
 
-module.exports = function compile(platforms, callback) {
+module.exports = function compile(platformList, callback) {
     var projectRoot = cordova_util.isCordova(process.cwd());
 
     if (!projectRoot) {
@@ -55,22 +55,22 @@ module.exports = function compile(platforms, callback) {
     var xml = cordova_util.projectConfig(projectRoot);
     var cfg = new config_parser(xml);
 
-    if (arguments.length === 0 || (platforms instanceof Array && platforms.length === 0)) {
-        platforms = cordova_util.listPlatforms(projectRoot);
-    } else if (typeof platforms == 'string') platforms = [platforms];
-    else if (platforms instanceof Function && callback === undefined) {
-        callback = platforms;
-        platforms = cordova_util.listPlatforms(projectRoot);
+    if (arguments.length === 0 || (platformList instanceof Array && platformList.length === 0)) {
+        platformList = cordova_util.listPlatforms(projectRoot);
+    } else if (typeof platformList == 'string') platformList = [platformList];
+    else if (platformList instanceof Function && callback === undefined) {
+        callback = platformList;
+        platformList = cordova_util.listPlatforms(projectRoot);
     }
 
-    if (platforms.length === 0) throw new Error('No platforms added to this project. Please use `cordova platform add <platform>`.');
+    if (platformList.length === 0) throw new Error('No platforms added to this project. Please use `cordova platform add <platform>`.');
 
     var hooks = new hooker(projectRoot);
     if (!(hooks.fire('before_compile'))) {
         throw new Error('before_compile hooks exited with non-zero code. Aborting.');
     }
 
-    var end = n(platforms.length, function() {
+    var end = n(platformList.length, function() {
         if (!(hooks.fire('after_compile'))) {
             throw new Error('after_compile hooks exited with non-zero code. Aborting.');
         }
@@ -78,7 +78,7 @@ module.exports = function compile(platforms, callback) {
     });
 
     // Iterate over each added platform
-    platforms.forEach(function(platform) {
+    platformList.forEach(function(platform) {
         shell_out_to_debug(projectRoot, platform, end);
     });
 };

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/emulate.js
----------------------------------------------------------------------
diff --git a/src/emulate.js b/src/emulate.js
index ffa1319..4e5451a 100644
--- a/src/emulate.js
+++ b/src/emulate.js
@@ -20,11 +20,7 @@ var cordova_util      = require('./util'),
     path              = require('path'),
     shell             = require('shelljs'),
     config_parser     = require('./config_parser'),
-    android_parser    = require('./metadata/android_parser'),
-    ios_parser        = require('./metadata/ios_parser'),
-    blackberry_parser = require('./metadata/blackberry_parser'),
-    wp7_parser        = require('./metadata/wp7_parser'),
-    wp8_parser        = require('./metadata/wp8_parser'),
+    platforms         = require('../platforms'),
     platform          = require('./platform'),
     fs                = require('fs'),
     ls                = fs.readdirSync,
@@ -32,14 +28,6 @@ var cordova_util      = require('./util'),
     hooker            = require('../src/hooker'),
     util              = require('util');
 
-var parsers = {
-    "android":android_parser,
-    "ios":ios_parser,
-    "blackberry":blackberry_parser,
-    "wp7":wp7_parser,
-    "wp8":wp8_parser
-};
-
 function shell_out_to_emulate(root, platform, callback) {
     var cmd = '"' + path.join(root, 'platforms', platform, 'cordova', 'run') + '"';
     // TODO: PLATFORM LIBRARY INCONSISTENCY 
@@ -55,7 +43,7 @@ function shell_out_to_emulate(root, platform, callback) {
     });
 }
 
-module.exports = function emulate (platforms, callback) {
+module.exports = function emulate (platformList, callback) {
     var projectRoot = cordova_util.isCordova(process.cwd());
 
     if (!projectRoot) {
@@ -65,22 +53,22 @@ module.exports = function emulate (platforms, callback) {
     var xml = cordova_util.projectConfig(projectRoot);
     var cfg = new config_parser(xml);
 
-    if (arguments.length === 0 || (platforms instanceof Array && platforms.length === 0)) {
-        platforms = cordova_util.listPlatforms(projectRoot);
-    } else if (typeof platforms == 'string') platforms = [platforms];
-    else if (platforms instanceof Function && callback === undefined) {
-        callback = platforms;
-        platforms = cordova_util.listPlatforms(projectRoot);
+    if (arguments.length === 0 || (platformList instanceof Array && platformList.length === 0)) {
+        platformList = cordova_util.listPlatforms(projectRoot);
+    } else if (typeof platformList == 'string') platformList = [platformList];
+    else if (platformList instanceof Function && callback === undefined) {
+        callback = platformList;
+        platformList = cordova_util.listPlatforms(projectRoot);
     }
 
-    if (platforms.length === 0) throw new Error('No platforms added to this project. Please use `cordova platform add <platform>`.');
+    if (platformList.length === 0) throw new Error('No platforms added to this project. Please use `cordova platform add <platform>`.');
 
     var hooks = new hooker(projectRoot);
     if (!(hooks.fire('before_emulate'))) {
         throw new Error('before_emulate hooks exited with non-zero code. Aborting build.');
     }
 
-    var end = n(platforms.length, function() {
+    var end = n(platformList.length, function() {
         if (!(hooks.fire('after_emulate'))) {
             throw new Error('after_emulate hooks exited with non-zero code. Aborting.');
         }
@@ -88,9 +76,9 @@ module.exports = function emulate (platforms, callback) {
     });
 
     // Iterate over each added platform and shell out to debug command
-    platforms.forEach(function(platform) {
+    platformList.forEach(function(platform) {
         var platformPath = path.join(projectRoot, 'platforms', platform);
-        var parser = new parsers[platform](platformPath);
+        var parser = new platforms[platform].parser(platformPath);
         parser.update_project(cfg, function() {
             shell_out_to_emulate(projectRoot, platform, end);
         });

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/platform.js
----------------------------------------------------------------------
diff --git a/src/platform.js b/src/platform.js
index 5670f1b..38032bc 100644
--- a/src/platform.js
+++ b/src/platform.js
@@ -23,22 +23,10 @@ var config_parser     = require('./config_parser'),
     path              = require('path'),
     hooker            = require('./hooker'),
     n                 = require('ncallbacks'),
-    android_parser    = require('./metadata/android_parser'),
-    ios_parser        = require('./metadata/ios_parser'),
-    blackberry_parser = require('./metadata/blackberry_parser'),
-    wp7_parser        = require('./metadata/wp7_parser'),
-    wp8_parser        = require('./metadata/wp8_parser'),
+    platforms         = require('../platforms'),
     plugman           = require('plugman'),
     shell             = require('shelljs');
 
-var parsers = {
-    "android":android_parser,
-    "ios":ios_parser,
-    "blackberry":blackberry_parser,
-    "wp7":wp7_parser,
-    "wp8":wp8_parser
-};
-
 module.exports = function platform(command, targets, callback) {
     var projectRoot = cordova_util.isCordova(process.cwd());
 
@@ -103,7 +91,7 @@ module.exports = function platform(command, targets, callback) {
                                 throw new Error('An error occured during creation of ' + target + ' sub-project. ' + create_output);
                             }
 
-                            var parser = new parsers[target](output);
+                            var parser = new platforms[target].parser(output);
                             parser.update_project(cfg, function() {
                                 createOverrides(target);
                                 hooks.fire('after_platform_add');
@@ -154,10 +142,17 @@ module.exports.supports = function(name, callback) {
     if (!name) throw new Error('requires a platform name parameter');
     if (!callback) throw new Error('requires a callback parameter');
 
+    // check if platform exists
+    var platform = platforms[name];
+    if (!platform) {
+        callback(new Error(util.format('"%s" platform does not exist', name)));
+        return;
+    }
+
     // look up platform meta-data parser
-    var platformParser = parsers[name];
+    var platformParser = platforms[name].parser;
     if (!platformParser) {
-        callback(new Error(util.format('"%s" platform does not exist', name)));
+        callback(new Error(util.format('"%s" platform parser does not exist', name)));
         return;
     }
 

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/plugin.js
----------------------------------------------------------------------
diff --git a/src/plugin.js b/src/plugin.js
index d5371cf..6045840 100644
--- a/src/plugin.js
+++ b/src/plugin.js
@@ -22,20 +22,13 @@ var cordova_util  = require('./util'),
     shell         = require('shelljs'),
     path          = require('path'),
     shell         = require('shelljs'),
+    platforms     = require('../platforms'),
     config_parser = require('./config_parser'),
     hooker        = require('./hooker'),
     plugin_parser = require('./plugin_parser'),
     ls            = fs.readdirSync,
     plugman       = require('plugman');
 
-var parsers = {
-    "android": require('./metadata/android_parser'),
-    "ios": require('./metadata/ios_parser'),
-    "wp7": require('./metadata/wp7_parser'),
-    "wp8": require('./metadata/wp8_parser'),
-    "blackberry": require('./metadata/blackberry_parser')
-};
-
 module.exports = function plugin(command, targets, callback) {
     var projectRoot = cordova_util.isCordova(process.cwd());
 
@@ -49,7 +42,7 @@ module.exports = function plugin(command, targets, callback) {
     // Grab config info for the project
     var xml = cordova_util.projectConfig(projectRoot);
     var cfg = new config_parser(xml);
-    var platforms = cordova_util.listPlatforms(projectRoot);
+    var platformList = cordova_util.listPlatforms(projectRoot);
 
     // Massage plugin name(s) / path(s)
     var pluginPath, plugins;
@@ -85,9 +78,9 @@ module.exports = function plugin(command, targets, callback) {
                     }
 
                     // Iterate over all platforms in the project and install the plugin.
-                    platforms.forEach(function(platform) {
+                    platformList.forEach(function(platform) {
                         var platformRoot = path.join(projectRoot, 'platforms', platform);
-                        var parser = new parsers[platform](platformRoot);
+                        var parser = new platforms[platform].parser(platformRoot);
                         // TODO: unify use of blackberry in cli vs blackberry10 in plugman
                         plugman.install((platform=='blackberry'?'blackberry10':platform), platformRoot,
                                         path.basename(dir), pluginsDir, { www_dir: parser.staging_dir() });
@@ -100,7 +93,7 @@ module.exports = function plugin(command, targets, callback) {
             break;
         case 'rm':
         case 'remove':
-            if (platforms.length === 0) {
+            if (platformList.length === 0) {
                 throw new Error('You need at least one platform added to your app. Use `cordova platform add <platform>`.');
             }
             targets.forEach(function(target, index) {
@@ -112,7 +105,7 @@ module.exports = function plugin(command, targets, callback) {
                     // supported platforms and app platforms
                     var pluginXml = new plugin_parser(path.join(targetPath, 'plugin.xml'));
                     var intersection = pluginXml.platforms.filter(function(e) {
-                        if (platforms.indexOf(e) == -1) return false;
+                        if (platformList.indexOf(e) == -1) return false;
                         else return true;
                     });
 
@@ -122,7 +115,7 @@ module.exports = function plugin(command, targets, callback) {
                     // is not needed and we just --remove the plugin below.
                     intersection.forEach(function(platform) {
                         var platformRoot = path.join(projectRoot, 'platforms', platform);
-                        var parser = new parsers[platform](platformRoot);
+                        var parser = new platforms[platform].parser(platformRoot);
                         plugman.uninstall(platform, platformRoot, target, path.join(projectRoot, 'plugins'), { www_dir: parser.staging_dir() });
                     });
 

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/plugin_parser.js
----------------------------------------------------------------------
diff --git a/src/plugin_parser.js b/src/plugin_parser.js
index d104c9e..3b1c24b 100644
--- a/src/plugin_parser.js
+++ b/src/plugin_parser.js
@@ -18,7 +18,6 @@
     under the License.
 */
 var et = require('elementtree'),
-    platforms = require('./../platforms'),
     fs = require('fs');
 
 function plugin_parser(xmlPath) {

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/prepare.js
----------------------------------------------------------------------
diff --git a/src/prepare.js b/src/prepare.js
index b5c66ee..b08827e 100644
--- a/src/prepare.js
+++ b/src/prepare.js
@@ -19,30 +19,18 @@
 var cordova_util      = require('./util'),
     path              = require('path'),
     config_parser     = require('./config_parser'),
+    platforms         = require('../platforms'),
     platform          = require('./platform'),
     fs                = require('fs'),
     shell             = require('shelljs'),
     et                = require('elementtree'),
-    android_parser    = require('./metadata/android_parser'),
-    blackberry_parser = require('./metadata/blackberry_parser'),
-    ios_parser        = require('./metadata/ios_parser'),
-    wp7_parser        = require('./metadata/wp7_parser'),
-    wp8_parser        = require('./metadata/wp8_parser'),
     hooker            = require('./hooker'),
     n                 = require('ncallbacks'),
     prompt            = require('prompt'),
     plugman           = require('plugman'),
     util              = require('util');
 
-var parsers = {
-    "android":android_parser,
-    "ios":ios_parser,
-    "blackberry":blackberry_parser,
-    "wp7":wp7_parser,
-    "wp8":wp8_parser
-};
-
-module.exports = function prepare(platforms, callback) {
+module.exports = function prepare(platformList, callback) {
     var projectRoot = cordova_util.isCordova(process.cwd());
 
     if (!projectRoot) {
@@ -52,22 +40,22 @@ module.exports = function prepare(platforms, callback) {
     var xml = cordova_util.projectConfig(projectRoot);
     var cfg = new config_parser(xml);
 
-    if (arguments.length === 0 || (platforms instanceof Array && platforms.length === 0)) {
-        platforms = cordova_util.listPlatforms(projectRoot);
-    } else if (typeof platforms == 'string') platforms = [platforms];
-    else if (platforms instanceof Function && callback === undefined) {
-        callback = platforms;
-        platforms = cordova_util.listPlatforms(projectRoot);
+    if (arguments.length === 0 || (platformList instanceof Array && platformList.length === 0)) {
+        platformList = cordova_util.listPlatforms(projectRoot);
+    } else if (typeof platformList == 'string') platformList = [platformList];
+    else if (platformList instanceof Function && callback === undefined) {
+        callback = platformList;
+        platformList = cordova_util.listPlatforms(projectRoot);
     }
 
-    if (platforms.length === 0) throw new Error('No platforms added to this project. Please use `cordova platform add <platform>`.');
+    if (platformList.length === 0) throw new Error('No platforms added to this project. Please use `cordova platform add <platform>`.');
 
     var hooks = new hooker(projectRoot);
     if (!(hooks.fire('before_prepare'))) {
         throw new Error('before_prepare hooks exited with non-zero code. Aborting.');
     }
 
-    var end = n(platforms.length, function() {
+    var end = n(platformList.length, function() {
         if (!(hooks.fire('after_prepare'))) {
             throw new Error('after_prepare hooks exited with non-zero code. Aborting.');
         }
@@ -75,9 +63,9 @@ module.exports = function prepare(platforms, callback) {
     });
 
     // Iterate over each added platform
-    platforms.forEach(function(platform) {
+    platformList.forEach(function(platform) {
         var platformPath = path.join(projectRoot, 'platforms', platform);
-        var parser = new parsers[platform](platformPath);
+        var parser = new platforms[platform].parser(platformPath);
 
         parser.update_project(cfg, function() {
             // Call plugman --prepare for this platform. sets up js-modules appropriately.

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/serve.js
----------------------------------------------------------------------
diff --git a/src/serve.js b/src/serve.js
index e7eb42b..b5036de 100644
--- a/src/serve.js
+++ b/src/serve.js
@@ -20,20 +20,13 @@
 var cordova_util = require('./util'),
     path = require('path'),
     shell = require('shelljs'),
+    platforms     = require('../platforms'),
     config_parser = require('./config_parser'),
     fs = require('fs'),
     util = require('util'),
     http = require("http"),
     url = require("url");
 
-var parsers = {
-    'android': require('./metadata/android_parser'),
-    'ios': require('./metadata/ios_parser'),
-    'blackberry': require('./metadata/blackberry_parser'),
-    'wp7': require('./metadata/wp7_parser'),
-    'wp8': require('./metadata/wp8_parser')
-};
-
 function launch_server(www, platform_www, config_xml_path, port) {
     port = port || 8000;
 
@@ -107,12 +100,12 @@ module.exports.config = function (platform, port, callback) {
     var cfg = new config_parser(xml);
 
     // Retrieve the platforms.
-    var platforms = cordova_util.listPlatforms(projectRoot);
+    var platformList = cordova_util.listPlatforms(projectRoot);
     if (!platform) {
         throw new Error('You need to specify a platform.');
-    } else if (platforms.length == 0) {
+    } else if (platformList.length == 0) {
         throw new Error('No platforms to serve.');
-    } else if (platforms.filter(function(x) { return x == platform }).length == 0) {
+    } else if (platformList.filter(function(x) { return x == platform }).length == 0) {
         throw new Error(platform + ' is not an installed platform.');
     }
 
@@ -129,7 +122,7 @@ module.exports.config = function (platform, port, callback) {
     // Top-level www directory.
     result.paths.push(cordova_util.projectWww(projectRoot));
 
-    var parser = parsers[platform](path.join(projectRoot, 'platforms', platform));
+    var parser = platforms[platform].parser(path.join(projectRoot, 'platforms', platform));
 
     // Update the related platform project from the config
     parser.update_project(cfg, function() {

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/src/util.js
----------------------------------------------------------------------
diff --git a/src/util.js b/src/util.js
index 9b725a4..1ec7813 100644
--- a/src/util.js
+++ b/src/util.js
@@ -19,7 +19,6 @@
 */
 var fs         = require('fs'),
     path       = require('path'),
-    core_platforms = require('../platforms'),
     shell      = require('shelljs');
 
 var lib_path = path.join(__dirname, '..', 'lib')
@@ -59,8 +58,9 @@ module.exports = {
         });
     },
     listPlatforms:function(project_dir) {
+        var core_platforms = require('../platforms');
         return fs.readdirSync(path.join(project_dir, 'platforms')).filter(function(p) {
-            return core_platforms.indexOf(p) > -1;
+            return Object.keys(core_platforms).indexOf(p) > -1;
         });
     },
     // list the directories in the path, ignoring any files

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/4e3bef04/test_runner.js
----------------------------------------------------------------------
diff --git a/test_runner.js b/test_runner.js
index 1174b37..0250aa3 100644
--- a/test_runner.js
+++ b/test_runner.js
@@ -14,7 +14,7 @@ shell.rm('-rf', tmp);
 shell.mkdir('-p', path.join(tmp, 'platform-script'));
 shell.cp('-r', path.join(__dirname, 'spec', 'fixtures'), tmp);
 
-var end = n(platforms.length, function() {
+var end = n(Object.keys(platforms).length, function() {
     console.log('Testing core cli and the following platforms: ' + supported.join(', '));
     var cmd = 'node ' + path.join('node_modules', 'jasmine-node', 'bin', 'jasmine-node') + ' --color ' + tmp;
     specs.forEach(function(s) { 
@@ -23,10 +23,13 @@ var end = n(platforms.length, function() {
     });
     shell.cp('-r', path.join(__dirname, 'spec', 'cordova-cli'), tmp);
     shell.exec(cmd, {async:true, silent:false}, function(code, output) {
+        if(code > 0) {
+            console.log(output);
+        }
     });
 });
 console.log('Determining which platforms to run tests for...');
-platforms.forEach(function(p) {
+Object.keys(platforms).forEach(function(p) {
     platform.supports(p, function(e) {
         if (e) {
         } else {