You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pu...@apache.org on 2017/06/27 02:37:23 UTC

[3/4] cordova-cli git commit: CB-12895 : after rebase

CB-12895 : after rebase


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

Branch: refs/heads/master
Commit: 3127d503345fcf3e5a2be9581933c99f65197c27
Parents: 3aab003
Author: Audrey So <au...@apache.org>
Authored: Mon Jun 26 07:49:39 2017 -0700
Committer: Audrey So <au...@apache.org>
Committed: Mon Jun 26 07:55:52 2017 -0700

----------------------------------------------------------------------
 spec/.eslintrc.yaml |   2 +
 spec/cli.spec.js    | 683 +++++++++++++++++++++++------------------------
 spec/help.spec.js   |  37 ++-
 src/cli.js          | 236 ++++++++--------
 src/help.js         |   4 +-
 src/telemetry.js    |  25 +-
 6 files changed, 483 insertions(+), 504 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/3127d503/spec/.eslintrc.yaml
----------------------------------------------------------------------
diff --git a/spec/.eslintrc.yaml b/spec/.eslintrc.yaml
new file mode 100644
index 0000000..6afba65
--- /dev/null
+++ b/spec/.eslintrc.yaml
@@ -0,0 +1,2 @@
+env:
+    jasmine: true
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/3127d503/spec/cli.spec.js
----------------------------------------------------------------------
diff --git a/spec/cli.spec.js b/spec/cli.spec.js
index 3b47808..4031821 100644
--- a/spec/cli.spec.js
+++ b/spec/cli.spec.js
@@ -15,22 +15,21 @@
     under the License.
 */
 
-var rewire = require('rewire'),
-    cli = rewire("../src/cli"),
-    Q = require('q'),
-    cordova_lib = require('cordova-lib'),
-    events = cordova_lib.events,
-    cordova = cordova_lib.cordova,
-    telemetry = require('../src/telemetry'),
-    path = require('path'),
-    Configstore = require('configstore'),
-    fs = require('fs'),
-    logger = require('cordova-common').CordovaLogger.get();
-
-//avoid node complaining of too many event listener added
+var rewire = require('rewire');
+var cli = rewire('../src/cli');
+var Q = require('q');
+var cordova_lib = require('cordova-lib');
+var events = cordova_lib.events;
+var cordova = cordova_lib.cordova;
+var telemetry = require('../src/telemetry');
+var path = require('path');
+var fs = require('fs');
+var logger = require('cordova-common').CordovaLogger.get();
+
+// avoid node complaining of too many event listener added
 process.setMaxListeners(0);
 
