You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ia...@apache.org on 2014/06/24 20:06:19 UTC

[1/3] android commit: CB-5971: Fix package / project validation

Repository: cordova-android
Updated Branches:
  refs/heads/master 297f862cc -> 435245612


CB-5971: Fix package / project validation


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

Branch: refs/heads/master
Commit: 4352456129bfa8a8a6bbf4d38fb40d9876b67ec4
Parents: bb141a7
Author: Ian Clelland <ic...@chromium.org>
Authored: Tue Jun 24 14:05:03 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Tue Jun 24 14:05:56 2014 -0400

----------------------------------------------------------------------
 bin/lib/create.js | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/43524561/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index a31604a..b2490f2 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -113,18 +113,13 @@ function copyScripts(projectPath) {
  */
 function validatePackageName(package_name) {
     //Make the package conform to Java package types
-    if (!/[a-zA-Z0-9_]+\.[a-zA-Z0-9_](.[a-zA-Z0-9_])*/.test(package_name)) {
-        return Q.reject('Package name must look like: com.company.Name');
-    }
-
     //Enforce underscore limitation
-    if (/[_]+[a-zA-Z0-9_]*/.test(package_name)) {
-        return Q.reject("Package name can't begin with an underscore");
+    if (!/^[a-zA-Z]+(\.[a-zA-Z0-9][a-zA-Z0-9_]*)+$/.test(package_name)) {
+        return Q.reject('Package name must look like: com.company.Name');
     }
 
     //Class is a reserved word
-    if(/[C|c]+lass+[\s|\.]/.test(package_name) && !/[a-zA-Z0-9_]+[C|c]+lass/.test(package_name))
-    {
+    if(/\b[Cc]lass\b/.test(package_name)) {
         return Q.reject('class is a reserved word');
     }
 
@@ -137,6 +132,11 @@ function validatePackageName(package_name) {
  * otherwise.
  */
 function validateProjectName(project_name) {
+    //Make sure there's something there
+    if (project_name === '') {
+        return Q.reject('Project name cannot be empty');
+    }
+
     //Enforce stupid name error
     if (project_name === 'CordovaActivity') {
         return Q.reject('Project name cannot be CordovaActivity');


[3/3] android commit: CB-5971: Factor out package/project name validation logic

Posted by ia...@apache.org.
CB-5971: Factor out package/project name validation logic


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

Branch: refs/heads/master
Commit: ff260c03caedeeaaf00563e117faefb8004f269b
Parents: 297f862
Author: Ian Clelland <ic...@chromium.org>
Authored: Tue Jun 24 13:49:12 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Tue Jun 24 14:05:56 2014 -0400

----------------------------------------------------------------------
 bin/lib/create.js | 76 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 50 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/ff260c03/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index f99d1da..8a90827 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -107,6 +107,50 @@ function copyScripts(projectPath) {
 }
 
 /**
+ * Test whether a package name is acceptable for use as an android project.
+ * Returns a promise, fulfilled if the package name is acceptable; rejected
+ * otherwise.
+ */
+function validatePackageName(package_name) {
+    //Make the package conform to Java package types
+    if (!/[a-zA-Z0-9_]+\.[a-zA-Z0-9_](.[a-zA-Z0-9_])*/.test(package_name)) {
+        return Q.reject('Package name must look like: com.company.Name');
+    }
+
+    //Enforce underscore limitation
+    if (/[_]+[a-zA-Z0-9_]*/.test(package_name)) {
+        return Q.reject("Package name can't begin with an underscore");
+    }
+
+    //Class is a reserved word
+    if(/[C|c]+lass+[\s|\.]/.test(package_name) && !/[a-zA-Z0-9_]+[C|c]+lass/.test(package_name))
+    {
+        return Q.reject('class is a reserved word');
+    }
+
+    return Q.resolve();
+}
+
+/**
+ * Test whether a project name is acceptable for use as an android class.
+ * Returns a promise, fulfilled if the project name is acceptable; rejected
+ * otherwise.
+ */
+function validateProjectName(project_name) {
+    //Enforce stupid name error
+    if (project_name === 'CordovaActivity') {
+        return Q.reject('Project name cannot be CordovaActivity');
+    }
+
+    //Classes in Java don't begin with numbers
+    if (/^[0-9]/.test(project_name)) {
+        return Q.reject('Project name must not begin with a number');
+    }
+
+    return Q.resolve();
+}
+
+/**
  * $ create [options]
  *
  * Creates an android application with the given options.
@@ -146,34 +190,14 @@ exports.createProject = function(project_path, package_name, project_name, proje
     }
 
     //Make the package conform to Java package types
-    if (!/[a-zA-Z0-9_]+\.[a-zA-Z0-9_](.[a-zA-Z0-9_])*/.test(package_name)) {
-        return Q.reject('Package name must look like: com.company.Name');
-    }
-
-    //Enforce underscore limitation
-    if (/[_]+[a-zA-Z0-9_]*/.test(package_name)) {
-        return Q.reject("Package name can't begin with an underscore");
-    }
-
-    //Enforce stupid name error
-    if (project_name === 'CordovaActivity') {
-        return Q.reject('Project name cannot be CordovaActivity');
-    }
-
-    //Classes in Java don't begin with numbers
-    if (/[0-9]+[a-zA-Z0-9]/.test(project_name)) {
-        return Q.reject('Project name must not begin with a number');
-    }
-
-    //Class is a reserved word
-    if(/[C|c]+lass+[\s|\.]/.test(package_name) && !/[a-zA-Z0-9_]+[C|c]+lass/.test(package_name))
-    {
-        return Q.reject('class is a reserved word');
-    }
-
+    return validatePackageName(package_name)
+    .then(function() {
+        validateProjectName(project_name);
+    })
     // Check that requirements are met and proper targets are installed
-    return check_reqs.run()
     .then(function() {
+        check_reqs.run();
+    }).then(function() {
         // Log the given values for the project
         console.log('Creating Cordova project for the Android platform:');
         console.log('\tPath: ' + project_path);


[2/3] android commit: CB-5971: Add unit tests to cordova-android

Posted by ia...@apache.org.
CB-5971: Add unit tests to cordova-android


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

Branch: refs/heads/master
Commit: bb141a70e89cf7826fb1699085df33aac597a688
Parents: ff260c0
Author: Ian Clelland <ic...@chromium.org>
Authored: Tue Jun 24 13:50:00 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Tue Jun 24 14:05:56 2014 -0400

----------------------------------------------------------------------
 bin/lib/create.js   |  4 +++
 package.json        |  7 +++++
 spec/create.spec.js | 82 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/bb141a70/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 8a90827..a31604a 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -288,3 +288,7 @@ exports.updateProject = function(projectPath) {
     });
 };
 
+
+// For testing
+exports.validatePackageName = validatePackageName;
+exports.validateProjectName = validateProjectName;

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/bb141a70/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 0d203c9..ed01458 100644
--- a/package.json
+++ b/package.json
@@ -12,10 +12,17 @@
     "cordova",
     "apache"
   ],
+  "scripts": {
+    "test": "jasmine-node --color spec"
+  },
   "author": "Apache Software Foundation",
   "license": "Apache version 2.0",
   "dependencies": {
     "q": "^0.9.0",
     "shelljs": "^0.2.6"
+  },
+  "devDependencies": {
+    "jasmine-node": "~1",
+    "promise-matchers": "~0"
   }
 }

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/bb141a70/spec/create.spec.js
----------------------------------------------------------------------
diff --git a/spec/create.spec.js b/spec/create.spec.js
new file mode 100644
index 0000000..8e08793
--- /dev/null
+++ b/spec/create.spec.js
@@ -0,0 +1,82 @@
+/**
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+*/
+/* jshint laxcomma:true */
+
+require("promise-matchers");
+
+var create = require("../bin/lib/create");
+
+describe("create", function () {
+  describe("validatePackageName", function() {
+    var valid = [
+        "org.apache.mobilespec"
+      , "com.example"
+      , "com.42floors.package"
+    ];
+    var invalid = [
+        ""
+      , "com.class.is.bad"
+      , "0com.example.mobilespec"
+      , "c-m.e@a!p%e.mobilespec"
+      , "notenoughdots"
+      , ".starts.with.a.dot"
+      , "ends.with.a.dot."
+      , "_underscore.anything"
+      , "underscore._something"
+      , "_underscore._all._the._things"
+    ];
+
+    valid.forEach(function(package_name) {
+      it("should accept " + package_name, function(done) {
+        expect(create.validatePackageName(package_name)).toHaveBeenResolved(done);
+      });
+    });
+
+    invalid.forEach(function(package_name) {
+      it("should reject " + package_name, function(done) {
+        expect(create.validatePackageName(package_name)).toHaveBeenRejected(done);
+      });
+    });
+  });
+  describe("validateProjectName", function() {
+    var valid = [
+        "mobilespec"
+      , "package_name"
+      , "PackageName"
+      , "CordovaLib"
+    ];
+    var invalid = [
+        ""
+      , "0startswithdigit"
+      , "CordovaActivity"
+    ];
+
+    valid.forEach(function(project_name) {
+      it("should accept " + project_name, function(done) {
+        expect(create.validateProjectName(project_name)).toHaveBeenResolved(done);
+      });
+    });
+
+    invalid.forEach(function(project_name) {
+      it("should reject " + project_name, function(done) {
+        expect(create.validateProjectName(project_name)).toHaveBeenRejected(done);
+      });
+    });
+  });
+});