diff options
| -rw-r--r-- | lib/results.js | 16 | ||||
| -rw-r--r-- | tests/results.tests.js | 17 |
2 files changed, 32 insertions, 1 deletions
diff --git a/lib/results.js b/lib/results.js index 55efd25..fe9f632 100644 --- a/lib/results.js +++ b/lib/results.js @@ -35,5 +35,19 @@ function warning(message) { } function combineMessages(results) { - return _.flatten(_.pluck(results, "messages"), true); + var messages = []; + _.flatten(_.pluck(results, "messages"), true).forEach(function(message) { + if (!containsMessage(messages, message)) { + messages.push(message); + } + }); + return messages; +} + +function containsMessage(messages, message) { + return _.find(messages, isSameMessage.bind(null, message)) !== undefined; +} + +function isSameMessage(first, second) { + return first.type === second.type && first.message === second.message; } diff --git a/tests/results.tests.js b/tests/results.tests.js new file mode 100644 index 0000000..3c0df78 --- /dev/null +++ b/tests/results.tests.js @@ -0,0 +1,17 @@ +var assert = require("assert"); + +var results = require("../lib/results"); +var Result = results.Result; +var test = require("./testing").test; + + +describe("Result.combine", function() { + test("removes any duplicate messages", function() { + var first = new Result(null, [results.warning("Warning...")]); + var second = new Result(null, [results.warning("Warning...")]); + + var combined = Result.combine([first, second]); + + assert.deepEqual(combined.messages, [results.warning("Warning...")]); + }); +}); |
