diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-05-06 19:43:44 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-05-06 19:43:44 +0100 |
| commit | e1d1373cda7fcf66aff7a89883c10ed9a8f7ffc7 (patch) | |
| tree | 557a1186b89cc736cccddc7f31f2af8372960da4 | |
| parent | 02ebf0f54ae9cc45daee49e444407bf90f07e781 (diff) | |
Remove duplicate messages when combining results
| -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...")]); + }); +}); |
