[CB-4036] - fixed up the default engines and added some 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/d1db04ae Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/d1db04ae Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/d1db04ae Branch: refs/heads/master Commit: d1db04ae822b37e47a99560bb96e0a068cfb5f27 Parents: 9d6b99e Author: Tim Kim <[email protected]> Authored: Fri Aug 23 15:26:06 2013 -0700 Committer: Tim Kim <[email protected]> Committed: Mon Aug 26 16:47:17 2013 -0700 ---------------------------------------------------------------------- spec/install.spec.js | 8 ++- spec/plugins/EnginePluginAndroid/plugin.xml | 1 + src/install.js | 8 +-- src/util/default-engines.js | 74 ++++++++++++------------ 4 files changed, 50 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/d1db04ae/spec/install.spec.js ---------------------------------------------------------------------- diff --git a/spec/install.spec.js b/spec/install.spec.js index 22740ef..97e8f1d 100644 --- a/spec/install.spec.js +++ b/spec/install.spec.js @@ -74,12 +74,18 @@ describe('install', function() { install('android', temp, 'engineplugin', plugins_dir, {}); expect(spy).toHaveBeenCalledWith('3.0.0-rc1','>=2.3.0'); }); - it('should check specific platform version if specified', function() { + it('should check specific platform version over cordova version if specified', function() { var spy = spyOn(semver, 'satisfies').andReturn(true); exec.andReturn({code:0,output:"3.1.0"}); install('android', temp, 'enginepluginAndroid', plugins_dir, {}); expect(spy).toHaveBeenCalledWith('3.1.0','>=3.1.0'); }); + it('should check platform sdk version if specified', function() { + var spy = spyOn(semver, 'satisfies').andReturn(true); + exec.andReturn({code:0,output:"4.3"}); + install('android', temp, 'enginepluginAndroid', plugins_dir, {}); + expect(spy).toHaveBeenCalledWith('4.3','>=4.3'); + }); it('should check plugmans version', function() { var spy = spyOn(semver, 'satisfies').andReturn(true); install('android', temp, 'engineplugin', plugins_dir, {}); http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/d1db04ae/spec/plugins/EnginePluginAndroid/plugin.xml ---------------------------------------------------------------------- diff --git a/spec/plugins/EnginePluginAndroid/plugin.xml b/spec/plugins/EnginePluginAndroid/plugin.xml index 894bd02..7ada4ae 100644 --- a/spec/plugins/EnginePluginAndroid/plugin.xml +++ b/spec/plugins/EnginePluginAndroid/plugin.xml @@ -26,6 +26,7 @@ <engines> <engine name="cordova" version=">=3.0.0"/> <engine name="cordova-android" version=">=3.1.0"/> + <engine name="android-sdk" version=">=4.3"/> </engines> </plugin> http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/d1db04ae/src/install.js ---------------------------------------------------------------------- diff --git a/src/install.js b/src/install.js index cfaead9..bb3a2e2 100644 --- a/src/install.js +++ b/src/install.js @@ -65,7 +65,7 @@ function possiblyFetch(actions, platform, project_dir, id, plugins_dir, options, } } -function checkMinimumReq(engines, callback) { +function checkEngines(engines, callback) { engines.forEach(function(engine){ if(semver.satisfies(engine.currentVersion, engine.minVersion || engine.currentVersion == null)){ // engine ok! @@ -123,7 +123,7 @@ function callEngineScripts(engines) { // return only the engines we care about/need function getEngines(pluginElement, platform, project_dir){ var engines = pluginElement.findall('engines/engine'); - var defaultEngines = require('./util/default-engines'); + var defaultEngines = require('./util/default-engines')(project_dir); var uncheckedEngines = []; var tempEngine, cordovaEngineIndex, cordovaPlatformEngineIndex, theName; // load in known defaults and update when necessary @@ -132,7 +132,7 @@ function getEngines(pluginElement, platform, project_dir){ if(defaultEngines[theName] && (defaultEngines[theName].platform === platform || defaultEngines[theName].platform === '*')){ defaultEngines[theName].minVersion = defaultEngines[theName].minVersion ? defaultEngines[theName].minVersion : engine.attrib["version"]; defaultEngines[theName].currentVersion = defaultEngines[theName].currentVersion ? defaultEngines[theName].currentVersion : null; - defaultEngines[theName].scriptSrc = defaultEngines[theName].scriptSrc ? path.join(project_dir, defaultEngines[theName].scriptSrc) : null; + defaultEngines[theName].scriptSrc = defaultEngines[theName].scriptSrc ? defaultEngines[theName].scriptSrc : null; defaultEngines[theName].name = theName; // set the indices so we can pop the cordova engine when needed @@ -186,7 +186,7 @@ function runInstall(actions, platform, project_dir, plugin_dir, plugins_dir, opt var theEngines = getEngines(plugin_et, platform, project_dir); theEngines = callEngineScripts(theEngines); - checkMinimumReq(theEngines, callback); + checkEngines(theEngines, callback); // checking preferences, if certain variables are not provided, we should throw. prefs = plugin_et.findall('./preference') || []; http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/d1db04ae/src/util/default-engines.js ---------------------------------------------------------------------- diff --git a/src/util/default-engines.js b/src/util/default-engines.js index 0ab9b4f..cdfdfde 100644 --- a/src/util/default-engines.js +++ b/src/util/default-engines.js @@ -4,40 +4,42 @@ var path = require('path'); // it'd be nice to just point to this file and get the correct path // since these scripts should ideally be accessed from the cordova project folder -module.exports = { - 'cordova': - { 'platform':'*', 'scriptSrc': path.join('cordova','version') }, - // no location needed for plugman as this should be the calling process - 'cordova-plugman': - { 'platform':'*', 'currentVersion': process.version }, - 'cordova-android': - { 'platform':'android', 'scriptSrc': path.join('cordova','version') }, - 'cordova-ios': - { 'platform':'ios', 'scriptSrc': path.join('cordova','version') }, - 'cordova-blackberry10': - { 'platform':'blackberry10', 'scriptSrc': path.join('cordova','version') }, - 'cordova-wp7': - { 'platform':'wp7', 'scriptSrc': path.join('cordova','version') }, - 'cordova-wp8': - { 'platform':'wp8', 'scriptSrc': path.join('cordova','version') }, - 'cordova-windows8': - { 'platform':'windows8', 'scriptSrc': path.join('cordova','version') }, - - // ideally these sdk versions will be known via a script - // that calls the sdk's version command - the idea would be that - // these version scripts output all in the same way and parse - // the appropriate blob of info returned from the sdk version command - 'apple-xcode' : - { 'platform':'ios', 'scriptSrc': '' }, - 'apple-ios' : - { 'platform':'ios', 'scriptSrc': '' }, - 'blackberry-webworks' : - // use path to sdk/Framework/lib/webworks-info.js - // will export as version number - // currently though, all versions of webworks sdk should be good to go - // so this is technically *not* needed right now - { 'platform':'blackberry10', 'scriptSrc': '' }, - 'android-sdk' : - // will have to parse string output from android list targets - { 'platform':'android', 'scriptSrc': '' } +module.exports = function(project_dir){ + return { + 'cordova': + { 'platform':'*', 'scriptSrc': path.join(project_dir,'cordova','version') }, + // no location needed for plugman as this should be the calling process + 'cordova-plugman': + { 'platform':'*', 'currentVersion': process.version }, + 'cordova-android': + { 'platform':'android', 'scriptSrc': path.join(project_dir,'cordova','version') }, + 'cordova-ios': + { 'platform':'ios', 'scriptSrc': path.join(project_dir,'cordova','version') }, + 'cordova-blackberry10': + { 'platform':'blackberry10', 'scriptSrc': path.join(project_dir,'cordova','version') }, + 'cordova-wp7': + { 'platform':'wp7', 'scriptSrc': path.join(project_dir,'cordova','version') }, + 'cordova-wp8': + { 'platform':'wp8', 'scriptSrc': path.join(project_dir,'cordova','version') }, + 'cordova-windows8': + { 'platform':'windows8', 'scriptSrc': path.join(project_dir,'cordova','version') }, + + // ideally these sdk versions will be known via a script + // that calls the sdk's version command - the idea would be that + // these version scripts output all in the same way and parse + // the appropriate blob of info returned from the sdk version command + 'apple-xcode' : + { 'platform':'ios', 'scriptSrc': '' }, + 'apple-ios' : + { 'platform':'ios', 'scriptSrc': '' }, + 'blackberry-webworks' : + // use path to sdk/Framework/lib/webworks-info.js + // will export as version number + // currently though, all versions of webworks sdk should be good to go + // so this is technically *not* needed right now + { 'platform':'blackberry10', 'scriptSrc': '' }, + 'android-sdk' : + // will have to parse string output from android list targets + { 'platform':'android', 'scriptSrc': '' } + } };
