You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2013/03/04 20:32:51 UTC
[76/91] [abbrv] git commit: Adds support for old plugin.xml spec
using for config.xml iOS projects.
Adds support for old plugin.xml spec using <plugins-plist> for config.xml iOS projects.
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/394d5ec8
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/394d5ec8
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/394d5ec8
Branch: refs/heads/master
Commit: 394d5ec8541314b94f4fdb6d8ff47bb508675c10
Parents: 52295fa
Author: Fil Maj <ma...@gmail.com>
Authored: Mon Feb 4 15:53:54 2013 -0800
Committer: Fil Maj <ma...@gmail.com>
Committed: Mon Feb 4 15:53:54 2013 -0800
----------------------------------------------------------------------
platforms/ios.js | 47 +++++++++++++++++++++++++------------
test/ios-install.js | 23 ++++++++++++++++++
test/ios-uninstall.js | 25 ++++++++++++++++++++
test/plugins/PGSQLitePlugin | 1 +
4 files changed, 81 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/platforms/ios.js
----------------------------------------------------------------------
diff --git a/platforms/ios.js b/platforms/ios.js
index 63e3eaf..2d0e473 100644
--- a/platforms/ios.js
+++ b/platforms/ios.js
@@ -224,32 +224,49 @@ function pluginInstalled(plugin_et, config_path) {
function updateConfigXml(action, config_path, plugin_et) {
var hosts = plugin_et.findall('./access'),
platformTag = plugin_et.find('./platform[@name="ios"]'), // FIXME: can probably do better than this
- plistEle = platformTag.find('./plugins-plist'), // TODO: use this for older that have plugins-plist
- configChanges = getConfigChanges(platformTag),
+ plistEle = platformTag.find('./plugins-plist'), // use this for older that have plugins-plist
pl,
external_hosts = [];
+
// edit configuration files
var xmlDoc = xml_helpers.parseElementtreeSync(config_path),
output;
- configChanges[path.basename(config_path)].forEach(function (configNode) {
- var selector = configNode.attrib["parent"],
- children = configNode.findall('*');
-
- if( action == 'install') {
- if (!xml_helpers.graftXML(xmlDoc, children, selector)) {
- throw new Error('failed to add children to ' + filename);
- }
+ if (plistEle) {
+ // if the plugin supports the old plugins-plist elemtn..
+ var name = plistEle.attrib.key;
+ var value = plistEle.attrib.string;
+ var pluginsEl = xmlDoc.find('plugins');
+ if ( action == 'install') {
+ var new_plugin = new et.Element('plugin');
+ new_plugin.attrib.name = name;
+ new_plugin.attrib.value = value;
+ pluginsEl.append(new_plugin);
} else {
- if (!xml_helpers.pruneXML(xmlDoc, children, selector)) {
- throw new Error('failed to remove children from' + filename);
- }
+ var culprit = pluginsEl.find("plugin[@name='"+name+"']");
+ pluginsEl.remove(0, culprit);
}
- });
+ } else {
+ var configChanges = getConfigChanges(platformTag);
+ var base_config_path = path.basename(config_path);
+ configChanges[base_config_path].forEach(function (configNode) {
+ var selector = configNode.attrib["parent"],
+ children = configNode.findall('*');
+
+ if( action == 'install') {
+ if (!xml_helpers.graftXML(xmlDoc, children, selector)) {
+ throw new Error('failed to add children to ' + filename);
+ }
+ } else {
+ if (!xml_helpers.pruneXML(xmlDoc, children, selector)) {
+ throw new Error('failed to remove children from' + filename);
+ }
+ }
+ });
+ }
output = xmlDoc.write({indent: 4});
fs.writeFileSync(config_path, output);
-
}
// updates plist file and/or config.xml
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/test/ios-install.js
----------------------------------------------------------------------
diff --git a/test/ios-install.js b/test/ios-install.js
index ff3c26d..1940c87 100644
--- a/test/ios-install.js
+++ b/test/ios-install.js
@@ -141,6 +141,29 @@ 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 dummy_plugin_dir = path.join(test_dir, 'plugins', 'PGSQLitePlugin')
+ var dummy_xml_path = path.join(dummy_plugin_dir, '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);
+
+ 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="PGSQLitePlugin"]' +
+ '[@value="PGSQLitePlugin"]';
+
+ test.ok(pluginsDoc.find(expected));
+
+ test.done();
+}
+
exports['should edit the pbxproj file'] = function (test) {
// run the platform-specific function
ios.handlePlugin('install', test_project_dir, test_plugin_dir, plugin_et);
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/test/ios-uninstall.js
----------------------------------------------------------------------
diff --git a/test/ios-uninstall.js b/test/ios-uninstall.js
index 7ec46ce..ee5483b 100644
--- a/test/ios-uninstall.js
+++ b/test/ios-uninstall.js
@@ -122,6 +122,31 @@ exports['should edit PhoneGap.plist'] = 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 dummy_plugin_dir = path.join(test_dir, 'plugins', 'PGSQLitePlugin')
+ var dummy_xml_path = path.join(dummy_plugin_dir, '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');
+ var pluginsTxt = fs.readFileSync(configXmlPath, 'utf-8'),
+ pluginsDoc = new et.ElementTree(et.XML(pluginsTxt)),
+ expected = 'plugins/plugin[@name="PGSQLitePlugin"]' +
+ '[@value="PGSQLitePlugin"]';
+
+ test.ok(!pluginsDoc.find(expected));
+
+ 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')
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/394d5ec8/test/plugins/PGSQLitePlugin
----------------------------------------------------------------------
diff --git a/test/plugins/PGSQLitePlugin b/test/plugins/PGSQLitePlugin
new file mode 160000
index 0000000..ac84255
--- /dev/null
+++ b/test/plugins/PGSQLitePlugin
@@ -0,0 +1 @@
+Subproject commit ac84255d517b3a8ea86caea1c06d4f836ab6f96d