cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bra...@apache.org
Subject git commit: Fully refactored tests.
Date Fri, 19 Apr 2013 15:00:47 GMT
Updated Branches:
  refs/heads/future 8aee02d9c -> e104a21e1


Fully refactored tests.


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

Branch: refs/heads/future
Commit: e104a21e13d946e2f49e6052656ed63fc5de8a9e
Parents: 8aee02d
Author: Braden Shepherdson <braden.shepherdson@gmail.com>
Authored: Fri Apr 19 10:59:27 2013 -0400
Committer: Braden Shepherdson <braden.shepherdson@gmail.com>
Committed: Fri Apr 19 11:00:31 2013 -0400

----------------------------------------------------------------------
 test/android-one-uninstall.js            |    2 +
 test/android-two-uninstall.js            |    2 +
 test/blackberry-uninstall.js             |   38 +++--
 test/ios-config-xml-install.js           |  199 +++++++++----------------
 test/ios-config-xml-uninstall.js         |  138 ++++++++----------
 test/plugins/ChildBrowser/plugin-old.xml |   83 ----------
 test/plugins/FaultyPlugin/plugin.xml     |   12 +-
 test/plugman.js                          |   57 +++-----
 test/prepare.js                          |   51 -------
 test/remote-test.js                      |   29 +++-
 util/plugins.js                          |   41 +++--
 11 files changed, 232 insertions(+), 420 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/android-one-uninstall.js
----------------------------------------------------------------------
diff --git a/test/android-one-uninstall.js b/test/android-one-uninstall.js
index a763f7a..435c42b 100644
--- a/test/android-one-uninstall.js
+++ b/test/android-one-uninstall.js
@@ -91,6 +91,7 @@ exports['should not remove common package directories when two plugins share a p
     test.done();
 }
 
