Updated Branches: refs/heads/master d75c0585c -> a778f0063
CB:5187 on node windows broken compile, emulate, run Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/a778f006 Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/a778f006 Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/a778f006 Branch: refs/heads/master Commit: a778f0063ffa4e892ed7cf9f9a31f59fe63f0461 Parents: d75c058 Author: Carlos Santana <[email protected]> Authored: Thu Oct 24 13:37:25 2013 -0400 Committer: Carlos Santana <[email protected]> Committed: Thu Oct 24 14:26:51 2013 -0400 ---------------------------------------------------------------------- spec/compile.spec.js | 39 ++++++++++++++++++++++++++++++++------- spec/emulate.spec.js | 35 ++++++++++++++++++++++++++++++----- spec/run.spec.js | 32 +++++++++++++++++++++++++++----- src/compile.js | 12 +++++++++--- src/emulate.js | 12 +++++++++--- src/run.js | 28 +++++++++------------------- 6 files changed, 116 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/a778f006/spec/compile.spec.js ---------------------------------------------------------------------- diff --git a/spec/compile.spec.js b/spec/compile.spec.js index 4b9ee43..b5a9304 100644 --- a/spec/compile.spec.js +++ b/spec/compile.spec.js @@ -23,12 +23,15 @@ var cordova = require('../cordova'), fs = require('fs'), hooker = require('../src/hooker'), Q = require('q'), - util = require('../src/util'); + util = require('../src/util'), + os = require('os'); + var supported_platforms = Object.keys(platforms).filter(function(p) { return p != 'www'; }); +var os_platform = os.platform(); describe('compile command', function() { - var is_cordova, list_platforms, fire, result, child; + var is_cordova, list_platforms, fire, result, child, spawn_wrap; var project_dir = '/some/path'; child = { on: function(child_event,cb){ @@ -45,6 +48,21 @@ describe('compile command', function() { on: function(){} } }; + spawn_wrap = function(cmd,args,options){ + var _cmd = cmd, + _args = args; + + if (os.platform() === 'win32') { + _args = ['/c',_cmd].concat(_args); + _cmd = 'cmd'; + } + + return { + "cmd": _cmd, + "args": _args, + "options": options + }; + }; function wrapper(f, post) { runs(function() { @@ -75,17 +93,24 @@ describe('compile command', function() { }); describe('success', function() { + var spawn_call; it('should run inside a Cordova-based project with at least one added platform and shell out to build', function(done) { cordova.raw.compile(['android','ios']).then(function() { - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'android', 'cordova', 'build'),[]); - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'ios', 'cordova', 'build'),[]); + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'android', 'cordova', 'build'),[]); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); + + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'ios', 'cordova', 'build'),[]); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); + done(); }); - }); + it('should pass down optional parameters', function (done) { cordova.raw.compile({platforms:["blackberry10"], options:["--release"]}).then(function () { - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'blackberry10', 'cordova', 'build'),['--release']); + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'blackberry10', 'cordova', 'build'),['--release']); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); + done(); }); }); @@ -94,7 +119,7 @@ describe('compile command', function() { describe('hooks', function() { describe('when platforms are added', function() { it('should fire before hooks through the hooker module', function(done) { - cordova.raw.compile(['android', 'ios']).then(function() {; + cordova.raw.compile(['android', 'ios']).then(function() { expect(fire).toHaveBeenCalledWith('before_compile', {verbose: false, platforms:['android', 'ios'], options: []}); done(); }); http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/a778f006/spec/emulate.spec.js ---------------------------------------------------------------------- diff --git a/spec/emulate.spec.js b/spec/emulate.spec.js index 8f3303e..ddc5a21 100644 --- a/spec/emulate.spec.js +++ b/spec/emulate.spec.js @@ -23,12 +23,13 @@ var cordova = require('../cordova'), fs = require('fs'), hooker = require('../src/hooker'), Q = require('q'), - util = require('../src/util'); + util = require('../src/util'), + os = require('os'); var supported_platforms = Object.keys(platforms).filter(function(p) { return p != 'www'; }); describe('emulate command', function() { - var is_cordova, list_platforms, fire, result, child; + var is_cordova, list_platforms, fire, result, child, spawn_wrap; var project_dir = '/some/path'; var prepare_spy; child = { @@ -46,6 +47,21 @@ describe('emulate command', function() { on: function(){} } }; + spawn_wrap = function(cmd,args,options){ + var _cmd = cmd, + _args = args; + + if (os.platform() === 'win32') { + _args = ['/c',_cmd].concat(_args); + _cmd = 'cmd'; + } + + return { + "cmd": _cmd, + "args": _args, + "options": options + }; + }; function wrapper(f, post) { runs(function() { @@ -78,18 +94,27 @@ describe('emulate command', function() { }); describe('success', function() { + var spawn_call; it('should run inside a Cordova-based project with at least one added platform and call prepare and shell out to the emulate script', function(done) { cordova.raw.emulate(['android','ios']).then(function(err) { expect(prepare_spy).toHaveBeenCalledWith(['android', 'ios']); - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'android', 'cordova', 'run'), ['--emulator']); - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'ios', 'cordova', 'run'), ['--emulator']); + + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'android', 'cordova', 'run'), ['--emulator']); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); + + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'ios', 'cordova', 'run'), ['--emulator']); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); + done(); }); }); it('should pass down options', function(done) { cordova.raw.emulate({platforms: ['ios'], options:["--optionTastic"]}).then(function(err) { expect(prepare_spy).toHaveBeenCalledWith(['ios']); - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'ios', 'cordova', 'run'), ['--emulator', '--optionTastic']); + + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'ios', 'cordova', 'run'), ['--emulator', '--optionTastic']); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); + done(); }); }); http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/a778f006/spec/run.spec.js ---------------------------------------------------------------------- diff --git a/spec/run.spec.js b/spec/run.spec.js index 65e6bbe..8fc833f 100644 --- a/spec/run.spec.js +++ b/spec/run.spec.js @@ -23,12 +23,13 @@ var cordova = require('../cordova'), fs = require('fs'), hooker = require('../src/hooker'), Q = require('q'), - util = require('../src/util'); + util = require('../src/util'), + os = require('os'); var supported_platforms = Object.keys(platforms).filter(function(p) { return p != 'www'; }); describe('run command', function() { - var is_cordova, list_platforms, fire, child; + var is_cordova, list_platforms, fire, child, spawn_wrap; var project_dir = '/some/path'; var prepare_spy; child = { @@ -46,6 +47,21 @@ describe('run command', function() { on: function(){} } }; + spawn_wrap = function(cmd,args,options){ + var _cmd = cmd, + _args = args; + + if (os.platform() === 'win32') { + _args = ['/c',_cmd].concat(_args); + _cmd = 'cmd'; + } + + return { + "cmd": _cmd, + "args": _args, + "options": options + }; + }; beforeEach(function() { is_cordova = spyOn(util, 'isCordova').andReturn(project_dir); @@ -77,8 +93,12 @@ describe('run command', function() { it('should run inside a Cordova-based project with at least one added platform and call prepare and shell out to the run script', function(done) { cordova.raw.run(['android','ios']).then(function() { expect(prepare_spy).toHaveBeenCalledWith(['android', 'ios']); - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'android', 'cordova', 'run'), ['--device']); - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'ios', 'cordova', 'run'), ['--device']); + + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'android', 'cordova', 'run'), ['--device']); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); + + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'ios', 'cordova', 'run'), ['--device']); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); }, function(err) { console.log(err); @@ -88,7 +108,9 @@ describe('run command', function() { it('should pass down parameters', function(done) { cordova.raw.run({platforms: ['blackberry10'], options:['--password', '1q1q']}).then(function() { expect(prepare_spy).toHaveBeenCalledWith(['blackberry10']); - expect(child_process.spawn).toHaveBeenCalledWith(path.join(project_dir, 'platforms', 'blackberry10', 'cordova', 'run'), ['--device', '--password', '1q1q']); + + spawn_call = spawn_wrap(path.join(project_dir, 'platforms', 'blackberry10', 'cordova', 'run'), ['--device', '--password', '1q1q']); + expect(child_process.spawn).toHaveBeenCalledWith(spawn_call.cmd, spawn_call.args); }, function(err) { expect(err).toBeUndefined(); }).fin(done); http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/a778f006/src/compile.js ---------------------------------------------------------------------- diff --git a/src/compile.js b/src/compile.js index 97f7f21..a9a31e8 100644 --- a/src/compile.js +++ b/src/compile.js @@ -25,7 +25,8 @@ var cordova_util = require('./util'), child_process = require('child_process'), hooker = require('./hooker'), events = require('./events'), - Q = require('q'); + Q = require('q'), + os = require('os'); // Returns a promise. function shell_out_to_build(projectRoot, platform, options) { @@ -35,9 +36,14 @@ function shell_out_to_build(projectRoot, platform, options) { errors = "", child; + if (os.platform() === 'win32') { + args = ['/c',cmd].concat(args); + cmd = 'cmd'; + } + events.emit('log', 'Compiling app on platform "' + platform + '" via command "' + cmd + '" ' + args.join(" ")); - //CB-5125 using spawn instead of exec to avoid errors with stdout on maxBuffer + //using spawn instead of exec to avoid errors with stdout on maxBuffer child = child_process.spawn(cmd, args); child.stdout.setEncoding('utf8'); child.stdout.on('data', function (data) { @@ -51,7 +57,7 @@ function shell_out_to_build(projectRoot, platform, options) { }); child.on('close', function (code) { - events.emit('verbose', "child_process.spawn(" + cmd + "," + args.join(" ") + ") = " + code); + events.emit('verbose', "child_process.spawn(" + cmd + "," + "[" + args.join(", ") + "]) = " + code); if (code === 0) { events.emit('log', 'Platform "' + platform + '" compiled successfully.'); d.resolve(); http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/a778f006/src/emulate.js ---------------------------------------------------------------------- diff --git a/src/emulate.js b/src/emulate.js index f1853a7..cf5e7b9 100644 --- a/src/emulate.js +++ b/src/emulate.js @@ -26,7 +26,8 @@ var cordova_util = require('./util'), events = require('./events'), hooker = require('./hooker'), Q = require('q'), - DEFAULT_OPTIONS = ["--emulator"]; + DEFAULT_OPTIONS = ["--emulator"], + os = require('os'); // Returns a promise. function shell_out_to_emulate(projectRoot, platform, options) { @@ -36,9 +37,14 @@ function shell_out_to_emulate(projectRoot, platform, options) { errors = "", child; + if (os.platform() === 'win32') { + args = ['/c',cmd].concat(args); + cmd = 'cmd'; + } + events.emit('log', 'Running on emulator for platform "' + platform + '" via command "' + cmd + '" ' + args.join(" ")); - //CB-5125 using spawn instead of exec to avoid errors with stdout on maxBuffer + //using spawn instead of exec to avoid errors with stdout on maxBuffer child = child_process.spawn(cmd, args); child.stdout.setEncoding('utf8'); @@ -53,7 +59,7 @@ function shell_out_to_emulate(projectRoot, platform, options) { }); child.on('close', function (code) { - events.emit('verbose', "child_process.spawn(" + cmd + "," + args.join(" ") + ") = " + code); + events.emit('verbose', "child_process.spawn(" + cmd + "," + "[" + args.join(", ") + "]) = " + code); if (code === 0) { events.emit('log', 'Platform "' + platform + '" deployed to emulator.'); d.resolve(); http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/a778f006/src/run.js ---------------------------------------------------------------------- diff --git a/src/run.js b/src/run.js index d5487b3..fc3fbeb 100644 --- a/src/run.js +++ b/src/run.js @@ -26,7 +26,8 @@ var cordova_util = require('./util'), events = require('./events'), Q = require('q'), child_process = require('child_process'), - DEFAULT_OPTIONS = ["--device"]; + DEFAULT_OPTIONS = ["--device"], + os = require('os'); // Returns a promise. function shell_out_to_run(projectRoot, platform, options) { @@ -36,25 +37,14 @@ function shell_out_to_run(projectRoot, platform, options) { errors = "", child; - events.emit('log', 'Running app on platform "' + platform + '" via command "' + cmd + '" ' + args.join(" ")); - - // TODO: inconsistent API for BB10 run command -/* if (platform == 'blackberry') { - var bb_project = path.join(projectRoot, 'platforms', 'blackberry') - var project = new platforms.blackberry.parser(bb_project); - if (project.has_device_target()) { - var bb_config = project.get_cordova_config(); - var device = project.get_device_targets()[0].name; - cmd = '"' + path.join(bb_project, 'cordova', 'run') + '" --target=' + device + ' -k ' + bb_config.signing_password; - } else { - var err = new Error('No BlackBerry device targets defined. If you want to run `run` with BB10, please add a device target. For more information run "' + path.join(bb_project, 'cordova', 'target') + '" -h'); - if (error_callback) error_callback(err); - else throw err; - } + if (os.platform() === 'win32') { + args = ['/c',cmd].concat(args); + cmd = 'cmd'; } -*/ - //CB-5125 using spawn instead of exec to avoid errors with stdout on maxBuffer + events.emit('log', 'Running app on platform "' + platform + '" via command "' + cmd + '" ' + args.join(" ")); + + //using spawn instead of exec to avoid errors with stdout on maxBuffer child = child_process.spawn(cmd, args); child.stdout.setEncoding('utf8'); @@ -69,7 +59,7 @@ function shell_out_to_run(projectRoot, platform, options) { }); child.on('close', function (code) { - events.emit('verbose', "child_process.spawn(" + cmd + "," + args.join(" ") + ") = " + code); + events.emit('verbose', "child_process.spawn(" + cmd + "," + "[" + args.join(", ") + "]) = " + code); if (code === 0) { events.emit('log', 'Platform "' + platform + '" ran successfully.'); d.resolve();
