const expect = require('chai').expect; const exec = require('child_process').exec; const reorder = require('../lib/reorder'); const flaggedRespawn = require('../'); describe('flaggedRespawn', function () { var flags = ['--harmony', '--use_strict', '--stack_size'] describe('reorder', function () { it('should re-order args, placing special flags first', function () { var needsRespawn = ['node', 'file.js', '--flag', '--harmony', 'command']; var noRespawnNeeded = ['node', 'bin/flagged-respawn', 'thing']; expect(reorder(flags, needsRespawn)) .to.deep.equal(['node', '--harmony', 'file.js', '--flag', 'command']); expect(reorder(flags, noRespawnNeeded)) .to.deep.equal(noRespawnNeeded); }); it('should keep flags values when not placed first', function () { var args = ['node', 'file.js', '--stack_size=2048']; var expected = ['node', '--stack_size=2048', 'file.js']; expect(reorder(flags, args)).to.deep.equal(expected); }); it('should ignore special flags when they are in the correct position', function () { var args = ['node', '--harmony', 'file.js', '--flag']; expect(reorder(flags, reorder(flags, args))).to.deep.equal(args); }); }); describe('execute', function () { it('should throw if no flags are specified', function () { expect(function () { flaggedRespawn.execute(); }).to.throw; }); it('should throw if no argv is specified', function () { expect(function () { flaggedRespawn.execute(flags); }).to.throw; }); it('should respawn and pipe stderr/stdout to parent', function (done) { exec('node ./test/bin/respawner.js --harmony', function (err, stdout, stderr) { expect(stdout.replace(/[0-9]/g, '')).to.equal('Special flags found, respawning.\nRespawned to PID: \nRunning!\n'); done(); }); }); it('should respawn and pass exit code from child to parent', function (done) { exec('node ./test/bin/exit_code.js --harmony', function (err, stdout, stderr) { expect(err.code).to.equal(100); done(); }); }); it.skip('should respawn; if child is killed, parent should exit with same signal', function (done) { // TODO: figure out why travis hates this exec('node ./test/bin/signal.js --harmony', function (err, stdout, stderr) { console.log('err', err); console.log('stdout', stdout); console.log('stderr', stderr); expect(err.signal).to.equal('SIGHUP'); done(); }); }); it('should call back with ready as true when respawn is not needed', function () { var argv = ['node', './test/bin/respawner']; flaggedRespawn(flags, argv, function (ready) { expect(ready).to.be.true; }); }); it('should call back with ready as false when respawn is needed', function () { var argv = ['node', './test/bin/respawner', '--harmony']; flaggedRespawn(flags, argv, function (ready) { expect(ready).to.be.false; }); }); it('should call back with the child process when ready', function () { var argv = ['node', './test/bin/respawner', '--harmony']; flaggedRespawn(flags, argv, function (ready, child) { expect(child.pid).to.not.equal(process.pid); }); }); it('should call back with own process when respawn not needed', function () { var argv = ['node', './test/bin/respawner']; flaggedRespawn(flags, argv, function (ready, child) { expect(child.pid).to.equal(process.pid); }); }); }); });
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 19553 | swellard | Move and rename clients | ||
//guest/perforce_software/helix-web-services/main/source/clients/2016.1.0/javascript/node_modules/flagged-respawn/test/index.js | |||||
#1 | 18810 | tjuricek |
First-pass at JavaScript client SDK. JavaScript requires Node with Gulp to "browserfy" the library. It's the easiest way I found to use the swagger-js project; bundle up a wrapping method. There is no JavaScript reference guide. The swagger-js doesn't really document what they do very well, actually. Overall I'm not particularly impressed by swagger-js, it was hard to even figure out what the right method syntax was. We may want to invest time in doing it better. This required setting CORS response headers, which are currently defaulted to a fairly insecure setting. |