-describe("cordova cli", function () {
+describe('cordova cli', function () {
     beforeEach(function () {
         // Event registration is currently process-global. Since all jasmine
         // tests in a directory run in a single process (and in parallel),
@@ -38,12 +37,12 @@ describe("cordova cli", function () {
         // CLI testing below would cause lots of logging messages printed out by other specs.
 
         // This is required so that fake events chaining works (events.on('log').on('verbose')...)
-        var FakeEvents = function FakeEvents() {};
+        var FakeEvents = function FakeEvents () {};
         FakeEvents.prototype.on = function fakeOn () {
             return new FakeEvents();
         };
 
-        spyOn(events, "on").and.returnValue(new FakeEvents());
+        spyOn(events, 'on').and.returnValue(new FakeEvents());
 
         // Spy and mute output
         spyOn(logger, 'results');
@@ -51,109 +50,109 @@ describe("cordova cli", function () {
         spyOn(console, 'log');
 
         // Prevent accidentally turning telemetry on/off during testing
-        telemetry.turnOn = function() {};
-        telemetry.turnOff = function() {};
-        telemetry.track = function() {};
+        telemetry.turnOn = function () {};
+        telemetry.turnOff = function () {};
+        telemetry.track = function () {};
     });
 
-    describe("options", function () {
-        describe("version", function () {
-            var version = require("../package").version;
+    describe('options', function () {
+        describe('version', function () {
+            var version = require('../package').version;
 
-            it("Test#001 : will spit out the version with -v", function (done) {
-              cli(["node", "cordova", "-v"], function() {
-                expect(logger.results.calls.mostRecent().args[0]).toMatch(version);
-                done();
-              });
+            it('Test#001 : will spit out the version with -v', function (done) {
+                cli(['node', 'cordova', '-v'], function () {
+                    expect(logger.results.calls.mostRecent().args[0]).toMatch(version);
+                    done();
+                });
             }, 60000);
 
-            it("Test#002 : will spit out the version with --version", function (done) {
-              cli(["node", "cordova", "--version"], function () {
-                expect(logger.results.calls.mostRecent().args[0]).toMatch(version);
-                done();
-              }, 60000);
+            it('Test#002 : will spit out the version with --version', function (done) {
+                cli(['node', 'cordova', '--version'], function () {
+                    expect(logger.results.calls.mostRecent().args[0]).toMatch(version);
+                    done();
+                }, 60000);
             });
 
-            it("Test#003 : will spit out the version with -v anywhere", function (done) {
-              cli(["node", "cordova", "one", "-v", "three"], function () {
-                expect(logger.results.calls.mostRecent().args[0]).toMatch(version);
-                done();
-              });
+            it('Test#003 : will spit out the version with -v anywhere', function (done) {
+                cli(['node', 'cordova', 'one', '-v', 'three'], function () {
+                    expect(logger.results.calls.mostRecent().args[0]).toMatch(version);
+                    done();
+                });
             }, 60000);
         });
     });
 
-    describe("Test#004 : project commands other than plugin and platform", function () {
+    describe('Test#004 : project commands other than plugin and platform', function () {
         beforeEach(function () {
-            spyOn(cordova, "build").and.returnValue(Q());
+            spyOn(cordova, 'build').and.returnValue(Q());
         });
 
-        it("Test#005 : will call command with all arguments passed through", function (done) {
-            cli(["node", "cordova", "build", "blackberry10", "--", "-k", "abcd1234"], function () {
-                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { argv: ['-k', 'abcd1234'], fetch: true }, verbose: false, silent: false, browserify: false, fetch: true, nohooks: [  ], searchpath: undefined });
+        it('Test#005 : will call command with all arguments passed through', function (done) {
+            cli(['node', 'cordova', 'build', 'blackberry10', '--', '-k', 'abcd1234'], function () {
+                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { argv: ['-k', 'abcd1234'], fetch: true }, verbose: false, silent: false, browserify: false, fetch: true, nohooks: [ ], searchpath: undefined });
                 done();
             });
         }, 60000);
 
-        it("Test#006 : will consume the first instance of -d", function (done) {
-            cli(["node", "cordova", "-d", "build", "blackberry10", "--", "-k", "abcd1234", "-d"], function () {
-                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '-d'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [  ], searchpath: undefined });
+        it('Test#006 : will consume the first instance of -d', function (done) {
+            cli(['node', 'cordova', '-d', 'build', 'blackberry10', '--', '-k', 'abcd1234', '-d'], function () {
+                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '-d'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [ ], searchpath: undefined });
                 done();
             });
         });
 
-        it("Test#007 : will consume the first instance of --verbose", function (done) {
-            cli(["node", "cordova", "--verbose", "build", "blackberry10", "--", "-k", "abcd1234", "--verbose"], function () {
-                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '--verbose'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [  ], searchpath: undefined });
+        it('Test#007 : will consume the first instance of --verbose', function (done) {
+            cli(['node', 'cordova', '--verbose', 'build', 'blackberry10', '--', '-k', 'abcd1234', '--verbose'], function () {
+                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '--verbose'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [ ], searchpath: undefined });
                 done();
             });
         });
 
-        it("Test#008 : will consume the first instance of either --verbose or -d", function (done) {
-            cli(["node", "cordova", "--verbose", "build", "blackberry10", "--", "-k", "abcd1234", "-d"], function () {
-                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '-d'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [  ], searchpath: undefined });
+        it('Test#008 : will consume the first instance of either --verbose or -d', function (done) {
+            cli(['node', 'cordova', '--verbose', 'build', 'blackberry10', '--', '-k', 'abcd1234', '-d'], function () {
+                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '-d'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [ ], searchpath: undefined });
                 done();
             });
         });
 
-        it("Test#009 : will consume the first instance of either --verbose or -d", function (done) {
-            cli(["node", "cordova", "-d", "build", "blackberry10", "--", "-k", "abcd1234", "--verbose"], function () {
-                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '--verbose'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [  ], searchpath: undefined });
+        it('Test#009 : will consume the first instance of either --verbose or -d', function (done) {
+            cli(['node', 'cordova', '-d', 'build', 'blackberry10', '--', '-k', 'abcd1234', '--verbose'], function () {
+                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { verbose: true, argv: ['-k', 'abcd1234', '--verbose'], fetch: true }, verbose: true, silent: false, browserify: false, fetch: true, nohooks: [ ], searchpath: undefined });
                 done();
             });
         });
 
-        it("Test#010 : will consume the first instance of --silent", function (done) {
-            cli(["node", "cordova", "--silent", "build", "blackberry10", "--", "-k", "abcd1234", "--silent"], function () {
-                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { silent: true, argv: ['-k', 'abcd1234', '--silent'], fetch: true }, verbose: false, silent: true, browserify: false, fetch: true, nohooks: [  ], searchpath: undefined });
+        it('Test#010 : will consume the first instance of --silent', function (done) {
+            cli(['node', 'cordova', '--silent', 'build', 'blackberry10', '--', '-k', 'abcd1234', '--silent'], function () {
+                expect(cordova.build).toHaveBeenCalledWith({ platforms: ['blackberry10'], options: { silent: true, argv: ['-k', 'abcd1234', '--silent'], fetch: true }, verbose: false, silent: true, browserify: false, fetch: true, nohooks: [ ], searchpath: undefined });
                 done();
             });
         });
     });
 
-    describe("create", function () {
+    describe('create', function () {
         beforeEach(function () {
-            spyOn(cordova, "create").and.returnValue(Q());
+            spyOn(cordova, 'create').and.returnValue(Q());
         });
 
-        it("Test#011 : calls cordova create", function (done) {
-            cli(["node", "cordova", "create", "a", "b", "c", "--link-to", "c:\\personalWWW"], function () {
-                expect(cordova.create).toHaveBeenCalledWith("a", "b", "c", jasmine.any(Object), jasmine.any(Object));
+        it('Test#011 : calls cordova create', function (done) {
+            cli(['node', 'cordova', 'create', 'a', 'b', 'c', '--link-to', 'c:\\personalWWW'], function () {
+                expect(cordova.create).toHaveBeenCalledWith('a', 'b', 'c', jasmine.any(Object), jasmine.any(Object));
                 done();
             });
         });
     });
 
-    describe("plugin", function () {
+    describe('plugin', function () {
         beforeEach(function () {
-            spyOn(cordova, "plugin").and.returnValue(Q());
+            spyOn(cordova, 'plugin').and.returnValue(Q());
         });
 
-        it("Test#012 : will pass variables", function (done) {
-            cli(["node", "cordova", "plugin", "add", "facebook", "--variable", "FOO=foo"], function () {
+        it('Test#012 : will pass variables', function (done) {
+            cli(['node', 'cordova', 'plugin', 'add', 'facebook', '--variable', 'FOO=foo'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "add",
-                    ["facebook"],
+                    'add',
+                    ['facebook'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -162,11 +161,11 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test#013 : will  support variables with =", function (done) {
-            cli(["node", "cordova", "plugin", "add", "facebook", "--variable", "MOTO=DELTA=WAS=HERE"], function () {
+        it('Test#013 : will  support variables with =', function (done) {
+            cli(['node', 'cordova', 'plugin', 'add', 'facebook', '--variable', 'MOTO=DELTA=WAS=HERE'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "add",
-                    ["facebook"],
+                    'add',
+                    ['facebook'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -175,24 +174,24 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test#014 : will pass hook patterns to suppress", function (done) {
-            cli(["node", "cordova", "plugin", "add", "facebook", "--nohooks", "before_plugin_add"], function () {
+        it('Test#014 : will pass hook patterns to suppress', function (done) {
+            cli(['node', 'cordova', 'plugin', 'add', 'facebook', '--nohooks', 'before_plugin_add'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "add",
-                    ["facebook"],
+                    'add',
+                    ['facebook'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
-                expect(opts.nohooks[0]).toBe("before_plugin_add");
+                expect(opts.nohooks[0]).toBe('before_plugin_add');
                 done();
             });
         });
 
-        it("Test #015 : (add) will pass save:true", function (done) {
-            cli(["node", "cordova", "plugin", "add", "device"], function () {
+        it('Test #015 : (add) will pass save:true', function (done) {
+            cli(['node', 'cordova', 'plugin', 'add', 'device'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "add",
-                    ["device"],
+                    'add',
+                    ['device'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -201,11 +200,11 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test #016 : (add) will pass save:false", function (done) {
-            cli(["node", "cordova", "plugin", "add", "device", "--nosave"], function () {
+        it('Test #016 : (add) will pass save:false', function (done) {
+            cli(['node', 'cordova', 'plugin', 'add', 'device', '--nosave'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "add",
-                    ["device"],
+                    'add',
+                    ['device'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -214,11 +213,11 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test #017: (remove) will pass save:false", function (done) {
-            cli(["node", "cordova", "plugin", "remove", "device", "--nosave"], function () {
+        it('Test #017: (remove) will pass save:false', function (done) {
+            cli(['node', 'cordova', 'plugin', 'remove', 'device', '--nosave'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "remove",
-                    ["device"],
+                    'remove',
+                    ['device'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -227,11 +226,11 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test #018 : (remove) autosave is default and will pass save:true", function (done) {
-            cli(["node", "cordova", "plugin", "remove", "device"], function () {
+        it('Test #018 : (remove) autosave is default and will pass save:true', function (done) {
+            cli(['node', 'cordova', 'plugin', 'remove', 'device'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "remove",
-                    ["device"],
+                    'remove',
+                    ['device'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -240,24 +239,24 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test #019 : (add) will pass fetch:false", function (done) {
-            cli(["node", "cordova", "plugin", "add", "device", "--nofetch"], function () {
-              expect(cordova.plugin).toHaveBeenCalledWith(
-                  "add",
-                  ["device"],
-                  jasmine.any(Object)
-              );
-              var opts = cordova.plugin.calls.argsFor(0)[2];
-              expect(opts.fetch).toBe(false);
-              done();
+        it('Test #019 : (add) will pass fetch:false', function (done) {
+            cli(['node', 'cordova', 'plugin', 'add', 'device', '--nofetch'], function () {
+                expect(cordova.plugin).toHaveBeenCalledWith(
+                    'add',
+                    ['device'],
+                    jasmine.any(Object)
+                );
+                var opts = cordova.plugin.calls.argsFor(0)[2];
+                expect(opts.fetch).toBe(false);
+                done();
             });
         });
 
-        it("Test #020 : (add) fetch is true by default and will pass fetch:true", function (done) {
-            cli(["node", "cordova", "plugin", "add", "device"], function () {
+        it('Test #020 : (add) fetch is true by default and will pass fetch:true', function (done) {
+            cli(['node', 'cordova', 'plugin', 'add', 'device'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "add",
-                    ["device"],
+                    'add',
+                    ['device'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -266,11 +265,11 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test #021 : (remove) fetch is true by default and will pass fetch:true", function (done) {
-            cli(["node", "cordova", "plugin", "remove", "device"], function () {
+        it('Test #021 : (remove) fetch is true by default and will pass fetch:true', function (done) {
+            cli(['node', 'cordova', 'plugin', 'remove', 'device'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "remove",
-                    ["device"],
+                    'remove',
+                    ['device'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -279,11 +278,11 @@ describe("cordova cli", function () {
             });
         });
 
-        it("Test #022 : (remove) will pass fetch:false", function (done) {
-            cli(["node", "cordova", "plugin", "remove", "device", "--nofetch"], function () {
+        it('Test #022 : (remove) will pass fetch:false', function (done) {
+            cli(['node', 'cordova', 'plugin', 'remove', 'device', '--nofetch'], function () {
                 expect(cordova.plugin).toHaveBeenCalledWith(
-                    "remove",
-                    ["device"],
+                    'remove',
+                    ['device'],
                     jasmine.any(Object)
                 );
                 var opts = cordova.plugin.calls.argsFor(0)[2];
@@ -293,170 +292,169 @@ describe("cordova cli", function () {
         });
     });
 
-    describe("telemetry", function() {
-       it("Test#023 : skips prompt when user runs 'cordova telemetry X'", function(done) {
-           var wasPromptShown = false;
-           spyOn(telemetry, "showPrompt").and.callFake(function () {
-               wasPromptShown = true;
-           });
-
-           cli(["node", "cordova", "telemetry", "on"], function () {
-               cli(["node", "cordova", "telemetry", "off"], function () {
-                   expect(wasPromptShown).toBeFalsy();
-                   done();
-               });
-           });
-       });
-
-       it("Test#024 : is NOT collected when user runs 'cordova telemetry on' while NOT opted-in", function(done) {
-           spyOn(telemetry, "isOptedIn").and.returnValue(false);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "track");
-
-           cli(["node", "cordova", "telemetry", "on"], function () {
-               expect(telemetry.track).not.toHaveBeenCalled();
-               done();
-           });
-       });
-
-       it("Test#025 : is collected when user runs 'cordova telemetry off' while opted-in", function(done) {
-           spyOn(telemetry, "isOptedIn").and.returnValue(true);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "track");
-
-           cli(["node", "cordova", "telemetry", "off"], function () {
-               expect(telemetry.track).toHaveBeenCalledWith("telemetry", "off", "via-cordova-telemetry-cmd", "successful");
-               done();
-           });
-       });
-
-       it("Test#026 : tracks platforms/plugins subcommands", function(done) {
-           spyOn(telemetry, "isOptedIn").and.returnValue(true);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(true);
-           spyOn(cordova, "platform").and.returnValue(Q());
-           spyOn(telemetry, "track");
-
-           cli(["node", "cordova", "platform", "add", "ios"], function () {
-               expect(telemetry.track).toHaveBeenCalledWith("platform", "add", "successful");
-               done();
-           });
-       });
-
-       it("Test#027 : shows prompt if user neither opted in or out yet", function(done) {
-           spyOn(cordova, "prepare").and.returnValue(Q());
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(false);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "isNoTelemetryFlag").and.returnValue(false);
-           spyOn(telemetry, "showPrompt").and.returnValue(Q(false));
-
-           cli(["node", "cordova", "prepare"], function () {
-               expect(telemetry.showPrompt).toHaveBeenCalled();
-               done();
-           });
-       });
-
-       // note: we override telemetry timeout here so we don't need to wait 30 seconds
-       it("Test#028 : opts-out if prompt times out AND it tracks opt-out", function(done) {
-           // Remove any optOut settings that might have been saved
-           // ... and force prompt to be shown
-           telemetry.clear();
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(false);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "track");
-
-           telemetry.timeoutInSecs = 1;
-           cli(["node", "cordova", "--version"], function () {
-               if(process.env.CI) {
-                   expect(telemetry.isOptedIn()).toBeTruthy();
-               }
-               else {
-                   expect(telemetry.isOptedIn()).toBeFalsy();
-               }
-               expect(telemetry.track).toHaveBeenCalledWith("telemetry", "off", "via-cli-prompt-choice", "successful");
-               done();
-           });
-       });
-
-       it("Test#029 : is NOT collected in CI environments and doesn't prompt", function(done) {
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(true);
-           spyOn(telemetry, "isOptedIn").and.returnValue(true);
-           spyOn(telemetry, "isCI").and.returnValue(true);
-           spyOn(telemetry, "showPrompt");
-           spyOn(telemetry, "track");
-
-           cli(["node", "cordova", "--version"], function () {
-               expect(telemetry.showPrompt).not.toHaveBeenCalled();
-               expect(telemetry.track).not.toHaveBeenCalled();
-               done();
-           });
-       });
-
-       it("Test#030 : is NOT collected when --no-telemetry flag found and doesn't prompt", function(done) {
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(false);
-           spyOn(telemetry, "isOptedIn").and.returnValue(true);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "showPrompt");
-           spyOn(telemetry, "track");
-
-           cli(["node", "cordova", "--version", "--no-telemetry"], function () {
-               expect(telemetry.showPrompt).not.toHaveBeenCalled();
-               expect(telemetry.track).not.toHaveBeenCalled();
-               done();
-           });
-       });
-
-       it("Test#031 : is NOT collected if user opted out", function(done) {
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(true);
-           spyOn(telemetry, "isOptedIn").and.returnValue(false);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "showPrompt");
-           spyOn(telemetry, "track");
-
-           cli(["node", "cordova", "--version"], function () {
-               expect(telemetry.showPrompt).not.toHaveBeenCalled();
-               expect(telemetry.track).not.toHaveBeenCalled();
-               done();
-           });
-       });
-
-       it("Test#032 : is collected if user opted in", function(done) {
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(true);
-           spyOn(telemetry, "isOptedIn").and.returnValue(true);
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "showPrompt");
-           spyOn(telemetry, "track");
-
-           cli(["node", "cordova", "--version"], function () {
-               expect(telemetry.showPrompt).not.toHaveBeenCalled();
-               expect(telemetry.track).toHaveBeenCalled();
-               done();
-           });
-       });
-
-       it("Test#033 : track opt-out that happened via 'cordova telemetry off' even if user is NOT opted-in ", function(done) {
-           spyOn(telemetry, "isCI").and.returnValue(false);
-           spyOn(telemetry, "isOptedIn").and.returnValue(false); // same as calling `telemetry.turnOff();`
-           spyOn(telemetry, "hasUserOptedInOrOut").and.returnValue(true);
-           spyOn(telemetry, "track");
-
-           expect(telemetry.isOptedIn()).toBeFalsy();
-
-           cli(["node", "cordova", "telemetry", "off"], function () {
-               expect(telemetry.isOptedIn()).toBeFalsy();
-               expect(telemetry.track).toHaveBeenCalledWith("telemetry", "off", "via-cordova-telemetry-cmd", "successful");
-               done();
-           });
-       });
+    describe('telemetry', function () {
+        it("Test#023 : skips prompt when user runs 'cordova telemetry X'", function (done) {
+            var wasPromptShown = false;
+            spyOn(telemetry, 'showPrompt').and.callFake(function () {
+                wasPromptShown = true;
+            });
+
+            cli(['node', 'cordova', 'telemetry', 'on'], function () {
+                cli(['node', 'cordova', 'telemetry', 'off'], function () {
+                    expect(wasPromptShown).toBeFalsy();
+                    done();
+                });
+            });
+        });
+
+        it("Test#024 : is NOT collected when user runs 'cordova telemetry on' while NOT opted-in", function (done) {
+            spyOn(telemetry, 'isOptedIn').and.returnValue(false);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'track');
+
+            cli(['node', 'cordova', 'telemetry', 'on'], function () {
+                expect(telemetry.track).not.toHaveBeenCalled();
+                done();
+            });
+        });
+
+        it("Test#025 : is collected when user runs 'cordova telemetry off' while opted-in", function (done) {
+            spyOn(telemetry, 'isOptedIn').and.returnValue(true);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'track');
+
+            cli(['node', 'cordova', 'telemetry', 'off'], function () {
+                expect(telemetry.track).toHaveBeenCalledWith('telemetry', 'off', 'via-cordova-telemetry-cmd', 'successful');
+                done();
+            });
+        });
+
+        it('Test#026 : tracks platforms/plugins subcommands', function (done) {
+            spyOn(telemetry, 'isOptedIn').and.returnValue(true);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
+            spyOn(cordova, 'platform').and.returnValue(Q());
+            spyOn(telemetry, 'track');
+
+            cli(['node', 'cordova', 'platform', 'add', 'ios'], function () {
+                expect(telemetry.track).toHaveBeenCalledWith('platform', 'add', 'successful');
+                done();
+            });
+        });
+
+        it('Test#027 : shows prompt if user neither opted in or out yet', function (done) {
+            spyOn(cordova, 'prepare').and.returnValue(Q());
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(false);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'isNoTelemetryFlag').and.returnValue(false);
+            spyOn(telemetry, 'showPrompt').and.returnValue(Q(false));
+
+            cli(['node', 'cordova', 'prepare'], function () {
+                expect(telemetry.showPrompt).toHaveBeenCalled();
+                done();
+            });
+        });
+
+        // note: we override telemetry timeout here so we don't need to wait 30 seconds
+        it('Test#028 : opts-out if prompt times out AND it tracks opt-out', function (done) {
+            // Remove any optOut settings that might have been saved
+            // ... and force prompt to be shown
+            telemetry.clear();
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(false);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'track');
+
+            telemetry.timeoutInSecs = 1;
+            cli(['node', 'cordova', '--version'], function () {
+                if (process.env.CI) {
+                    expect(telemetry.isOptedIn()).toBeTruthy();
+                } else {
+                    expect(telemetry.isOptedIn()).toBeFalsy();
+                }
+                expect(telemetry.track).toHaveBeenCalledWith('telemetry', 'off', 'via-cli-prompt-choice', 'successful');
+                done();
+            });
+        });
+
+        it("Test#029 : is NOT collected in CI environments and doesn't prompt", function (done) {
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
+            spyOn(telemetry, 'isOptedIn').and.returnValue(true);
+            spyOn(telemetry, 'isCI').and.returnValue(true);
+            spyOn(telemetry, 'showPrompt');
+            spyOn(telemetry, 'track');
+
+            cli(['node', 'cordova', '--version'], function () {
+                expect(telemetry.showPrompt).not.toHaveBeenCalled();
+                expect(telemetry.track).not.toHaveBeenCalled();
+                done();
+            });
+        });
+
+        it("Test#030 : is NOT collected when --no-telemetry flag found and doesn't prompt", function (done) {
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(false);
+            spyOn(telemetry, 'isOptedIn').and.returnValue(true);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'showPrompt');
+            spyOn(telemetry, 'track');
+
+            cli(['node', 'cordova', '--version', '--no-telemetry'], function () {
+                expect(telemetry.showPrompt).not.toHaveBeenCalled();
+                expect(telemetry.track).not.toHaveBeenCalled();
+                done();
+            });
+        });
+
+        it('Test#031 : is NOT collected if user opted out', function (done) {
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
+            spyOn(telemetry, 'isOptedIn').and.returnValue(false);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'showPrompt');
+            spyOn(telemetry, 'track');
+
+            cli(['node', 'cordova', '--version'], function () {
+                expect(telemetry.showPrompt).not.toHaveBeenCalled();
+                expect(telemetry.track).not.toHaveBeenCalled();
+                done();
+            });
+        });
+
+        it('Test#032 : is collected if user opted in', function (done) {
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
+            spyOn(telemetry, 'isOptedIn').and.returnValue(true);
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'showPrompt');
+            spyOn(telemetry, 'track');
+
+            cli(['node', 'cordova', '--version'], function () {
+                expect(telemetry.showPrompt).not.toHaveBeenCalled();
+                expect(telemetry.track).toHaveBeenCalled();
+                done();
+            });
+        });
+
+        it("Test#033 : track opt-out that happened via 'cordova telemetry off' even if user is NOT opted-in ", function (done) {
+            spyOn(telemetry, 'isCI').and.returnValue(false);
+            spyOn(telemetry, 'isOptedIn').and.returnValue(false); // same as calling `telemetry.turnOff();`
+            spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
+            spyOn(telemetry, 'track');
+
+            expect(telemetry.isOptedIn()).toBeFalsy();
+
+            cli(['node', 'cordova', 'telemetry', 'off'], function () {
+                expect(telemetry.isOptedIn()).toBeFalsy();
+                expect(telemetry.track).toHaveBeenCalledWith('telemetry', 'off', 'via-cordova-telemetry-cmd', 'successful');
+                done();
+            });
+        });
     });
 });
 
-describe("raw", function () {
+describe('raw', function () {
     var rawInterface = cordova.raw;
-    it("has a raw implementation of previously callable commands", function (done) {
-        Object.keys(rawInterface).forEach(function(key) {
+    it('has a raw implementation of previously callable commands', function (done) {
+        Object.keys(rawInterface).forEach(function (key) {
             expect(typeof rawInterface[key]).toBe('function');
-            spyOn(cordova,key);
+            spyOn(cordova, key);
             rawInterface[key](); // call the raw version
             expect(cordova[key]).toHaveBeenCalled();
         });
@@ -464,18 +462,18 @@ describe("raw", function () {
     });
 });
 
-describe("platform", function () {
+describe('platform', function () {
 
     beforeEach(function () {
-        spyOn(cordova, "platform").and.returnValue(Q());
+        spyOn(cordova, 'platform').and.returnValue(Q());
         logger.setLevel('error');
     });
 
-    it("Test #034 : (add) autosave is the default setting for platform add", function (done) {
-        cli(["node", "cordova", "platform", "add", "ios"], function () {
+    it('Test #034 : (add) autosave is the default setting for platform add', function (done) {
+        cli(['node', 'cordova', 'platform', 'add', 'ios'], function () {
             expect(cordova.platform).toHaveBeenCalledWith(
-                "add",
-                ["ios"],
+                'add',
+                ['ios'],
                 jasmine.any(Object)
             );
             var opts = cordova.platform.calls.argsFor(0)[2];
@@ -484,11 +482,11 @@ describe("platform", function () {
         });
     });
 
-    it("Test #035 : (add) platform is not saved when --nosave is passed in", function (done) {
-        cli(["node", "cordova", "platform", "add", "ios", "--nosave"], function () {
+    it('Test #035 : (add) platform is not saved when --nosave is passed in', function (done) {
+        cli(['node', 'cordova', 'platform', 'add', 'ios', '--nosave'], function () {
             expect(cordova.platform).toHaveBeenCalledWith(
-                "add",
-                ["ios"],
+                'add',
+                ['ios'],
                 jasmine.any(Object)
             );
             var opts = cordova.platform.calls.argsFor(0)[2];
@@ -497,11 +495,11 @@ describe("platform", function () {
         });
     });
 
-    it("Test #036 : (remove) autosave is the default setting for platform remove", function (done) {
-        cli(["node", "cordova", "platform", "remove", "ios"], function () {
+    it('Test #036 : (remove) autosave is the default setting for platform remove', function (done) {
+        cli(['node', 'cordova', 'platform', 'remove', 'ios'], function () {
             expect(cordova.platform).toHaveBeenCalledWith(
-                "remove",
-                ["ios"],
+                'remove',
+                ['ios'],
                 jasmine.any(Object)
             );
             var opts = cordova.platform.calls.argsFor(0)[2];
@@ -510,11 +508,11 @@ describe("platform", function () {
         });
     });
 
-    it("Test #037 : (remove) platform is not removed when --nosave is passed in", function (done) {
-        cli(["node", "cordova", "platform", "remove", "ios", "--nosave"], function () {
+    it('Test #037 : (remove) platform is not removed when --nosave is passed in', function (done) {
+        cli(['node', 'cordova', 'platform', 'remove', 'ios', '--nosave'], function () {
             expect(cordova.platform).toHaveBeenCalledWith(
-                "remove",
-                ["ios"],
+                'remove',
+                ['ios'],
                 jasmine.any(Object)
             );
             var opts = cordova.platform.calls.argsFor(0)[2];
@@ -523,24 +521,24 @@ describe("platform", function () {
         });
     });
 
-    it("Test #038 : (add) will pass fetch:false", function (done) {
-        cli(["node", "cordova", "platform", "add", "device", "--nofetch"], function () {
-          expect(cordova.platform).toHaveBeenCalledWith(
-              "add",
-              ["device"],
-              jasmine.any(Object)
-          );
-          var opts = cordova.platform.calls.argsFor(0)[2];
-          expect(opts.fetch).toBe(false);
-          done();
+    it('Test #038 : (add) will pass fetch:false', function (done) {
+        cli(['node', 'cordova', 'platform', 'add', 'device', '--nofetch'], function () {
+            expect(cordova.platform).toHaveBeenCalledWith(
+                'add',
+                ['device'],
+                jasmine.any(Object)
+            );
+            var opts = cordova.platform.calls.argsFor(0)[2];
+            expect(opts.fetch).toBe(false);
+            done();
         });
     });
 
-    it("Test #039 : (add) fetch is true by default and will pass fetch:true", function (done) {
-        cli(["node", "cordova", "platform", "add", "device"], function () {
+    it('Test #039 : (add) fetch is true by default and will pass fetch:true', function (done) {
+        cli(['node', 'cordova', 'platform', 'add', 'device'], function () {
             expect(cordova.platform).toHaveBeenCalledWith(
-                "add",
-                ["device"],
+                'add',
+                ['device'],
                 jasmine.any(Object)
             );
             var opts = cordova.platform.calls.argsFor(0)[2];
@@ -549,11 +547,11 @@ describe("platform", function () {
         });
     });
 
-    it("Test #040 : (remove) fetch is true by default and will pass fetch:true", function (done) {
-        cli(["node", "cordova", "platform", "remove", "device"], function () {
+    it('Test #040 : (remove) fetch is true by default and will pass fetch:true', function (done) {
+        cli(['node', 'cordova', 'platform', 'remove', 'device'], function () {
             expect(cordova.platform).toHaveBeenCalledWith(
-                "remove",
-                ["device"],
+                'remove',
+                ['device'],
                 jasmine.any(Object)
             );
             var opts = cordova.platform.calls.argsFor(0)[2];
@@ -562,11 +560,11 @@ describe("platform", function () {
         });
     });
 
-    it("Test #041 : (remove) will pass fetch:false", function (done) {
-        cli(["node", "cordova", "platform", "remove", "device", "--nofetch"], function () {
+    it('Test #041 : (remove) will pass fetch:false', function (done) {
+        cli(['node', 'cordova', 'platform', 'remove', 'device', '--nofetch'], function () {
             expect(cordova.platform).toHaveBeenCalledWith(
-                "remove",
-                ["device"],
+                'remove',
+                ['device'],
                 jasmine.any(Object)
             );
             var opts = cordova.platform.calls.argsFor(0)[2];
@@ -576,95 +574,92 @@ describe("platform", function () {
     });
 });
 
-
-
-describe("config", function () {
-    var clirevert,
-        confrevert,
-        editorArgs,
-        cordovaConfig = {},
-        confHolder;
+describe('config', function () {
+    var clirevert;
+    var confrevert;
+    var editorArgs;
+    var cordovaConfig = {};
+    var confHolder;
 
     var confMock = {
-        set: function(key, value) {
+        set: function (key, value) {
             cordovaConfig[key] = value;
         },
-        del: function(key) {
+        del: function (key) {
             delete cordovaConfig[key];
         },
-        path: function() {
+        path: function () {
             confHolder = 'Pathcalled';
             return 'some/path/cordova-config.json';
         },
-        get: function(key) {
+        get: function (key) {
             confHolder = cordovaConfig[key];
             return cordovaConfig[key];
         }
     };
 
     beforeEach(function () {
-        clirevert = cli.__set__('editor', function(path1, cb) {
+        clirevert = cli.__set__('editor', function (path1, cb) {
             editorArgs = path1();
             cb();
         });
 
         confrevert = cli.__set__('conf', confMock);
         logger.setLevel('error');
-        //spyOn(console, 'log');
+        // spyOn(console, 'log');
     });
 
-    afterEach(function() {
+    afterEach(function () {
         clirevert();
         confrevert();
         confHolder = undefined;
     });
 
-    it("Test#042 : config set autosave is called with true", function (done) {
-        cli(["node", "cordova", "config", "set", "autosave", "true", "--silent"], function () {
+    it('Test#042 : config set autosave is called with true', function (done) {
+        cli(['node', 'cordova', 'config', 'set', 'autosave', 'true', '--silent'], function () {
             expect(cordovaConfig.autosave).toBe('true');
             done();
         });
     });
 
-    it("Test#043 : config delete autosave is called", function (done) {
-        cli(["node", "cordova", "config", "delete", "autosave"], function () {
+    it('Test#043 : config delete autosave is called', function (done) {
+        cli(['node', 'cordova', 'config', 'delete', 'autosave'], function () {
             expect(cordovaConfig.autosave).toBeUndefined();
             done();
         });
     });
 
-    it("Test#044 : config set is called even without value, defaults to true", function (done) {
-        cli(["node", "cordova", "config", "set", "autosave"], function () {
+    it('Test#044 : config set is called even without value, defaults to true', function (done) {
+        cli(['node', 'cordova', 'config', 'set', 'autosave'], function () {
             expect(cordovaConfig.autosave).toBe(true);
             done();
         });
     });
 
-    it("Test #045 : config get is called", function (done) {
-        cli(["node", "cordova", "config", "get", "autosave"], function () {
+    it('Test #045 : config get is called', function (done) {
+        cli(['node', 'cordova', 'config', 'get', 'autosave'], function () {
             expect(confHolder).toBe(true);
             done();
         });
     });
 
-    it("Test #046 : config edit is called", function (done) {
-        cli(["node", "cordova", "config", "edit"], function () {
+    it('Test #046 : config edit is called', function (done) {
+        cli(['node', 'cordova', 'config', 'edit'], function () {
             expect(path.basename(editorArgs)).toEqual('cordova-config.json');
             expect(confHolder).toEqual('Pathcalled');
             done();
         });
     });
 
-    it("Test #047 : config ls is called", function (done) {
-        spyOn(fs, 'readFile').and.callFake(function(confPath, cb){
+    it('Test #047 : config ls is called', function (done) {
+        spyOn(fs, 'readFile').and.callFake(function (confPath, cb) {
             confHolder = confPath();
         });
 
-        cli(["node", "cordova", "config", "ls"], function () {
+        cli(['node', 'cordova', 'config', 'ls'], function () {
             expect(path.basename(confHolder)).toEqual('cordova-config.json');
             done();
         });
     });
 
-
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/3127d503/spec/help.spec.js
----------------------------------------------------------------------
diff --git a/spec/help.spec.js b/spec/help.spec.js
index a2ef8a0..84f59d7 100644
--- a/spec/help.spec.js
+++ b/spec/help.spec.js
@@ -14,47 +14,46 @@
     specific language governing permissions and limitations
     under the License.
 */
-var cordova_lib = require('cordova-lib'),
-    cordova = cordova_lib.cordova,
-    help = require('../src/help'),
-    allcommands;
+var cordova_lib = require('cordova-lib');
+var cordova = cordova_lib.cordova;
+var help = require('../src/help');
+var allcommands;
 
-describe('help', function() {
-    allcommands = [''].concat(Object.keys(cordova).map(function(k) {
-        if (k in cordova.raw)
-            return k;
+describe('help', function () {
+    allcommands = [''].concat(Object.keys(cordova).map(function (k) {
+        if (k in cordova.raw) { return k; }
         return null;
     }).filter(function (k) { return k; }));
-    describe('commands should', function() {
-        afterEach(function() {
+    describe('commands should', function () {
+        afterEach(function () {
             cordova.removeAllListeners('results');
         });
         describe('return results, and no long lines', function () {
             allcommands.forEach(function (k) {
-                it(k, function(done) {
+                it(k, function (done) {
                     var result = help([k]);
                     expect(result).toMatch(/^Synopsis/);
-                    expect(result.split("\n").filter(function (l) { return l.length > 130; }).length).toBe(0);
+                    expect(result.split('\n').filter(function (l) { return l.length > 130; }).length).toBe(0);
                     done();
                 });
             });
         });
         describe('use cordova-cli instead of cordova:', function () {
-            var binname = cordova.binname,
-                testname = 'testgap';
-            beforeEach(function() {
+            var binname = cordova.binname;
+            var testname = 'testgap';
+            beforeEach(function () {
                 cordova.binname = testname;
             });
-            afterEach(function() {
+            afterEach(function () {
                 cordova.binname = binname;
             });
             allcommands.forEach(function (k) {
-                it(k || '(default)', function(done) {
+                it(k || '(default)', function (done) {
                     var result = help([k]);
-                    expect(result.split("\n")[2]).toMatch(RegExp(testname + ' (?:' + k + '|command)\\b'));
+                    expect(result.split('\n')[2]).toMatch(RegExp(testname + ' (?:' + k + '|command)\\b'));
                     done();
                 });
             });
         });
     });
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/3127d503/src/cli.js
----------------------------------------------------------------------
diff --git a/src/cli.js b/src/cli.js
index f97de4c..79dafa7 100644
--- a/src/cli.js
+++ b/src/cli.js
@@ -20,68 +20,63 @@
           laxcomma:true
 */
 
-
-var path = require('path'),
-    Q = require('q'),
-    nopt = require('nopt'),
-    updateNotifier = require('update-notifier'),
-    pkg = require('../package.json'),
-    telemetry = require('./telemetry'),
-    help = require('./help'),
-    cordova_lib = require('cordova-lib'),
-    CordovaError = cordova_lib.CordovaError,
-    cordova = cordova_lib.cordova,
-    events = cordova_lib.events,
-    logger = require('cordova-common').CordovaLogger.get(),
-    Configstore = require('configstore'),
-    conf = new Configstore(pkg.name + '-config'),
-    editor = require('editor'),
-    fs = require('fs');
+var path = require('path');
+var Q = require('q');
+var nopt = require('nopt');
+var updateNotifier = require('update-notifier');
+var pkg = require('../package.json');
+var telemetry = require('./telemetry');
+var help = require('./help');
+var cordova_lib = require('cordova-lib');
+var CordovaError = cordova_lib.CordovaError;
+var cordova = cordova_lib.cordova;
+var events = cordova_lib.events;
+var logger = require('cordova-common').CordovaLogger.get();
+var Configstore = require('configstore');
+var conf = new Configstore(pkg.name + '-config');
+var editor = require('editor');
+var fs = require('fs');
 
 var knownOpts = {
-    'verbose' : Boolean
-    ,'version' : Boolean
-    ,'help' : Boolean
-    ,'silent' : Boolean
-    ,'experimental' : Boolean
-    ,'noregistry' : Boolean
-    ,'nohooks': Array
-    ,'shrinkwrap' : Boolean
-    ,'copy-from' : String
-    ,'link-to' : path
-    ,'searchpath' : String
-    ,'variable' : Array
-    ,'link': Boolean
-    ,'force': Boolean
+    'verbose': Boolean,
+    'version': Boolean,
+    'help': Boolean,
+    'silent': Boolean,
+    'experimental': Boolean,
+    'noregistry': Boolean,
+    'nohooks': Array,
+    'shrinkwrap': Boolean,
+    'copy-from': String,
+    'link-to': path,
+    'searchpath': String,
+    'variable': Array,
+    'link': Boolean,
+    'force': Boolean,
     // Flags to be passed to `cordova build/run/emulate`
-    ,'debug' : Boolean
-    ,'release' : Boolean
-    ,'archs' : String
-    ,'device' : Boolean
-    ,'emulator': Boolean
-    ,'target' : String
-    ,'browserify': Boolean
-    ,'noprepare': Boolean
-    ,'fetch': Boolean
-    ,'nobuild': Boolean
-    ,'list': Boolean
-    ,'buildConfig' : String
-    ,'template' : String
+    'debug': Boolean,
+    'release': Boolean,
+    'archs': String,
+    'device': Boolean,
+    'emulator': Boolean,
+    'target': String,
+    'browserify': Boolean,
+    'noprepare': Boolean,
+    'fetch': Boolean,
+    'nobuild': Boolean,
+    'list': Boolean,
+    'buildConfig': String,
+    'template': String
 };
 
 var shortHands = {
-    'd' : '--verbose'
-    ,'v' : '--version'
-    ,'h' : '--help'
-    ,'src' : '--copy-from'
-    ,'t' : '--template'
+    'd': '--verbose',
+    'v': '--version',
+    'h': '--help',
+    'src': '--copy-from',
+    't': '--template'
 };
 
-var Configstore = require('configstore');
-var conf = new Configstore(pkg.name + '-config');
-
-
-function checkForUpdates() {
+function checkForUpdates () {
     try {
         // Checks for available update and returns an instance
         var notifier = updateNotifier({
@@ -106,7 +101,7 @@ module.exports = function (inputArgs, cb) {
     /**
      * mainly used for testing.
      */
-    cb = cb || function(){};
+    cb = cb || function () {};
 
     // If no inputArgs given, use process.argv.
     inputArgs = inputArgs || process.argv;
@@ -116,9 +111,9 @@ module.exports = function (inputArgs, cb) {
     var isConfigCmd = (cmd === 'config');
 
     // ToDO: Move nopt-based parsing of args up here
-    if(cmd === '--version' || cmd === '-v') {
+    if (cmd === '--version' || cmd === '-v') {
         cmd = 'version';
-    } else if(!cmd || cmd === '--help' || cmd === 'h') {
+    } else if (!cmd || cmd === '--help' || cmd === 'h') {
         cmd = 'help';
     }
 
@@ -127,7 +122,7 @@ module.exports = function (inputArgs, cb) {
         if (inputArgs[4]) {
             logger.subscribe(events);
             conf.get(inputArgs[4]);
-            if(conf.get(inputArgs[4]) !== undefined) {
+            if (conf.get(inputArgs[4]) !== undefined) {
                 events.emit('log', conf.get(inputArgs[4]).toString());
             } else {
                 events.emit('log', 'undefined');
@@ -141,7 +136,7 @@ module.exports = function (inputArgs, cb) {
             conf.set(inputArgs[4], true);
         }
 
-        if(inputArgs[5]) {
+        if (inputArgs[5]) {
             conf.set(inputArgs[4], inputArgs[5]);
         }
     }
@@ -161,18 +156,17 @@ module.exports = function (inputArgs, cb) {
     }
 
     // If "ls" is called
-    if (isConfigCmd && inputArgs[3] === 'ls' || inputArgs[3] === 'list') {
-        fs.readFile(conf.path, 'utf8', function (err,data) {
+    if ((isConfigCmd && inputArgs[3] === 'ls') || (inputArgs[3] === 'list')) {
+        fs.readFile(conf.path, 'utf8', function (err, data) {
             if (err) {
                 logger.error(err);
-            }
-            else {
+            } else {
                 logger.log(data);
             }
         });
     }
 
-    Q().then(function() {
+    Q().then(function () {
         /**
          * Skip telemetry prompt if:
          * - CI environment variable is present
@@ -180,7 +174,7 @@ module.exports = function (inputArgs, cb) {
          * - Command ran is: `cordova telemetry on | off | ...`
          */
 
-        if(telemetry.isCI(process.env) || telemetry.isNoTelemetryFlag(inputArgs)) {
+        if (telemetry.isCI(process.env) || telemetry.isNoTelemetryFlag(inputArgs)) {
             return Q(false);
         }
 
@@ -188,12 +182,12 @@ module.exports = function (inputArgs, cb) {
          * We shouldn't prompt for telemetry if user issues a command of the form: `cordova telemetry on | off | ...x`
          * Also, if the user has already been prompted and made a decision, use his saved answer
          */
-        if(isTelemetryCmd) {
+        if (isTelemetryCmd) {
             var isOptedIn = telemetry.isOptedIn();
             return handleTelemetryCmd(subcommand, isOptedIn);
         }
 
-        if(telemetry.hasUserOptedInOrOut()) {
+        if (telemetry.hasUserOptedInOrOut()) {
             return Q(telemetry.isOptedIn());
         }
 
@@ -204,7 +198,7 @@ module.exports = function (inputArgs, cb) {
         return telemetry.showPrompt();
     }).then(function (collectTelemetry) {
         shouldCollectTelemetry = collectTelemetry;
-        if(isTelemetryCmd) {
+        if (isTelemetryCmd) {
             return Q();
         }
         return cli(inputArgs);
@@ -224,19 +218,19 @@ module.exports = function (inputArgs, cb) {
     }).done();
 };
 
-function getSubCommand(args, cmd) {
-    if(['platform','platforms','plugin','plugins','telemetry','config'].indexOf(cmd) > -1) {
+function getSubCommand (args, cmd) {
+    if (['platform', 'platforms', 'plugin', 'plugins', 'telemetry', 'config'].indexOf(cmd) > -1) {
         return args[3]; // e.g: args='node cordova platform rm ios', 'node cordova telemetry on'
     }
     return null;
 }
 
-function printHelp(command) {
+function printHelp (command) {
     var result = help([command]);
     cordova.emit('results', result);
 }
 
-function handleTelemetryCmd(subcommand, isOptedIn) {
+function handleTelemetryCmd (subcommand, isOptedIn) {
 
     if (subcommand !== 'on' && subcommand !== 'off') {
         logger.subscribe(events);
@@ -244,7 +238,7 @@ function handleTelemetryCmd(subcommand, isOptedIn) {
         return;
     }
 
-    var turnOn = subcommand === 'on' ? true : false;
+    var turnOn = subcommand === 'on';
     var cmdSuccess = true;
 
     // turn telemetry on or off
@@ -264,31 +258,31 @@ function handleTelemetryCmd(subcommand, isOptedIn) {
 
     if (!turnOn) {
         // Always track telemetry opt-outs (whether user opted out or not!)
-        telemetry.track('telemetry', 'off', 'via-cordova-telemetry-cmd', cmdSuccess ? 'successful': 'unsuccessful');
+        telemetry.track('telemetry', 'off', 'via-cordova-telemetry-cmd', cmdSuccess ? 'successful' : 'unsuccessful');
         return Q();
     }
 
-    if(isOptedIn) {
+    if (isOptedIn) {
         telemetry.track('telemetry', 'on', 'via-cordova-telemetry-cmd', cmdSuccess ? 'successful' : 'unsuccessful');
     }
 
     return Q();
 }
 
-function cli(inputArgs) {
+function cli (inputArgs) {
 
     checkForUpdates();
 
     var args = nopt(knownOpts, shortHands, inputArgs);
 
-    process.on('uncaughtException', function(err) {
-        if(err.message) {
+    process.on('uncaughtException', function (err) {
+        if (err.message) {
             logger.error(err.message);
         } else {
             logger.error(err);
         }
         // Don't send exception details, just send that it happened
-        if(shouldCollectTelemetry) {
+        if (shouldCollectTelemetry) {
             telemetry.track('uncaughtException');
         }
         process.exit(1);
@@ -298,8 +292,7 @@ function cli(inputArgs) {
 
     if (args.silent) {
         logger.setLevel('error');
-    }
-    else if (args.verbose) { // can't be both silent AND verbose, silent wins
+    } else if (args.verbose) { // can't be both silent AND verbose, silent wins
         logger.setLevel('verbose');
     }
 
@@ -309,7 +302,7 @@ function cli(inputArgs) {
     if (args.version || usingPrerelease) {
         var libVersion = require('cordova-lib/package').version;
         var toPrint = cliVersion;
-        if (cliVersion != libVersion || usingPrerelease) {
+        if (cliVersion !== libVersion || usingPrerelease) {
             toPrint += ' (cordova-lib@' + libVersion + ')';
         }
 
@@ -335,8 +328,8 @@ function cli(inputArgs) {
     // false, the unparsed args after -- are kept in unparsedArgs and can be
     // passed downstream to some scripts invoked by Cordova.
     var unparsedArgs = [];
-    var parseStopperIdx =  args.argv.original.indexOf('--');
-    if (parseStopperIdx != -1) {
+    var parseStopperIdx = args.argv.original.indexOf('--');
+    if (parseStopperIdx !== -1) {
         unparsedArgs = args.argv.original.slice(parseStopperIdx + 1);
     }
 
@@ -348,14 +341,14 @@ function cli(inputArgs) {
     var cmd = undashed[0];
     var subcommand;
 
-    if ( !cmd || cmd == 'help' || args.help ) {
-        if (!args.help && remain[0] == 'help') {
+    if (!cmd || cmd === 'help' || args.help) {
+        if (!args.help && remain[0] === 'help') {
             remain.shift();
         }
         return printHelp(remain);
     }
 
-    if ( !cordova.hasOwnProperty(cmd) ) {
+    if (!cordova.hasOwnProperty(cmd)) {
         var msg2 = 'Cordova does not know ' + cmd + '; try `' + cordova_lib.binname +
             ' help` for a list of all the available commands.';
         throw new CordovaError(msg2);
@@ -375,7 +368,7 @@ function cli(inputArgs) {
         browserify: args.browserify || false,
         fetch: args.fetch,
         nohooks: args.nohooks || [],
-        searchpath : args.searchpath
+        searchpath: args.searchpath
     };
 
     var platformCommands = ['emulate', 'build', 'prepare', 'compile', 'run', 'clean'];
@@ -397,9 +390,9 @@ function cli(inputArgs) {
         opts.platforms = undashed.slice(1);
 
         return cordova[cmd].call(null, opts.platforms)
-            .then(function(platformChecks) {
+            .then(function (platformChecks) {
 
-                var someChecksFailed = Object.keys(platformChecks).map(function(platformName) {
+                var someChecksFailed = Object.keys(platformChecks).map(function (platformName) {
                     events.emit('log', '\nRequirements check results for ' + platformName + ':');
                     var platformCheck = platformChecks[platformName];
                     if (platformCheck instanceof CordovaError) {
@@ -408,7 +401,7 @@ function cli(inputArgs) {
                     }
 
                     var someChecksFailed = false;
-                    platformCheck.forEach(function(checkItem) {
+                    platformCheck.forEach(function (checkItem) {
                         var checkSummary = checkItem.name + ': ' +
                             (checkItem.installed ? 'installed ' : 'not installed ') +
                             (checkItem.metadata.version || '');
@@ -420,7 +413,7 @@ function cli(inputArgs) {
                     });
 
                     return someChecksFailed;
-                }).some(function(isCheckFailedForPlatform) {
+                }).some(function (isCheckFailedForPlatform) {
                     return isCheckFailedForPlatform;
                 });
 
@@ -432,9 +425,9 @@ function cli(inputArgs) {
         var port = undashed[1];
         return cordova.serve(port);
     } else if (cmd === 'create') {
-        return create(undashed,args);
+        return create(undashed, args);
     } else if (cmd === 'config') {
-        //Don't need to do anything with cordova-lib since config was handled above
+        // Don't need to do anything with cordova-lib since config was handled above
         return true;
     } else {
         // platform/plugins add/rm [target(s)]
@@ -445,10 +438,9 @@ function cli(inputArgs) {
             args.variable.forEach(function (strVar) {
                 // CB-9171
                 var keyVal = strVar.split('=');
-                if(keyVal.length < 2) {
+                if (keyVal.length < 2) {
                     throw new CordovaError('invalid variable format: ' + strVar);
-                }
-                else {
+                } else {
                     var key = keyVal.shift().toUpperCase();
                     var val = keyVal.join('=');
                     cli_vars[key] = val;
@@ -470,40 +462,37 @@ function cli(inputArgs) {
             // User explicitly did not pass in fetch
             args.fetch = conf.get('fetch');
         }
-        if(args.browserify === undefined) {
-           // User explicitly did not pass in browserify
-           args.browserify = conf.get('browserify');
+        if (args.browserify === undefined) {
+            // User explicitly did not pass in browserify
+            args.browserify = conf.get('browserify');
         }
         if (args.searchpath === undefined) {
             // User explicitly did not pass in searchpath
             args.searchpath = conf.get('searchpath');
         }
 
-        var download_opts = { searchpath : args.searchpath
-                            , noregistry : args.noregistry
-                            , nohooks : args.nohooks
-                            , cli_variables : cli_vars
-                            , browserify: args.browserify || false
-                            , fetch: args.fetch
-                            , link: args.link || false
-                            , save: args.save
-                            , shrinkwrap: args.shrinkwrap || false
-                            , force: args.force || false
+        var download_opts = { searchpath: args.searchpath,
+            noregistry: args.noregistry,
+            nohooks: args.nohooks,
+            cli_variables: cli_vars,
+            browserify: args.browserify || false,
+            fetch: args.fetch,
+            link: args.link || false,
+            save: args.save,
+            shrinkwrap: args.shrinkwrap || false,
+            force: args.force || false
         };
         return cordova[cmd](subcommand, targets, download_opts);
     }
 }
 
-function create(undashed, args) {
-    var cfg;            // Create config
-    var customWww;      // Template path
-    var wwwCfg;         // Template config
+function create (undashed, args) {
+    var cfg; // Create config
+    var customWww; // Template path
+    var wwwCfg; // Template config
 
     // If we got a fourth parameter, consider it to be JSON to init the config.
-    if (undashed[4])
-        cfg = JSON.parse(undashed[4]);
-    else
-        cfg = {};
+    if (undashed[4]) { cfg = JSON.parse(undashed[4]); } else { cfg = {}; }
 
     customWww = args['copy-from'] || args['link-to'] || args.template;
 
@@ -515,8 +504,7 @@ function create(undashed, args) {
         }
 
         // Resolve tilda
-        if (customWww.substr(0,1) === '~')
-            customWww = path.join(process.env.HOME,  customWww.substr(1));
+        if (customWww.substr(0, 1) === '~') { customWww = path.join(process.env.HOME, customWww.substr(1)); }
 
         wwwCfg = {
             url: customWww,
@@ -537,10 +525,10 @@ function create(undashed, args) {
         cfg.lib = cfg.lib || {};
         cfg.lib.www = wwwCfg;
     }
-    return cordova.create( undashed[1]  // dir to create the project in
-        , undashed[2]  // App id
-        , undashed[3]  // App name
+    return cordova.create(undashed[1] // dir to create the project in
+        , undashed[2] // App id
+        , undashed[3] // App name
         , cfg
         , events || undefined
     );
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/3127d503/src/help.js
----------------------------------------------------------------------
diff --git a/src/help.js b/src/help.js
index b319ab5..9e2480d 100644
--- a/src/help.js
+++ b/src/help.js
@@ -18,8 +18,6 @@
 */
 var fs = require('fs');
 var cordova_lib = require('cordova-lib');
-var cordova = cordova_lib.cordova;
-var Q = require('q');
 var path = require('path');
 
 module.exports = function help (args) {
@@ -44,7 +42,7 @@ module.exports = function help (args) {
         return !!f;
     });
     raw = fs.readFileSync(file[0]).toString('utf8').replace(/cordova-cli/g, cordova_lib.binname);
-    //cordova.emit('results', raw);
+    // cordova.emit('results', raw);
 
     return raw;
 };

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/3127d503/src/telemetry.js
----------------------------------------------------------------------
diff --git a/src/telemetry.js b/src/telemetry.js
index 9636515..ab6ef1d 100644
--- a/src/telemetry.js
+++ b/src/telemetry.js
@@ -20,8 +20,6 @@
           laxcomma:true
 */
 
-
-
 // For further details on telemetry, see:
 // https://github.com/cordova/cordova-discuss/pull/43
 
@@ -37,11 +35,10 @@ var insight = new Insight({
     pkg: pkg
 });
 
-
 /**
  * Returns true if the user opted in, and false otherwise
  */
-function showPrompt() {
+function showPrompt () {
 
     var deferred = Q.defer();
 
@@ -63,7 +60,7 @@ function showPrompt() {
     return deferred.promise;
 }
 
-function track() {
+function track () {
     // Remove empty, null or undefined strings from arguments
     for (var property in arguments) {
         var val = arguments[property];
@@ -74,11 +71,11 @@ function track() {
     insight.track.apply(insight, arguments);
 }
 
-function turnOn() {
+function turnOn () {
     insight.optOut = false;
 }
 
-function turnOff() {
+function turnOff () {
     insight.optOut = true;
 }
 
@@ -87,18 +84,18 @@ function turnOff() {
  * Has the same effect as if user never answered the telemetry prompt
  * Useful for testing purposes
  */
-function clear() {
+function clear () {
     insight.optOut = undefined;
 }
 
-function isOptedIn() {
+function isOptedIn () {
     return !insight.optOut;
 }
 
 /**
  * Has the user already answered the telemetry prompt? (thereby opting in or out?)
  */
-function hasUserOptedInOrOut() {
+function hasUserOptedInOrOut () {
     var insightOptOut = insight.optOut === undefined;
     return !(insightOptOut);
 }
@@ -106,14 +103,14 @@ function hasUserOptedInOrOut() {
 /**
  * Is the environment variable 'CI' specified ?
  */
-function isCI(env) {
+function isCI (env) {
     return !!env.CI;
 }
 
 /**
  * Has the user ran a command of the form: `cordova run --no-telemetry` ?
  */
-function isNoTelemetryFlag(args) {
+function isNoTelemetryFlag (args) {
     return args.indexOf('--no-telemetry') > -1;
 }
 
@@ -128,5 +125,5 @@ module.exports = {
     isCI: isCI,
     showPrompt: showPrompt,
     isNoTelemetryFlag: isNoTelemetryFlag,
-    timeoutInSecs:30
-};
\ No newline at end of file
+    timeoutInSecs: 30
+};


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org