+/* TODO: Re-enable this test when the prepare-after-uninstall question is sorted.
 exports['should remove the directory'] = function (test) {
     var assetPath = path.join(test_dir, 'projects', 'android_one', 'assets', 'www', 'childbrowser');
 
@@ -107,6 +108,7 @@ exports['should remove the directory'] = function (test) {
     test.ok(!fs.existsSync(assetPath));
     test.done();
 }
+*/
 
 exports['should remove the src file'] = function (test) {
     var javaPath = path.join(test_dir, 'projects', 'android_one', 'src', 'com', 'phonegap', 'plugins', 'childBrowser', 'ChildBrowser.java');

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/android-two-uninstall.js
----------------------------------------------------------------------
diff --git a/test/android-two-uninstall.js b/test/android-two-uninstall.js
index 48f9e39..d975a7b 100644
--- a/test/android-two-uninstall.js
+++ b/test/android-two-uninstall.js
@@ -73,6 +73,7 @@ exports['should remove the js file'] = function (test) {
     test.done();
 }
 
+/* TODO: Re-enable this test when the prepare-after-uninstall question is sorted.
 exports['should remove the directory'] = function (test) {
     var assetPath = path.join(test_dir, 'projects', 'android_two', 'assets', 'www', 'childbrowser');
 
@@ -89,6 +90,7 @@ exports['should remove the directory'] = function (test) {
     test.ok(!fs.existsSync(assetPath));
     test.done();
 }
+*/
 
 exports['should remove the src file'] = function (test) {
     var javaPath = path.join(test_dir, 'projects', 'android_two', 'src', 'com', 'phonegap', 'plugins', 'childBrowser', 'ChildBrowser.java');

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/blackberry-uninstall.js
----------------------------------------------------------------------
diff --git a/test/blackberry-uninstall.js b/test/blackberry-uninstall.js
index 01c246b..3f76642 100644
--- a/test/blackberry-uninstall.js
+++ b/test/blackberry-uninstall.js
@@ -28,6 +28,9 @@ var fs = require('fs')
   , test_plugin_dir = path.join(test_dir, 'plugins', 'cordova.echo')
   , xml_path     = path.join(test_dir, 'plugins', 'cordova.echo', 'plugin.xml')
   , xml_text, plugin_et
+  , plugman = require('../plugman')
+  , plugins_dir = path.join(test_dir, 'plugins')
+  , silent = require('../util/test-helpers').suppressOutput
   , srcDir = path.resolve(test_project_dir, 'ext-qnx/cordova.echo');
   
 exports.setUp = function(callback) {
@@ -54,21 +57,21 @@ exports.tearDown = function(callback) {
 
 exports['should remove cordova echo plugin'] = function (test) {
     // run the platform-specific function
-    blackberry.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    blackberry.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
+    silent(function() {
+        plugman.handlePlugin('install', 'blackberry', test_project_dir, 'cordova.echo', plugins_dir);
+        plugman.handlePlugin('uninstall', 'blackberry', test_project_dir, 'cordova.echo', plugins_dir);
+    });
 
     test.done();
 }
 
 
 exports['should remove the js file'] = function (test) {
+    silent(function() {
+        plugman.handlePlugin('install', 'blackberry', test_project_dir, 'DummyPlugin', plugins_dir);
+        plugman.handlePlugin('uninstall', 'blackberry', test_project_dir, 'DummyPlugin', plugins_dir);
+    });
 
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'DummyPlugin')
-    var dummy_xml_path = path.join(test_dir, 'plugins', 'DummyPlugin', 'plugin.xml')
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-
-    blackberry.handlePlugin('install', test_project_dir, dummy_plugin_dir, dummy_plugin_et);
-    blackberry.handlePlugin('uninstall', test_project_dir, dummy_plugin_dir, dummy_plugin_et);
     var jsPath = path.join(test_dir, 'projects', 'blackberry', 'www', 'dummyplugin.js');
     test.ok(!fs.existsSync(jsPath))
     test.done();
@@ -77,8 +80,10 @@ exports['should remove the js file'] = function (test) {
 
 exports['should remove the source files'] = function (test) {
     // run the platform-specific function
-    blackberry.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    blackberry.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
+    silent(function() {
+        plugman.handlePlugin('install', 'blackberry', test_project_dir, 'cordova.echo', plugins_dir);
+        plugman.handlePlugin('uninstall', 'blackberry', test_project_dir, 'cordova.echo', plugins_dir);
+    });
 
     test.ok(!fs.existsSync(srcDir + '/index.js'))
     test.ok(!fs.existsSync(srcDir + '/client.js'))
@@ -88,18 +93,19 @@ exports['should remove the source files'] = function (test) {
     test.done();
 }
 
-exports['should edit config.xml'] = function (test) {   
+exports['should edit config.xml'] = function (test) {
     // run the platform-specific function
-    blackberry.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    
-    blackberry.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
-    
+    silent(function() {
+        plugman.handlePlugin('install', 'blackberry', test_project_dir, 'cordova.echo', plugins_dir);
+        plugman.handlePlugin('uninstall', 'blackberry', test_project_dir, 'cordova.echo', plugins_dir);
+    });
+
     var configXmlPath = path.join(test_project_dir, 'config.xml');
     var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
         pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
         expected = 'feature[@id="cordova.echo"]';
+
     test.ok(!pluginsDoc.find(expected));
-    
     test.done();
 }
 

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/ios-config-xml-install.js
----------------------------------------------------------------------
diff --git a/test/ios-config-xml-install.js b/test/ios-config-xml-install.js
index 5eef196..2c25fbc 100644
--- a/test/ios-config-xml-install.js
+++ b/test/ios-config-xml-install.js
@@ -31,10 +31,14 @@ var fs = require('fs')
   , xml_path     = path.join(test_dir, 'plugins', 'ChildBrowser', 'plugin.xml')
   , xml_text, plugin_et
 
+  , plugman = require('../plugman')
+  , plugins_dir = path.join(test_dir, 'plugins')
+  , silent = require('../util/test-helpers').suppressOutput
+
   //, assetsDir = path.resolve(config.projectPath, 'www')
-  , srcDir = path.resolve(test_project_dir, 'SampleApp/Plugins')
+  , srcDir = path.resolve(test_project_dir, 'SampleApp', 'Plugins')
   , wwwDir = path.resolve(test_project_dir, 'www')
-  , resDir = path.resolve(test_project_dir, 'SampleApp/Resources');
+  , resDir = path.resolve(test_project_dir, 'SampleApp', 'Resources');
 
 exports.setUp = function(callback) {
     shell.mkdir('-p', test_dir);
@@ -60,26 +64,19 @@ exports.tearDown = function(callback) {
 
 exports['should install webless plugin'] = function (test) {
     // setting up a DummyPlugin
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios', 'www');
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'WeblessPlugin')
-    var dummy_xml_path = path.join(test_dir, 'plugins', 'WeblessPlugin', 'plugin.xml')
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-
-    ios.handlePlugin('install', test_project_dir, dummy_plugin_dir, dummy_plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'WeblessPlugin', plugins_dir);
+    });
+
     test.done();
 }
 
 exports['should move the js file'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
     var jsPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www', 'plugins', 'com.phonegap.plugins.childbrowser', 'www', 'childbrowser.js');
-    
-    // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
+
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
     test.ok(fs.existsSync(jsPath));
     test.ok(fs.statSync(jsPath).isFile());
@@ -87,78 +84,60 @@ exports['should move the js file'] = function (test) {
 }
 
 exports['should move the source files'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    var preserveDirPath = path.join(srcDir, 'src', 'ios');
-    
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
-    test.ok(fs.existsSync(srcDir + '/ChildBrowserCommand.m'))
-    test.ok(fs.existsSync(srcDir + '/ChildBrowserViewController.m'))
-    test.ok(fs.existsSync(preserveDirPath + '/preserveDirs/PreserveDirsTest.m'))
-    test.ok(fs.existsSync(srcDir + '/targetDir/TargetDirTest.m'))
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
+    test.ok(fs.existsSync(path.join(srcDir, 'ChildBrowserCommand.m')));
+    test.ok(fs.existsSync(path.join(srcDir, 'ChildBrowserViewController.m')));
+    test.ok(fs.existsSync(path.join(srcDir, 'src', 'ios', 'preserveDirs', 'PreserveDirsTest.m')));
+    test.ok(fs.existsSync(path.join(srcDir, 'targetDir', 'TargetDirTest.m')));
     test.done();
 }
 
 exports['should move the header files'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    var preserveDirPath = path.join(srcDir, 'src', 'ios');
-
-    // run the platform-specific function    
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
-    test.ok(fs.statSync(srcDir + '/ChildBrowserCommand.h'));
-    test.ok(fs.statSync(srcDir + '/ChildBrowserViewController.h'));
-    test.ok(fs.statSync(preserveDirPath + '/preserveDirs/PreserveDirsTest.h'));
-    test.ok(fs.statSync(srcDir + '/targetDir/TargetDirTest.h'));
+    // run the platform-specific function
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
+    test.ok(fs.existsSync(path.join(srcDir, 'ChildBrowserCommand.h')));
+    test.ok(fs.existsSync(path.join(srcDir, 'ChildBrowserViewController.h')));
+    test.ok(fs.existsSync(path.join(srcDir, 'src', 'ios', 'preserveDirs', 'PreserveDirsTest.h')));
+    test.ok(fs.existsSync(path.join(srcDir, 'targetDir', 'TargetDirTest.h')));
     test.done();
 }
 
 
 exports['should move the xib file'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
+    // run the platform-specific function
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
-    // run the platform-specific function    
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
-    test.ok(fs.statSync(resDir + '/ChildBrowserViewController.xib'));
+    test.ok(fs.statSync(path.join(resDir, 'ChildBrowserViewController.xib')));
     test.done();
 }
 
 exports['should move the bundle'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
-    var bundle = fs.statSync(resDir + '/ChildBrowser.bundle');
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
+    var bundle = fs.statSync(path.join(resDir, 'ChildBrowser.bundle'));
 
     test.ok(bundle.isDirectory());
     test.done();
 }
 
 exports['should edit config.xml'] = function (test) {
-    // setting up WebNotification (with config.xml) 
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'WebNotifications')
-    var dummy_xml_path = path.join(test_dir, 'plugins', 'WebNotifications', 'plugin.xml')
-    
-    // overriding some params
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, dummy_plugin_dir, dummy_plugin_et);
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-        
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'WebNotifications', plugins_dir);
+    });
+
     var configXmlPath = path.join(test_project_dir, 'SampleApp', 'config.xml');
     var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
         pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
@@ -172,43 +151,13 @@ exports['should edit config.xml'] = function (test) {
     test.done();
 }
 
-exports['should edit config.xml even when using old <plugins-plist> approach'] = function (test) {
-    // setting up PGSQLitePlugin (with config.xml) 
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'ChildBrowser')
-    var dummy_xml_path = path.join(dummy_plugin_dir, 'plugin-old.xml')
-    
-    // overriding some params
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-
-    // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, dummy_plugin_dir, dummy_plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
-    var configXmlPath = path.join(test_project_dir, 'SampleApp', 'config.xml');
-    var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
-        pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
-        expected = 'plugins/plugin[@name="com.phonegap.plugins.childbrowser"]' +
-                    '[@value="ChildBrowserCommand"]';
-
-    test.ok(pluginsDoc.find(expected));
-    test.equal(pluginsDoc.findall("access").length, 3, "/access");
-    test.equal(pluginsDoc.findall("access")[1].attrib["origin"], "build.phonegap.com")
-    test.equal(pluginsDoc.findall("access")[2].attrib["origin"], "12345.s3.amazonaws.com")
-
-    test.done();
-}
-
 exports['should edit the pbxproj file'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
-    var projPath = test_project_dir + '/SampleApp.xcodeproj/project.pbxproj';
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
+    var projPath = path.join(test_project_dir, 'SampleApp.xcodeproj', 'project.pbxproj');
 
     obj = xcode.project(projPath).parseSync();
     var fileRefSection = obj.hash.project.objects['PBXFileReference'],
@@ -220,14 +169,12 @@ exports['should edit the pbxproj file'] = function (test) {
 }
 
 exports['should add the framework references to the pbxproj file'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    
-    // run the platform-specific function    
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
-    
-    var projPath = test_project_dir + '/SampleApp.xcodeproj/project.pbxproj',
+    // run the platform-specific function
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
+    var projPath = path.join(test_project_dir, 'SampleApp.xcodeproj', 'project.pbxproj'),
         projContents = fs.readFileSync(projPath, 'utf8'),
         projLines = projContents.split("\n"),
 		weak_linked = "settings = {ATTRIBUTES = (Weak, ); };",
@@ -235,7 +182,7 @@ exports['should add the framework references to the pbxproj file'] = function (t
 
     references = projLines.filter(function (line) {
         return !!(line.match("libsqlite3.dylib"));
-    })
+    });
 
     // should be four libsqlite3 reference lines added
     // pretty low-rent test eh
@@ -245,17 +192,12 @@ exports['should add the framework references to the pbxproj file'] = function (t
 }
 
 exports['should add the framework references with weak option to the pbxproj file'] = function (test) {
-    var pluginsPath = path.join(test_dir, 'plugins');
-    var wwwPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www');
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'ChildBrowser')
-    var dummy_xml_path = path.join(test_dir, 'plugins', 'ChildBrowser', 'plugin.xml')
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-    
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, dummy_plugin_dir, dummy_plugin_et, { APP_ID: 12345 });
-    plugin_loader.handlePrepare(test_project_dir, pluginsPath, wwwPath, 'ios');
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
-    var projPath = test_project_dir + '/SampleApp.xcodeproj/project.pbxproj',
+    var projPath = path.join(test_project_dir, 'SampleApp.xcodeproj', 'project.pbxproj'),
         projContents = fs.readFileSync(projPath, 'utf8'),
         projLines = projContents.split("\n"),
 		weak_linked = "settings = {ATTRIBUTES = (Weak, ); };",
@@ -263,34 +205,39 @@ exports['should add the framework references with weak option to the pbxproj fil
 
     weak_references = projLines.filter(function (line) {
         return !!(line.match("social.framework"));
-    })
+    });
 
     non_weak_references = projLines.filter(function (line) {
         return !!(line.match("music.framework"));
-    })
+    });
 
     // should be four libsqlite3 reference lines added
     // pretty low-rent test eh
     test.equal(weak_references.length, 4);
     test.ok(weak_references[0].indexOf(weak_linked) != -1);
