platforms related to a project are no longer added to config.xml. instead tool looks at dir tree under ./platforms. simpler.
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/commit/57552608 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/tree/57552608 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/diff/57552608 Branch: refs/heads/cordova-client Commit: 57552608a687bcbfcb80012d362ab07c8a8b0e08 Parents: 31ac868 Author: Fil Maj <maj....@gmail.com> Authored: Sun Sep 30 23:35:55 2012 -0700 Committer: Fil Maj <maj....@gmail.com> Committed: Sun Sep 30 23:35:55 2012 -0700 ---------------------------------------------------------------------- spec/config_parser.spec.js | 58 ------------------------ spec/platform.spec.js | 94 +++++++++++---------------------------- src/config_parser.js | 24 ---------- src/platform.js | 30 ++++--------- 4 files changed, 35 insertions(+), 171 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/57552608/spec/config_parser.spec.js ---------------------------------------------------------------------- diff --git a/spec/config_parser.spec.js b/spec/config_parser.spec.js index f5e9fa4..4fa28a7 100644 --- a/spec/config_parser.spec.js +++ b/spec/config_parser.spec.js @@ -63,62 +63,4 @@ describe('config.xml parser', function () { expect(fs.readFileSync(xml, 'utf-8')).toMatch(/<name>one toke over the line<\/name>/); }); }); - - describe('platforms', function() { - describe('ls command', function() { - it('should return an empty array if there are no platforms specified in the document', function() { - var cfg = new config_parser(xml); - - expect(cfg.ls_platforms().length).toBe(0); - }); - it('should return a populated array if there are platforms specified in the document', function() { - var doc = new et.ElementTree(et.XML(fs.readFileSync(xml, 'utf-8'))); - var p = new et.Element('platform'); - p.attrib.name = 'android'; - doc.find('platforms').append(p); - fs.writeFileSync(xml, doc.write(), 'utf-8'); - - var cfg = new config_parser(xml); - expect(cfg.ls_platforms().length).toBe(1); - expect(cfg.ls_platforms()[0]).toEqual('android'); - }); - }); - - describe('add command', function() { - it('should add a platform element to the platforms element', function() { - var cfg = new config_parser(xml); - cfg.add_platform('android'); - - var doc = new et.ElementTree(et.XML(fs.readFileSync(xml, 'utf-8'))); - expect(doc.find('platforms').getchildren()[0].attrib.name).toEqual('android'); - }); - it('should ignore existing platforms', function() { - var cfg = new config_parser(xml); - cfg.add_platform('android'); - cfg.add_platform('android'); - - var doc = new et.ElementTree(et.XML(fs.readFileSync(xml, 'utf-8'))); - expect(doc.find('platforms').getchildren().length).toEqual(1); - }); - it('should ignore garbage platforms', function() { - var cfg = new config_parser(xml); - cfg.add_platform('bat country'); - - var doc = new et.ElementTree(et.XML(fs.readFileSync(xml, 'utf-8'))); - expect(doc.find('platforms').getchildren().length).toEqual(0); - }); - }); - - describe('remove command', function() { - it('should remove a platform element from the platforms element', function() { - var cfg = new config_parser(xml); - cfg.add_platform('ios'); - - cfg.remove_platform('ios'); - - var doc = new et.ElementTree(et.XML(fs.readFileSync(xml, 'utf-8'))); - expect(doc.find('platforms').getchildren().length).toEqual(0); - }); - }); - }); }); http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/57552608/spec/platform.spec.js ---------------------------------------------------------------------- diff --git a/spec/platform.spec.js b/spec/platform.spec.js index 4dc8c6b..a6fa8be 100644 --- a/spec/platform.spec.js +++ b/spec/platform.spec.js @@ -9,6 +9,11 @@ var cordova = require('../cordova'), platforms = require('../platforms'), tempDir = path.join(__dirname, '..', 'temp'); +// globals for crazy spy hax +android_parser = require('../src/metadata/android_parser'); +ios_parser = require('../src/metadata/ios_parser'); +blackberry_parser = require('../src/metadata/blackberry_parser'); + var cwd = process.cwd(); describe('platform command', function() { @@ -53,7 +58,7 @@ describe('platform command', function() { }); it('should list out no platforms for a fresh project', function() { - expect(cordova.platform('ls')).toEqual('No platforms added. Use `cordova platform add <platform>`.'); + expect(cordova.platform('ls').length).toEqual(0); }); it('should list out added platforms in a project', function() { @@ -65,12 +70,12 @@ describe('platform command', function() { }); waitsFor(function() { return cb.wasCalled; }, "create callback"); runs(function() { - expect(cordova.platform('ls')).toEqual('android'); + expect(cordova.platform('ls')[0]).toEqual('android'); cordova.platform('add', 'ios', cbtwo); }); waitsFor(function() { return cbtwo.wasCalled; }, "create callback number two"); runs(function() { - expect(cordova.platform('ls')).toEqual('android\nios'); + expect(cordova.platform('ls')[1]).toEqual('ios'); }); }); }); @@ -142,35 +147,13 @@ describe('platform command', function() { describe('android', function() { it('should add a basic android project', function() { - var cb = jasmine.createSpy(); - - runs(function() { - cordova.platform('add', 'android', cb); - }); - waitsFor(function() { return cb.wasCalled; }, "platform add android callback"); - runs(function() { - expect(fs.existsSync(path.join(tempDir, 'platforms', 'android', 'AndroidManifest.xml'))).toBe(true); - }); + cordova.platform('add', 'android'); + expect(fs.existsSync(path.join(tempDir, 'platforms', 'android', 'AndroidManifest.xml'))).toBe(true); }); - it('should use the correct application name based on what is in config.xml', function() { - var cfg_path = path.join(tempDir, 'www', 'config.xml'); - var orig_cfg_contents = fs.readFileSync(cfg_path, 'utf-8'); - this.after(function() { - fs.writeFileSync(cfg_path, orig_cfg_contents, 'utf-8'); - }); - var cfg = new config_parser(cfg_path); - var cb = jasmine.createSpy(); - - runs(function() { - cfg.name('chim chim'); - cordova.platform('add', 'android', cb); - }); - waitsFor(function() { return cb.wasCalled; }, "platform add android callback"); - runs(function() { - var strings = new et.ElementTree(et.XML(fs.readFileSync(path.join(tempDir, 'platforms', 'android', 'res', 'values', 'strings.xml'), 'utf-8'))); - var app_name = strings.find('string[@name="app_name"]').text; - expect(app_name).toBe('chim chim'); - }); + it('should call android_parser\'s update_project', function() { + var s = spyOn(android_parser.prototype, 'update_project'); + cordova.platform('add', 'android'); + expect(s).toHaveBeenCalled(); }); }); describe('ios', function() { @@ -185,56 +168,30 @@ describe('platform command', function() { expect(fs.existsSync(path.join(tempDir, 'platforms', 'ios', 'www'))).toBe(true); }); }); - it('should use the correct application name based on what is in config.xml', function() { - var cfg_path = path.join(tempDir, 'www', 'config.xml'); - var orig_cfg_contents = fs.readFileSync(cfg_path, 'utf-8'); - this.after(function() { - fs.writeFileSync(cfg_path, orig_cfg_contents, 'utf-8'); - }); - var cfg = new config_parser(cfg_path); - var cb = jasmine.createSpy(); - - runs(function() { - cfg.name('upon closer inspection they appear to be loafers'); - cordova.platform('add', 'ios', cb); - }); - waitsFor(function() { return cb.wasCalled; }, "platform add ios callback"); - runs(function() { - var pbxproj = fs.readFileSync(path.join(tempDir, 'platforms', 'ios', 'upon_closer_inspection_they_appear_to_be_loafers.xcodeproj', 'project.pbxproj'), 'utf-8'); - expect(pbxproj.match(/PRODUCT_NAME\s*=\s*"upon closer inspection they appear to be loafers"/)[0]).toBe('PRODUCT_NAME = "upon closer inspection they appear to be loafers"'); - }); + it('should call ios_parser\'s update_project', function() { + var s = spyOn(ios_parser.prototype, 'update_project'); + cordova.platform('add', 'ios'); + expect(s).toHaveBeenCalled(); }); }); describe('blackberry-10', function() { it('should add a basic blackberry project', function() { var cb = jasmine.createSpy(); + var s = spyOn(require('prompt'), 'get').andReturn(true); runs(function() { cordova.platform('add', 'blackberry-10', cb); + s.mostRecentCall.args[1](null, {}); // fake out prompt }); waitsFor(function() { return cb.wasCalled; }, "platform add blackberry"); runs(function() { expect(fs.existsSync(path.join(tempDir, 'platforms', 'blackberry-10', 'www'))).toBe(true); }); }); - it('should use the correct application name based on what is in config.xml', function() { - var cfg_path = path.join(tempDir, 'www', 'config.xml'); - var orig_cfg_contents = fs.readFileSync(cfg_path, 'utf-8'); - this.after(function() { - fs.writeFileSync(cfg_path, orig_cfg_contents, 'utf-8'); - }); - var cfg = new config_parser(cfg_path); - var cb = jasmine.createSpy(); - - runs(function() { - cfg.name('upon closer inspection they appear to be loafers'); - cordova.platform('add', 'blackberry-10', cb); - }); - waitsFor(function() { return cb.wasCalled; }, "platform add blackberry callback"); - runs(function() { - var bb_cfg = new config_parser(path.join(tempDir, 'platforms', 'blackberry-10', 'www', 'config.xml')); - expect(bb_cfg.name()).toBe(cfg.name()); - }); + it('should call blackberry_parser\'s update_project', function() { + var s = spyOn(blackberry_parser.prototype, 'update_project'); + cordova.platform('add', 'blackberry-10'); + expect(s).toHaveBeenCalled(); }); }); }); @@ -262,7 +219,8 @@ describe('platform command', function() { waitsFor(function() { return cb.wasCalled; }, "android create callback"); runs(function() { cordova.platform('remove', 'android'); - expect(cordova.platform('ls')).toEqual('ios'); + expect(cordova.platform('ls').length).toEqual(1); + expect(cordova.platform('ls')[0]).toEqual('ios'); }); }); }); http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/57552608/src/config_parser.js ---------------------------------------------------------------------- diff --git a/src/config_parser.js b/src/config_parser.js index aa743dc..59ddce0 100644 --- a/src/config_parser.js +++ b/src/config_parser.js @@ -1,5 +1,4 @@ var et = require('elementtree'), - platforms = require('./../platforms'), fs = require('fs'); function config_parser(path) { @@ -8,29 +7,6 @@ function config_parser(path) { } config_parser.prototype = { - ls_platforms:function() { - return this.doc.find('platforms').getchildren().map(function(p) { - return p.attrib.name; - }); - }, - add_platform:function(platform) { - if ((platforms.indexOf(platform) == -1) || this.doc.find('platforms/platform[@name="' + platform + '"]')) return; - else { - var p = new et.Element('platform'); - p.attrib.name = platform; - this.doc.find('platforms').append(p); - this.update(); - } - }, - remove_platform:function(platform) { - if ((platforms.indexOf(platform) == -1) || !(this.doc.find('platforms/platform[@name="' + platform + '"]'))) return; - else { - var psEl = this.doc.find('platforms'); - var pEl = psEl.find('platform[@name="' + platform + '"]'); - psEl.remove(null, pEl); - this.update(); - } - }, packageName:function(id) { if (id) { this.doc.getroot().attrib.id = id; http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/57552608/src/platform.js ---------------------------------------------------------------------- diff --git a/src/platform.js b/src/platform.js index 2d349ee..652a2ba 100644 --- a/src/platform.js +++ b/src/platform.js @@ -3,7 +3,6 @@ var config_parser = require('./config_parser'), util = require('util'), fs = require('fs'), path = require('path'), - shell = require('shelljs'), android_parser= require('./metadata/android_parser'), blackberry_parser= require('./metadata/blackberry_parser'), ios_parser = require('./metadata/ios_parser'), @@ -22,12 +21,7 @@ module.exports = function platform(command, target, callback) { switch(command) { case 'ls': - var platforms = cfg.ls_platforms(); - if (platforms.length) { - return platforms.join('\n'); - } else { - return 'No platforms added. Use `cordova platform add <platform>`.'; - } + return fs.readdirSync(path.join(projectRoot, 'platforms')); break; case 'add': var output = path.join(projectRoot, 'platforms', target); @@ -43,42 +37,36 @@ module.exports = function platform(command, target, callback) { if (fs.existsSync(output)) { throw new Error('Platform "' + target + '" already exists' ); } - // directory doesn't exist, run platform's create script + + // Run platform's create script var bin = path.join(__dirname, '..', 'lib', cordova_util.underlyingLib(target), 'bin', 'create'); var pkg = cfg.packageName().replace(/[^\w.]/g,'_'); var name = cfg.name().replace(/\W/g,'_'); var command = util.format('"%s" "%s" "%s" "%s"', bin, output, (cordova_util.underlyingLib(target)=='blackberry'?name:pkg), name); + var create = shell.exec(command, {silent:true}); if (create.code > 0) { throw new Error('An error occured during creation of ' + target + ' sub-project. ' + create.output); } - cfg.add_platform(target); - // TODO: this is fugly + switch(cordova_util.underlyingLib(target)) { case 'android': var android = new android_parser(output); - android.update_from_config(cfg); + android.update_project(cfg); if (callback) callback(); break; case 'ios': var ios = new ios_parser(output); - ios.update_from_config(cfg, callback); + ios.update_project(cfg, callback); break; case 'blackberry': var bb = new blackberry_parser(output); - bb.update_from_config(cfg); - if (callback) callback(); + bb.update_project(cfg, callback); break; } break; case 'remove': - // Remove the platform from the config.xml - cfg.remove_platform(target); - - // Remove the Cordova project for the platform. - try { - shell.rm('-rf', path.join(projectRoot, 'platforms', target)); - } catch(e) {} + shell.rm('-rf', path.join(projectRoot, 'platforms', target)); break; default: throw ('Unrecognized command "' + command + '". Use either `add`, `remove`, or `ls`.');