You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2012/09/21 23:44:36 UTC

[2/14] git commit: adding ios project parser module and related specs. hooked in config name extraction -> interpolation into native project for ios.

adding ios project parser module and related specs. hooked in config name extraction -> interpolation into native project for ios.


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/a8379e66
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/tree/a8379e66
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/diff/a8379e66

Branch: refs/heads/cordova-client
Commit: a8379e667e680ff2441b967e120c0f77901910a9
Parents: 132a963
Author: Fil Maj <ma...@gmail.com>
Authored: Fri Sep 21 13:43:21 2012 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Fri Sep 21 13:43:21 2012 -0700

----------------------------------------------------------------------
 spec/metadata/ios_parser.spec.js |   52 +++++++++++++++++++++++++++++++++
 spec/platform.spec.js            |   26 ++++++++++++++++-
 src/metadata/ios_parser.js       |   12 ++++---
 src/platform.js                  |    3 ++
 4 files changed, 87 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/a8379e66/spec/metadata/ios_parser.spec.js
----------------------------------------------------------------------
diff --git a/spec/metadata/ios_parser.spec.js b/spec/metadata/ios_parser.spec.js
index e69de29..aeb95d0 100644
--- a/spec/metadata/ios_parser.spec.js
+++ b/spec/metadata/ios_parser.spec.js
@@ -0,0 +1,52 @@
+var ios_parser = require('../../src/metadata/ios_parser'),
+    config_parser = require('../../src/config_parser'),
+    path = require('path'),
+    fs = require('fs'),
+    cfg_path = path.join(__dirname, '..', 'fixtures', 'projects', 'test', 'www', 'config.xml'),
+    ios_path = path.join(__dirname, '..', 'fixtures', 'projects', 'native', 'ios'),
+    ios_pbx = path.join(ios_path, 'balls.xcodeproj', 'project.pbxproj');
+
+var cwd = process.cwd();
+
+var original_pbx = fs.readFileSync(ios_pbx, 'utf-8');
+
+describe('ios project parser', function() {
+    it('should throw an exception with a path that is not a native ios project', function() {
+        expect(function() {
+            var project = new ios_parser(cwd);
+        }).toThrow();
+    });
+    it('should accept a proper native ios project path as construction parameter', function() {
+        var project;
+        expect(function() {
+            project = new ios_parser(ios_path);
+        }).not.toThrow();
+        expect(project).toBeDefined();
+    });
+
+    describe('update_from_config method', function() {
+        var project, config;
+
+        beforeEach(function() {
+            project = new ios_parser(ios_path);
+            config = new config_parser(cfg_path);
+        });
+        afterEach(function() {
+            fs.writeFileSync(ios_pbx, original_pbx, 'utf-8');
+        });
+        it('should throw an exception if a non config_parser object is passed into it', function() {
+            expect(function() {
+                project.update_from_config({});
+            }).toThrow();
+        });
+        it('should update the application name properly', function() {
+            config.name('bond. james bond.');
+            project.update_from_config(config);
+
+            var pbx_contents = fs.readFileSync(ios_pbx, 'utf-8');
+
+            expect(pbx_contents.match(/PRODUCT_NAME\s*=\s*"bond. james bond."/)[0]).toBe('PRODUCT_NAME = "bond. james bond."');
+        });
+        it('should update the application package name properly');
+    });
+});

http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/a8379e66/spec/platform.spec.js
----------------------------------------------------------------------
diff --git a/spec/platform.spec.js b/spec/platform.spec.js
index 4e64731..a6980f5 100644
--- a/spec/platform.spec.js
+++ b/spec/platform.spec.js
@@ -105,7 +105,12 @@ describe('platform command', function() {
                 });
             });
             it('should use the correct application name based on what is in config.xml', function() {
-                var cfg = new config_parser(path.join(tempDir, 'www', 'config.xml'));
+                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() {
@@ -132,6 +137,25 @@ 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 futher inspection they appear to be loafers"/)).toBe(true);
+                });
+            });
         });
     });
     describe('remove', function() {

http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/a8379e66/src/metadata/ios_parser.js
----------------------------------------------------------------------
diff --git a/src/metadata/ios_parser.js b/src/metadata/ios_parser.js
index becf5fa..53a4dc6 100644
--- a/src/metadata/ios_parser.js
+++ b/src/metadata/ios_parser.js
@@ -1,19 +1,20 @@
 var fs   = require('fs'),
     path = require('path'),
-    xcode = require('node-xcode'),
+    xcode = require('xcode'),
     asyncblock = require('asyncblock'),
     config_parser = require('../config_parser');
 
 module.exports = function ios_parser(project) {
     try {
-        this.xcodeproj = fs.readdirSync(project).filter(function(e) { return e.match(/\.xcodeproj$/i); })[0];
+        var xcodeproj_dir = fs.readdirSync(project).filter(function(e) { return e.match(/\.xcodeproj$/i); })[0];
+        if (!xcodeproj_dir) throw 'The provided path is not a Cordova iOS project.';
+        this.xcodeproj = path.join(project, xcodeproj_dir);
     } catch(e) {
         throw 'The provided path is not a Cordova iOS project.';
     }
     this.path = project;
     this.pbxproj = path.join(this.xcodeproj, 'project.pbxproj');
 };
-
 module.exports.prototype = {
     update_from_config:function(config) {
         if (config instanceof config_parser) {
@@ -21,7 +22,8 @@ module.exports.prototype = {
 
         var name = config.name();
 
-        var proj = new xcode(this.pbxproj);
+        var proj = new xcode.project(this.pbxproj);
+        var parser = this;
         asyncblock(function(flow) {
             proj.parse(flow.set({
                 key:'parse',
@@ -32,7 +34,7 @@ module.exports.prototype = {
             if (parse.err) throw 'An error occured during parsing of project.pbxproj. Start weeping.';
             else {
                 proj.updateProductName(name);
-                fs.writeFileSync(this.pbxproj, proj.writeSync(), 'utf-8');
+                fs.writeFileSync(parser.pbxproj, proj.writeSync(), 'utf-8');
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-cordova-labs/blob/a8379e66/src/platform.js
----------------------------------------------------------------------
diff --git a/src/platform.js b/src/platform.js
index f9c06e3..e182f0b 100644
--- a/src/platform.js
+++ b/src/platform.js
@@ -7,6 +7,7 @@ var config_parser = require('./config_parser'),
     exec          = require('child_process').exec,
     path          = require('path'),
     android_parser= require('./metadata/android_parser'),
+    ios_parser    = require('./metadata/ios_parser'),
     asyncblock    = require('asyncblock');
 
 var repos = {
@@ -95,6 +96,8 @@ module.exports = function platform(command, target, callback) {
                                 android.update_from_config(cfg);
                                 break;
                             case 'ios':
+                                var ios = new ios_parser(output);
+                                ios.update_from_config(cfg);
                                 break;
                         }
                         // Add the platform to config.xml