-    
+
     test.equal(non_weak_references.length, 4);
     test.ok(non_weak_references[0].indexOf(weak_linked) == -1);
-    
+
     test.done();
 }
 
 exports['should not install a plugin that is already installed'] = function (test) {
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
-    test.throws(function(){ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et); }, 
+    test.throws(function(){ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et); },
                 /already installed/
                );
     test.done();
 }
 
 exports['should skip collision check when installation is forced'] = function (test) {
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et, { APP_ID: 12345 });
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
     // deleting files because only presence in config.xml determines installation
     shell.rm('-rf', srcDir + '/*');
     shell.rm('-rf', resDir + '/*');

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/ios-config-xml-uninstall.js
----------------------------------------------------------------------
diff --git a/test/ios-config-xml-uninstall.js b/test/ios-config-xml-uninstall.js
index 40187fd..da8d061 100644
--- a/test/ios-config-xml-uninstall.js
+++ b/test/ios-config-xml-uninstall.js
@@ -32,9 +32,13 @@ var fs = require('fs')
   , xml_path     = path.join(test_dir, 'plugins', 'ChildBrowser', 'plugin.xml')
   , xml_text, plugin_et
 
+  , plugman = require('../plugman')
+  , plugins_dir = path.join(test_dir, 'plugins')
+  , silent = require('../util/test-helpers').suppressOutput
+
   //, assetsDir = path.resolve(config.projectPath, 'www')
