From f8a1170b31ba59ef1435f82aa25963d07197cee6 Mon Sep 17 00:00:00 2001 From: Jimmy Lu Date: Sun, 13 Dec 2015 19:03:05 -0500 Subject: [PATCH 1/2] Use done status to mark end of message seq --- .travis.yml | 2 ++ package.json | 6 +++--- src/nrepl-client.js | 5 +++-- tests/tests.js | 50 ++++++++++++++++++++++++--------------------- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/.travis.yml b/.travis.yml index eb49b27..cfee930 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,9 @@ language: node_js +sudo: false node_js: - "0.10" + - "4.2" before_script: - wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein diff --git a/package.json b/package.json index 9ddf117..9f45ae0 100644 --- a/package.json +++ b/package.json @@ -17,10 +17,10 @@ "license": "MIT", "dependencies": { "bencode": "~0.7.0", - "tree-kill": "~0.0.6" + "tree-kill": "~1.0.0" }, "devDependencies": { - "async": "~0.9", - "nodeunit": "~0.8" + "q": "~1.4.1", + "nodeunit": "~0.9.1" } } diff --git a/src/nrepl-client.js b/src/nrepl-client.js index 5a6cc38..fd58337 100644 --- a/src/nrepl-client.js +++ b/src/nrepl-client.js @@ -121,8 +121,9 @@ function nreplSend(socket, messageStream, msgSpec, callback) { function errHandler(err) { errors.push(err); } function msgHandler(_messages) { - var done = _messages.some(function(msg) { return !!msg.status; }); - // return msg.status && msg.status.indexOf("done") > -1; }); + var done = _messages.some(function(msg) { + return msg.status && msg.status.indexOf("done") > -1; + }); messages = messages.concat(_messages); if (!done) return; messageStream.removeListener('error', errHandler); diff --git a/tests/tests.js b/tests/tests.js index acf2733..31a796b 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -2,7 +2,7 @@ var nreplClient = require('../src/nrepl-client'); var nreplServer = require('../src/nrepl-server'); -var async = require("async"); +var Q = require('q'); var exec = require("child_process").exec; @@ -22,21 +22,18 @@ function createTimeout(test) { var tests = { setUp: function (callback) { - async.waterfall([ - function(next) { nreplServer.start(serverOpts, next); }, - function(serverState, next) { - server = serverState; - client = nreplClient.connect({ - port: serverState.port, - verbose: true - }); - console.log("client connecting"); - client.once('connect', function() { - console.log("client connected"); - next(); - }); - } - ], callback); + Q.ninvoke(nreplServer, 'start', serverOpts).then(function (serverState) { + server = serverState; + client = nreplClient.connect({ + port: serverState.port, + verbose: true + }); + console.log("client connecting"); + return Q.ninvoke(client, 'once', 'connect'); + }).then(function () { + console.log("client connected"); + callback(); + }).done(); }, tearDown: function (callback) { @@ -52,16 +49,23 @@ var tests = { client.end(); }, - testSimpleEval: function (test) { - test.expect(3); createTimeout(test); - client.eval('(+ 3 4)', function(err, messages) { - console.log("in simple eval"); - console.log(messages); - test.ok(!err, 'Got errors: ' + err); + testEval: function (test) { + createTimeout(test); + Q.ninvoke(client, 'eval', '(+ 3 4)').then(function(messages) { test.equal(messages[0].value, '7'); test.deepEqual(messages[1].status, ['done']); + return Q.ninvoke(client, 'eval', '(throw (RuntimeException. "foo"))'); + }).then(function (messages) { + test.equal(messages.length, 3); + test.equal(messages[0].ex, 'class java.lang.RuntimeException'); + test.deepEqual(messages[0].status, ['eval-error']); + test.ok(/^RuntimeException foo/.test(messages[1].err)); + test.deepEqual(messages[2].status, ['done']); + }).fail(function (err) { + test.ok(!err, 'Got errors: ' + err); + }).fin(function () { test.done(); - }); + }).done(); } }; From b9daf71bf4eecbd3c09b4fbf87d9b94daaff281d Mon Sep 17 00:00:00 2001 From: Jimmy Lu Date: Mon, 14 Dec 2015 00:04:30 -0500 Subject: [PATCH 2/2] Swtich from Q to bluebird --- package.json | 2 +- tests/tests.js | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 9f45ae0..4be346c 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "tree-kill": "~1.0.0" }, "devDependencies": { - "q": "~1.4.1", + "bluebird": "~3.0.6", "nodeunit": "~0.9.1" } } diff --git a/tests/tests.js b/tests/tests.js index 31a796b..708a654 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -1,8 +1,8 @@ /*global console,require,module,setTimeout,clearTimeout*/ +var Promise = require('bluebird'); var nreplClient = require('../src/nrepl-client'); -var nreplServer = require('../src/nrepl-server'); -var Q = require('q'); +var nreplServer = Promise.promisifyAll(require('../src/nrepl-server')); var exec = require("child_process").exec; @@ -22,18 +22,18 @@ function createTimeout(test) { var tests = { setUp: function (callback) { - Q.ninvoke(nreplServer, 'start', serverOpts).then(function (serverState) { + nreplServer.startAsync(serverOpts).then(function (serverState) { server = serverState; - client = nreplClient.connect({ + client = Promise.promisifyAll(nreplClient.connect({ port: serverState.port, verbose: true - }); + })); console.log("client connecting"); - return Q.ninvoke(client, 'once', 'connect'); + return client.onceAsync('connect'); }).then(function () { console.log("client connected"); callback(); - }).done(); + }); }, tearDown: function (callback) { @@ -51,21 +51,21 @@ var tests = { testEval: function (test) { createTimeout(test); - Q.ninvoke(client, 'eval', '(+ 3 4)').then(function(messages) { + client.evalAsync('(+ 3 4)').then(function(messages) { test.equal(messages[0].value, '7'); test.deepEqual(messages[1].status, ['done']); - return Q.ninvoke(client, 'eval', '(throw (RuntimeException. "foo"))'); + return client.evalAsync('(throw (RuntimeException. "foo"))'); }).then(function (messages) { test.equal(messages.length, 3); test.equal(messages[0].ex, 'class java.lang.RuntimeException'); test.deepEqual(messages[0].status, ['eval-error']); test.ok(/^RuntimeException foo/.test(messages[1].err)); test.deepEqual(messages[2].status, ['done']); - }).fail(function (err) { + }).catch(function (err) { test.ok(!err, 'Got errors: ' + err); - }).fin(function () { + }).finally(function () { test.done(); - }).done(); + }); } };