diff --git a/analysis/mlsentiment/mlsentiment.js b/analysis/mlsentiment/mlsentiment.js index 04875fe5..b35051af 100644 --- a/analysis/mlsentiment/mlsentiment.js +++ b/analysis/mlsentiment/mlsentiment.js @@ -12,10 +12,6 @@ module.exports = function (RED) { this.on("input", function (msg) { var value = RED.util.getMessageProperty(msg, node.property); if (value !== undefined) { - if (msg.hasOwnProperty("overrides")) { - msg.extras = msg.overrides; - delete msg.overrides; - } multilangSentiment(value, node.lang || msg.lang || 'en', { 'words': msg.words || null, 'tokens': msg.tokens || null }, function (err, result) { msg.sentiment = result; msg.sentiment.comparative = msg.sentiment.score / msg.sentiment.tokens.length; // temporarily addresses an issue in v2.0.0: https://github.com/marcellobarile/multilang-sentiment/issues/10 diff --git a/test/analysis/mlsentiment/mlsentiment_spec.js b/test/analysis/mlsentiment/mlsentiment_spec.js index 876026c4..ec64428b 100644 --- a/test/analysis/mlsentiment/mlsentiment_spec.js +++ b/test/analysis/mlsentiment/mlsentiment_spec.js @@ -18,118 +18,118 @@ var should = require("should"); var sentimentNode = require("../../../analysis/mlsentiment/mlsentiment.js"); var helper = require("node-red-node-test-helper"); -describe('mlsentiment Node', function() { +describe('mlsentiment Node', function () { - before(function(done) { + before(function (done) { helper.startServer(done); }); - after(function(done) { + after(function (done) { helper.stopServer(done); }); - afterEach(function() { + afterEach(function () { helper.unload(); }); - it('should be loaded', function(done) { - var flow = [{id:"sentimentNode1", type:"mlsentiment", name: "sentimentNode" }]; - helper.load(sentimentNode, flow, function() { + it('should be loaded', function (done) { + var flow = [{ id: "sentimentNode1", type: "mlsentiment", name: "sentimentNode" }]; + helper.load(sentimentNode, flow, function () { var sentimentNode1 = helper.getNode("sentimentNode1"); sentimentNode1.should.have.property('name', 'sentimentNode'); done(); }); }); - it('should pass on msg if no payload', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",wires:[["jn2"]]}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should pass on msg if no payload', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { msg.should.not.have.property('sentiment'); msg.topic.should.equal("pass on"); done(); }); var testString = 'good, great, best, brilliant'; - jn1.receive({topic:"pass on"}); + jn1.receive({ topic: "pass on" }); }); }); - it('should add a positive score for good words', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",wires:[["jn2"]]}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should add a positive score for good words', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { try { msg.should.have.property('sentiment'); msg.sentiment.should.have.property('score'); msg.sentiment.score.should.be.a.Number(); msg.sentiment.score.should.be.above(10); done(); - } catch(err) { + } catch (err) { done(err); } }); var testString = 'good, great, best, brilliant'; - jn1.receive({payload:testString}); + jn1.receive({ payload: testString }); }); }); - it('should add a positive score for good words (in French)', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",wires:[["jn2"]],lang:"fr"}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should add a positive score for good words (in French)', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", wires: [["jn2"]], lang: "fr" }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { try { msg.should.have.property('sentiment'); msg.sentiment.should.have.property('score'); msg.sentiment.score.should.be.a.Number(); msg.sentiment.score.should.be.above(5); done(); - } catch(err) { + } catch (err) { done(err); } }); var testString = 'bon, belle, don du ciel, brillant'; - jn1.receive({payload:testString}); + jn1.receive({ payload: testString }); }); }); - it('should add a positive score for good words - alternative property', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",property:"foo",wires:[["jn2"]]}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should add a positive score for good words - alternative property', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", property: "foo", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { try { msg.should.have.property('sentiment'); msg.sentiment.should.have.property('score'); msg.sentiment.score.should.be.a.Number(); msg.sentiment.score.should.be.above(10); done(); - } catch(err) { + } catch (err) { done(err); } }); var testString = 'good, great, best, brilliant'; - jn1.receive({foo:testString}); + jn1.receive({ foo: testString }); }); }); - it('should add a negative score for bad words', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",wires:[["jn2"]]}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should add a negative score for bad words', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { msg.should.have.property('sentiment'); msg.sentiment.should.have.property('score'); msg.sentiment.score.should.be.a.Number(); @@ -137,17 +137,17 @@ describe('mlsentiment Node', function() { done(); }); var testString = 'bad, horrible, negative, awful'; - jn1.receive({payload:testString}); + jn1.receive({ payload: testString }); }); }); - it('should add a negative score for bad words - alternative property', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",property:"foo",wires:[["jn2"]]}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should add a negative score for bad words - alternative property', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", property: "foo", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { msg.should.have.property('sentiment'); msg.sentiment.should.have.property('score'); msg.sentiment.score.should.be.a.Number(); @@ -155,17 +155,17 @@ describe('mlsentiment Node', function() { done(); }); var testString = 'bad, horrible, negative, awful'; - jn1.receive({foo:testString}); + jn1.receive({ foo: testString }); }); }); - it('should allow you to override word scoring', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",wires:[["jn2"]]}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should allow you to override word scoring', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { msg.should.have.property('sentiment'); msg.sentiment.should.have.property('score'); msg.sentiment.score.should.be.a.Number(); @@ -173,18 +173,18 @@ describe('mlsentiment Node', function() { done(); }); var testString = 'sick, wicked'; - var overrides = {'sick': 10, 'wicked': 10 }; - jn1.receive({payload:testString,overrides:overrides}); + var wordOverrides = { 'sick': 10, 'wicked': 10 }; + jn1.receive({ payload: testString, words: wordOverrides }); }); }); - it('should allow you to override word scoring - alternative property', function(done) { - var flow = [{id:"jn1",type:"mlsentiment",property:"foo",wires:[["jn2"]]}, - {id:"jn2", type:"helper"}]; - helper.load(sentimentNode, flow, function() { + it('should allow you to override word scoring - alternative property', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", property: "foo", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { var jn1 = helper.getNode("jn1"); var jn2 = helper.getNode("jn2"); - jn2.on("input", function(msg) { + jn2.on("input", function (msg) { msg.should.have.property('sentiment'); msg.sentiment.should.have.property('score'); msg.sentiment.score.should.be.a.Number(); @@ -192,8 +192,46 @@ describe('mlsentiment Node', function() { done(); }); var testString = 'sick, wicked'; - var overrides = {'sick': 10, 'wicked': 10 }; - jn1.receive({foo:testString,overrides:overrides}); + var wordOverrides = { 'sick': 10, 'wicked': 10 }; + jn1.receive({ foo: testString, words: wordOverrides }); + }); + }); + + it('should allow you to use custom tokens', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { + var jn1 = helper.getNode("jn1"); + var jn2 = helper.getNode("jn2"); + jn2.on("input", function (msg) { + msg.should.have.property('sentiment'); + msg.sentiment.should.have.property('score'); + msg.sentiment.score.should.be.a.Number(); + msg.sentiment.score.should.equal(-3); + done(); + }); + var testString = '世界就是一个疯子的囚笼'; + var tokenOverrides = ['世界', '就', '是', '一个', '疯子', '的', '囚笼']; + jn1.receive({ payload: testString, tokens: tokenOverrides }); + }); + }); + + it('should allow you to use custom tokens - alternative property', function (done) { + var flow = [{ id: "jn1", type: "mlsentiment", property: "foo", wires: [["jn2"]] }, + { id: "jn2", type: "helper" }]; + helper.load(sentimentNode, flow, function () { + var jn1 = helper.getNode("jn1"); + var jn2 = helper.getNode("jn2"); + jn2.on("input", function (msg) { + msg.should.have.property('sentiment'); + msg.sentiment.should.have.property('score'); + msg.sentiment.score.should.be.a.Number(); + msg.sentiment.score.should.equal(-3); + done(); + }); + var testString = '世界就是一个疯子的囚笼'; + var tokenOverrides = ['世界', '就', '是', '一个', '疯子', '的', '囚笼']; + jn1.receive({ foo: testString, tokens: tokenOverrides }); }); });