-  , srcDir = path.resolve(test_project_dir, 'SampleApp/Plugins')
-  , resDir = path.resolve(test_project_dir, 'SampleApp/Resources');
+  , srcDir = path.resolve(test_project_dir, 'SampleApp', 'Plugins')
+  , resDir = path.resolve(test_project_dir, 'SampleApp', 'Resources');
 
 exports.setUp = function(callback) {
     shell.mkdir('-p', test_dir);
@@ -59,111 +63,84 @@ exports.tearDown = function(callback) {
 }
 
 exports['should remove webless plugin'] = function (test) {
-    
-    // setting up a DummyPlugin
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'WeblessPlugin')
-    var dummy_xml_path = path.join(test_dir, 'plugins', 'WeblessPlugin', 'plugin.xml')
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-
-    ios.handlePlugin('install', test_project_dir, dummy_plugin_dir, dummy_plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, dummy_plugin_dir, dummy_plugin_et);
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'WeblessPlugin', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'WeblessPlugin', plugins_dir);
+    });
 
     test.done();
 }
 
 exports['should remove the js file'] = function (test) {
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
-    var jsPath = path.join(test_dir, 'projects', 'ios-config-xml', 'www', 'childbrowser.js');
+    var jsPath = path.join(test_dir, 'projects', 'ios-config-xml', 'plugins', 'com.phonegap.plugins.childbrowser', 'www', 'childbrowser.js');
     test.ok(!fs.existsSync(jsPath))
     test.done();
 }
 
 exports['should remove the source files'] = function (test) {
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
-
-    test.ok(!fs.existsSync(srcDir + '/ChildBrowserCommand.m'))
-    test.ok(!fs.existsSync(srcDir + '/ChildBrowserViewController.m'))
-    test.ok(!fs.existsSync(srcDir + '/preserveDirs/PreserveDirsTest.m'))
-    test.ok(!fs.existsSync(srcDir + '/targetDir/TargetDirTest.m'))
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
+    test.ok(!fs.existsSync(path.join(srcDir, 'ChildBrowserCommand.m')));
+    test.ok(!fs.existsSync(path.join(srcDir, 'ChildBrowserViewController.m')));
+    test.ok(!fs.existsSync(path.join(srcDir, 'src', 'ios', 'preserveDirs', 'PreserveDirsTest.m')));
+    test.ok(!fs.existsSync(path.join(srcDir, 'targetDir', 'TargetDirTest.m')));
     test.done();
 }
 
 exports['should remove the header files'] = function (test) {
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
-
-    test.ok(!fs.existsSync(srcDir + '/ChildBrowserCommand.h'))
-    test.ok(!fs.existsSync(srcDir + '/ChildBrowserViewController.h'))
-    test.ok(!fs.existsSync(srcDir + '/preserveDirs/PreserveDirsTest.h'))
-    test.ok(!fs.existsSync(srcDir + '/targetDir/TargetDirTest.h'))
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
+
+    test.ok(!fs.existsSync(path.join(srcDir, 'ChildBrowserCommand.h')));
+    test.ok(!fs.existsSync(path.join(srcDir, 'ChildBrowserViewController.h')));
+    test.ok(!fs.existsSync(path.join(srcDir, 'src', 'ios', 'preserveDirs', 'PreserveDirsTest.h')));
+    test.ok(!fs.existsSync(path.join(srcDir, 'targetDir', 'TargetDirTest.h')));
     test.done();
 }
 
 exports['should remove the xib file'] = function (test) {
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
-    test.ok(!fs.existsSync(resDir + '/ChildBrowserViewController.xib'))
+    test.ok(!fs.existsSync(path.join(resDir, 'ChildBrowserViewController.xib')));
     test.done();
 }
 
 exports['should remove the bundle'] = function (test) {
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
-
-    test.ok(!fs.existsSync(resDir + '/ChildBrowser.bundle'))
-    test.done();
-}
-
-exports['should edit config.xml even when using old <plugins-plist> approach'] = function (test) {
-    // setting up PGSQLitePlugin (with config.xml) 
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'ChildBrowser')
-    var dummy_xml_path = path.join(dummy_plugin_dir, 'plugin-old.xml')
-    
-    // overriding some params
-    var project_dir = path.join(test_dir, 'projects', 'ios-config-xml')
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-
-    // run the platform-specific function
-    ios.handlePlugin('install', project_dir, dummy_plugin_dir, dummy_plugin_et);
-    
-    ios.handlePlugin('uninstall', project_dir, dummy_plugin_dir, dummy_plugin_et);
-    
-    var configXmlPath = path.join(project_dir, 'SampleApp', 'config.xml');
-    var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
-        pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
-        expected = 'plugins/plugin[@name="com.phonegap.plugins.childbrowser"]' +
-                    '[@value="ChildBrowserCommand"]';
-
-    test.ok(!pluginsDoc.find(expected));
-	test.equal(pluginsDoc.findall("access").length, 1, "/access");
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
+    test.ok(!fs.existsSync(path.join(resDir, 'ChildBrowser.bundle')));
     test.done();
 }
 
 exports['should edit config.xml'] = function (test) {
-    // setting up WebNotification (with config.xml) 
-    var dummy_plugin_dir = path.join(test_dir, 'plugins', 'WebNotifications')
-    var dummy_xml_path = path.join(test_dir, 'plugins', 'WebNotifications', 'plugin.xml')
-    
-    // overriding some params
-    var project_dir = path.join(test_dir, 'projects', 'ios-config-xml')
-    var dummy_plugin_et  = new et.ElementTree(et.XML(fs.readFileSync(dummy_xml_path, 'utf-8')));
-
     // run the platform-specific function
-    ios.handlePlugin('install', project_dir, dummy_plugin_dir, dummy_plugin_et);
-    
-    ios.handlePlugin('uninstall', project_dir, dummy_plugin_dir, dummy_plugin_et);
-    
-    var configXmlPath = path.join(project_dir, 'SampleApp', 'config.xml');
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'WebNotifications', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'WebNotifications', plugins_dir);
+    });
+
+    var configXmlPath = path.join(test_project_dir, 'SampleApp', 'config.xml');
     var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
         pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
         expected = 'plugins/plugin[@name="WebNotifications"]' +
@@ -177,10 +154,12 @@ exports['should edit config.xml'] = function (test) {
 
 exports['should edit the pbxproj file'] = function (test) {
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
-    var projPath = test_project_dir + '/SampleApp.xcodeproj/project.pbxproj';
+    var projPath = path.join(test_project_dir, 'SampleApp.xcodeproj', 'project.pbxproj');
 
     obj = xcode.project(projPath).parseSync();
     var fileRefSection = obj.hash.project.objects['PBXFileReference'],
@@ -193,11 +172,12 @@ exports['should edit the pbxproj file'] = function (test) {
 
 exports['should remove the framework references from the pbxproj file'] = function (test) {
     // run the platform-specific function
-    ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
-    ios.handlePlugin('uninstall', test_project_dir, test_plugin_dir, plugin_et);
+    silent(function() {
+        plugman.handlePlugin('install', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+        plugman.handlePlugin('uninstall', 'ios', test_project_dir, 'ChildBrowser', plugins_dir);
+    });
 
-    
-    var projPath = test_project_dir + '/SampleApp.xcodeproj/project.pbxproj',
+    var projPath = path.join(test_project_dir, 'SampleApp.xcodeproj', 'project.pbxproj'),
         projContents = fs.readFileSync(projPath, 'utf8'),
         projLines = projContents.split("\n"),
         references;

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/plugins/ChildBrowser/plugin-old.xml
----------------------------------------------------------------------
diff --git a/test/plugins/ChildBrowser/plugin-old.xml b/test/plugins/ChildBrowser/plugin-old.xml
deleted file mode 100644
index 67a3a50..0000000
--- a/test/plugins/ChildBrowser/plugin-old.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Copyright 2013 Anis Kadri
-
- 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.
-
--->
-
-<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    id="com.phonegap.plugins.childbrowser"
-    version="0.6.0">
-
-    <name>Child Browser</name>
-
-    <asset src="www/childbrowser.js" target="childbrowser.js" />
-    <asset src="www/childbrowser" target="childbrowser" />
-
-    <access origin="build.phonegap.com" />
-    <access origin="$APP_ID.s3.amazonaws.com" />
-
-    <!-- android -->
-    <platform name="android">
-        <config-file target="AndroidManifest.xml" parent="/manifest/application">
-            <activity android:name="com.phonegap.plugins.childBrowser.ChildBrowser"
-                      android:label="@string/app_name">
-                <intent-filter>
-                </intent-filter>
-            </activity>
-        </config-file>
-
-        <!-- CDV < 2.0 -->
-        <config-file target="res/xml/plugins.xml" parent="/plugins">
-            <plugin name="ChildBrowser"
-                value="com.phonegap.plugins.childBrowser.ChildBrowser"/>
-        </config-file>
-
-        <!-- CDV 2.0+ (for now) -->
-        <config-file target="res/xml/config.xml" parent="/cordova/plugins">
-            <plugin name="ChildBrowser"
-                value="com.phonegap.plugins.childBrowser.ChildBrowser"/>
-        </config-file>
-
-        <source-file src="ChildBrowser.java"
-                target-dir="src/com/phonegap/plugins/childBrowser" />
-    </platform>
-
-    <!-- ios -->
-    <platform name="ios">
-        <plugins-plist key="com.phonegap.plugins.childbrowser"
-            string="ChildBrowserCommand" />
-
-        <resource-file src="src/ios/ChildBrowser.bundle" />
-        <resource-file src="src/ios/ChildBrowserViewController.xib" />
-
-        <header-file src="src/ios/ChildBrowserCommand.h" />
-        <header-file src="src/ios/ChildBrowserViewController.h" />
-        <header-file src="src/ios/preserveDirs/PreserveDirsTest.h" preserve-dirs="true" />
-        <header-file src="src/ios/TargetDirTest.h" target-dir="targetDir"/>
-
-        <source-file src="src/ios/ChildBrowserCommand.m" />
-        <source-file src="src/ios/ChildBrowserViewController.m" />
-        <source-file src="src/ios/preserveDirs/PreserveDirsTest.m" preserve-dirs="true" />
-        <header-file src="src/ios/TargetDirTest.m" target-dir="targetDir"/>
-
-        <!-- framework for testing (not actual dependency of ChildBrowser -->
-        <framework src="libsqlite3.dylib" />
-        <framework src="social.framework" weak="true" />
-        <framework src="music.framework" weak="rabbit" />
-    </platform>
-</plugin>

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/plugins/FaultyPlugin/plugin.xml
----------------------------------------------------------------------
diff --git a/test/plugins/FaultyPlugin/plugin.xml b/test/plugins/FaultyPlugin/plugin.xml
index abdd53a..26473d2 100644
--- a/test/plugins/FaultyPlugin/plugin.xml
+++ b/test/plugins/FaultyPlugin/plugin.xml
@@ -50,7 +50,7 @@
                 value="com.phonegap.plugins.faultyplugin.FaultyPlugin"/>
         </config-file>
 
-        <source-file src="FaultyPlugin.java"
+        <source-file src="src/android/FaultyPlugin.java"
                 target-dir="src/com/phonegap/plugins/faultyplugin" />
     </platform>
 
@@ -62,12 +62,12 @@
             <plugin name="FaultyPlugin"
                 value="FaultyPlugin"/>
         </config-file>
-            
-        <header-file src="FaultyPlugin.h" />
-        <source-file src="FaultyPlugin.m" />
+
+        <header-file src="src/ios/FaultyPlugin.h" />
+        <source-file src="src/ios/FaultyPlugin.m" />
         <!-- these files don't exist -->
-        <header-file src="FaultyPluginCommand.h" />
-        <source-file src="FaultyPluginCommand.m" />
+        <header-file src="src/ios/FaultyPluginCommand.h" />
+        <source-file src="src/ios/FaultyPluginCommand.m" />
 
     </platform>
 </plugin>

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/plugman.js
----------------------------------------------------------------------
diff --git a/test/plugman.js b/test/plugman.js
index fc9d3f8..d88f743 100644
--- a/test/plugman.js
+++ b/test/plugman.js
@@ -23,7 +23,7 @@ var fs = require('fs')
   , shell = require('shelljs')
   , util = require('util')
   , plugin_loader = require('../util/plugin_loader')
-  , plugman_exe = path.join(__dirname, '..', 'plugman.js')
+  , plugman_exe = path.join(__dirname, '..', 'main.js')
   , test_dir = path.join(osenv.tmpdir(), 'test_plugman');
 
 exports.setUp = function(callback) {
@@ -113,77 +113,56 @@ exports['should revert ios install on failures'] = function (test) {
     // copy the ios test project to a temp directory
     shell.cp('-r', path.join(__dirname, 'projects', 'ios-config-xml'), test_dir);
 
-    // copy the ios test plugin to a temp directory
-    shell.cp('-r', path.join(__dirname, 'plugins', 'FaultyPlugin'), test_dir);
+    var plugins_dir = path.join(__dirname, 'plugins');
+
+    command = util.format('%s %s --platform ios --project "%s" --plugin "%s" --plugins_dir "%s"', shell.which('node'), plugman_exe, test_project_dir, 'FaultyPlugin', plugins_dir);
 
-    command = util.format('%s %s --platform ios --project %s --plugin %s', shell.which('node'),
-                                                                           plugman_exe, 
-                                                                           test_project_dir, 
-                                                                           test_plugin_dir
-                         ); 
     var ret = shell.exec(command, options);
     test.equal(0, ret.code);
     //console.log(ret.output);
-    test.notEqual("plugin installed\n", ret.output);
-    
-    test.ok(!fs.existsSync(srcDir + '/FaultyPlugin.m'))
-    test.ok(!fs.existsSync(srcDir + '/FaultyPlugin.h'));
-    
+    test.ok(!/plugin installed/.exec(ret.output));
+
+    test.ok(!fs.existsSync(path.join(srcDir, 'FaultyPlugin.m')));
+    test.ok(!fs.existsSync(path.join(srcDir, 'FaultyPlugin.h')));
+
     test.done();
 }
 
 exports['should install and uninstall android plugin'] = function (test) {
   var test_project_dir = path.join(test_dir, 'android_two'),
-      test_plugin_dir = path.join(test_dir, 'ChildBrowser'),
       options = {silent: true},
       command;
 
     // copy the ios test project to a temp directory
     shell.cp('-r', path.join(__dirname, 'projects', 'android_two'), test_dir);
 
-    // copy the ios test plugin to a temp directory
-    shell.cp('-r', path.join(__dirname, 'plugins', 'ChildBrowser'), test_dir);
+    command = util.format('%s %s --platform android --project "%s" --plugin "%s" --plugins_dir "%s"', shell.which('node'), plugman_exe, test_project_dir, 'ChildBrowser', path.join(__dirname, 'plugins'));
 
-    command = util.format('%s %s --platform android --project %s --plugin %s', shell.which('node'),
-                                                                           plugman_exe, 
-                                                                           test_project_dir, 
-                                                                           test_plugin_dir
-                         ); 
-    var ret = shell.exec(command, options); 
+    var ret = shell.exec(command, options);
     test.equal(0, ret.code);
     test.ok(ret.output.match(/plugin installed/));
-    
-    command = util.format('%s %s --remove --platform android --project %s --plugin %s', shell.which('node'),
-                                                                                    plugman_exe, 
-                                                                                    test_project_dir, 
-                                                                                    test_plugin_dir
-                         ); 
-    var ret = shell.exec(command, options); 
+
+    command = util.format('%s %s --uninstall --platform android --project "%s" --plugin "%s" --plugins_dir "%s"', shell.which('node'), plugman_exe, test_project_dir, 'ChildBrowser', path.join(__dirname, 'plugins'));
+
+    var ret = shell.exec(command, options);
     test.equal(0, ret.code);
     test.ok(ret.output.match(/plugin uninstalled/));
-   
+
     test.done();
 }
 
 
 exports['should display additional install info'] = function (test) {
   var test_project_dir = path.join(test_dir, 'android_two'),
-      test_plugin_dir = path.join(test_dir, 'ChildBrowser'),
       options = {silent: true},
       command;
 
     // copy the ios test project to a temp directory
     shell.cp('-r', path.join(__dirname, 'projects', 'android_two'), test_dir);
 
-    // copy the ios test plugin to a temp directory
-    shell.cp('-r', path.join(__dirname, 'plugins', 'ChildBrowser'), test_dir);
+    command = util.format('%s %s --platform android --project "%s" --plugin "%s" --plugins_dir "%s"', shell.which('node'), plugman_exe, test_project_dir, 'ChildBrowser', path.join(__dirname, 'plugins'));
 
-    command = util.format('%s %s --platform android --project %s --plugin %s', shell.which('node'),
-                                                                           plugman_exe, 
-                                                                           test_project_dir, 
-                                                                           test_plugin_dir
-                         ); 
-    var ret = shell.exec(command, options); 
+    var ret = shell.exec(command, options);
     test.equal(0, ret.code);
     test.ok(ret.output.match(/Please make sure you read this because it is very important to complete the installation of your plugin/));
     test.ok(ret.output.match(/plugin installed/));

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/prepare.js
----------------------------------------------------------------------
diff --git a/test/prepare.js b/test/prepare.js
deleted file mode 100644
index 30e0ec8..0000000
--- a/test/prepare.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *
- * Copyright 2013 Braden Shepherdson
- *
- * 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 path = require('path'),
-    shell = require('shelljs'),
-    osenv = require('osenv'),
-    et = require('elementtree'),
-    test_dir = path.join(osenv.tmpdir(), 'test_plugman'),
-    test_project_dir = path.join(test_dir, 'projects', 'android_one'),
-    test_plugin_dir = path.join(test_dir, 'plugins', 'ChildBrowser'),
-    xml_path = path.join(test_plugin_dir, 'plugin.xml'),
-    plugin_loader = require(path.join(__dirname, '..', 'util', 'plugin_loader'));
-
-exports.setUp = function(callback) {
-    shell.mkdir('-p', test_dir);
-    
-    // copy the ios test project to a temp directory
-    shell.cp('-r', path.join(__dirname, 'projects'), test_dir);
-
-    // copy the ios test plugin to a temp directory
-    shell.cp('-r', path.join(__dirname, 'plugins'), test_dir);
-
-    // parse the plugin.xml into an elementtree object
-    xml_text   = fs.readFileSync(xml_path, 'utf-8')
-    plugin_et  = new et.ElementTree(et.XML(xml_text));
-
-    callback();
-}
-
-exports.tearDown = function(callback) {
-    // remove the temp files (projects and plugins)
-    shell.rm('-rf', test_dir);
-    callback();
-}
-

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/test/remote-test.js
----------------------------------------------------------------------
diff --git a/test/remote-test.js b/test/remote-test.js
index c206fcd..17d549a 100644
--- a/test/remote-test.js
+++ b/test/remote-test.js
@@ -18,6 +18,8 @@
 */
 
 var path = require('path'),
+    temp_dir = require('osenv').tmpdir(),
+    shell = require('shelljs'),
     plugins = require(path.join(__dirname, '..', 'util', 'plugins'));
 
 exports['should get plugin information from a remote source'] = function(test) {
@@ -26,7 +28,10 @@ exports['should get plugin information from a remote source'] = function(test) {
         test.equal('ChildBrowser', plugin.name);
         test.equal('ChildBrowser plugin', plugin.description);
         test.done();
-    }, function() { test.ok(false); });
+    }, function() {
+        test.ok(false);
+        test.done();
+    });
 }
 
 exports['should list all plugins from a remote source'] = function(test) {
@@ -34,12 +39,28 @@ exports['should list all plugins from a remote source'] = function(test) {
         test.ok(plugins != undefined);
         test.ok(plugins.length > 0);
         test.done();
-    }, function() { test.ok(false); });
+    }, function() {
+        test.ok(false);
+        test.done();
+    });
 }
 
 exports['should clone plugin git repository'] = function(test) {
+    var plugins_dir = path.join(temp_dir, 'plugins');
+    shell.mkdir('-p', plugins_dir);
+
     plugins.getPluginInfo('ChildBrowser', function(plugin) {
-        test.ok(plugins.clonePluginGitRepo(plugin.url) != undefined);
+        var url;
+        try {
+            url = plugins.clonePluginGitRepo(plugin.url, plugins_dir);
+            test.ok(url != undefined);
+        } catch(e) {
+            test.ok(false, 'Error while cloning plugin git repo: ' + e.message);
+        }
+        shell.rm('-rf', plugins_dir);
+        test.done();
+    }, function() {
+        test.ok(false);
         test.done();
-    }, function() { test.ok(false); });
+    });
 }

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/e104a21e/util/plugins.js
----------------------------------------------------------------------
diff --git a/util/plugins.js b/util/plugins.js
index 7dacf9e..7c8dbb6 100644
--- a/util/plugins.js
+++ b/util/plugins.js
@@ -28,25 +28,34 @@ var http = require('http'),
 
 // Fetches plugin information from remote server
 exports.getPluginInfo = function(plugin_name, success, error) {
+    var responded = false;
     http.get(remote.url + util.format(remote.query_path, plugin_name), function(res) {
-      var str = '';
-      res.on('data', function (chunk) {
-        str += chunk;
-      });
-      res.on('end', function () {
-          var response, plugin_info;
-          if((response = JSON.parse(str)).rows.length == 1) {
-            plugin_info = response.rows[0].value;
-            success(plugin_info);
-          } else {
-            error("Could not find information on "+plugin_name+" plugin");
-          }
-      });
-      
+        var str = '';
+        res.on('data', function (chunk) {
+            str += chunk;
+        });
+        res.on('end', function () {
+            responded = true;
+            var response, plugin_info;
+            if((response = JSON.parse(str)).rows.length == 1) {
+                plugin_info = response.rows[0].value;
+                success(plugin_info);
+            } else {
+                error("Could not find information on "+plugin_name+" plugin");
+            }
+        });
+
     }).on('error', function(e) {
-      console.log("Got error: " + e.message);
-      error(e.message);
+        console.log("Got error: " + e.message);
+        error(e.message);
     });
+
+    setTimeout(function() {
+        if (!responded) {
+            console.log('timed out');
+            error('timed out')
+        }
+    }, 3000);
 }
 
 exports.listAllPlugins = function(success, error) {


Mime
View raw message