From 6f1b0d918513adaeb741a4055ad2663bc7912251 Mon Sep 17 00:00:00 2001 From: webzwo0i Date: Mon, 29 Feb 2016 18:00:58 +0100 Subject: [PATCH] move mutation tests from easysync_tests to mocha --- .../backend/specs/easysync/easysync_tests.js | 223 ++++++++++++------ tests/backend/specs/easysync/helper.js | 4 +- 2 files changed, 151 insertions(+), 76 deletions(-) diff --git a/tests/backend/specs/easysync/easysync_tests.js b/tests/backend/specs/easysync/easysync_tests.js index 8b63e5d04..5d02215bd 100644 --- a/tests/backend/specs/easysync/easysync_tests.js +++ b/tests/backend/specs/easysync/easysync_tests.js @@ -23,7 +23,7 @@ var Changeset = require("ep_etherpad-lite/static/js/Changeset"); var AttributePool = require("ep_etherpad-lite/static/js/AttributePool"); -var helper = require("helper.js") +var helper = require("./helper.js") var assert = helper.assert; var literal = helper.literal; @@ -95,120 +95,196 @@ function random() { return Changeset.pack(oldLen, newLen, assem.toString(), bank.toString()); } - function runMutationTest(testId, origLines, muts, correct) { - var lines = origLines.slice(); - var mu = Changeset.textLinesMutator(lines); - applyMutations(mu, muts); - mu.close(); - assertEqualArrays(correct, lines); +function runMutationTest(origLines, muts) { + var lines1 = origLines.slice(); + var mu = Changeset.textLinesMutator(lines1); + applyMutations(mu, muts); + mu.close(); - var inText = origLines.join(''); - var cs = mutationsToChangeset(inText.length, muts); - lines = origLines.slice(); - Changeset.mutateTextLines(cs, lines); - assertEqualArrays(correct, lines); + var inText = origLines.join(''); + var cs = mutationsToChangeset(inText.length, muts); + lines2 = origLines.slice(); + Changeset.mutateTextLines(cs, lines2); - var correctText = correct.join(''); - var outText = Changeset.applyToText(cs, inText); - assertEqualStrings(correctText, outText); - } - - runMutationTest(1, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ - ['remove', 1, 0, "a"], - ['insert', "tu"], - ['remove', 1, 0, "p"], - ['skip', 4, 1], - ['skip', 7, 1], - ['insert', "cream\npie\n", 2], - ['skip', 2], - ['insert', "bot"], - ['insert', "\n", 1], - ['insert', "bu"], - ['skip', 3], - ['remove', 3, 1, "ge\n"], - ['remove', 6, 0, "duffle"] - ], ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]); - - runMutationTest(2, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ - ['remove', 1, 0, "a"], - ['remove', 1, 0, "p"], - ['insert', "tu"], - ['skip', 11, 2], - ['insert', "cream\npie\n", 2], - ['skip', 2], - ['insert', "bot"], - ['insert', "\n", 1], - ['insert', "bu"], - ['skip', 3], - ['remove', 3, 1, "ge\n"], - ['remove', 6, 0, "duffle"] - ], ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]); - - runMutationTest(3, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + var outText = Changeset.applyToText(cs, inText); + return [lines1,lines2,outText]; +} +describe("text line mutations",function(){ + it("applies mutations to an array of lines #1",function(done){ + var expected = ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]; + var result = runMutationTest(["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + ['remove', 1, 0, "a"], + ['insert', "tu"], + ['remove', 1, 0, "p"], + ['skip', 4, 1], + ['skip', 7, 1], + ['insert', "cream\npie\n", 2], + ['skip', 2], + ['insert', "bot"], + ['insert', "\n", 1], + ['insert', "bu"], + ['skip', 3], + ['remove', 3, 1, "ge\n"], + ['remove', 6, 0, "duffle"] + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #2",function(done){ + var expected = ["tuple\n", "banana\n", "cream\n", "pie\n", "cabot\n", "bubba\n", "eggplant\n"]; + var result = runMutationTest(["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + ['remove', 1, 0, "a"], + ['remove', 1, 0, "p"], + ['insert', "tu"], + ['skip', 11, 2], + ['insert', "cream\npie\n", 2], + ['skip', 2], + ['insert', "bot"], + ['insert', "\n", 1], + ['insert', "bu"], + ['skip', 3], + ['remove', 3, 1, "ge\n"], + ['remove', 6, 0, "duffle"] + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #3",function(done){ + var expected = ["banana\n", "cabbage\n", "duffle\n"]; + var result = runMutationTest(["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ ['remove', 6, 1, "apple\n"], ['skip', 15, 2], ['skip', 6], ['remove', 1, 1, "\n"], ['remove', 8, 0, "eggplant"], ['skip', 1, 1] - ], ["banana\n", "cabbage\n", "duffle\n"]); - - runMutationTest(4, ["15\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #4",function(done){ + var expected = ["1\n", "2\n", "3\n", "4\n", "5\n"]; + var result = runMutationTest(["15\n"], [ ['skip', 1], ['insert', "\n2\n3\n4\n", 4], ['skip', 2, 1] - ], ["1\n", "2\n", "3\n", "4\n", "5\n"]); - - runMutationTest(5, ["1\n", "2\n", "3\n", "4\n", "5\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #5",function(done){ + var expected = ["15\n"]; + var result = runMutationTest(["1\n", "2\n", "3\n", "4\n", "5\n"], [ ['skip', 1], ['remove', 7, 4, "\n2\n3\n4\n"], ['skip', 2, 1] - ], ["15\n"]); - - runMutationTest(6, ["123\n", "abc\n", "def\n", "ghi\n", "xyz\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #6",function(done){ + var expected = ["0123\n", "abc\n", "xyz\n"]; + var result = runMutationTest(["123\n", "abc\n", "def\n", "ghi\n", "xyz\n"], [ ['insert', "0"], ['skip', 4, 1], ['skip', 4, 1], ['remove', 8, 2, "def\nghi\n"], ['skip', 4, 1] - ], ["0123\n", "abc\n", "xyz\n"]); - - runMutationTest(7, ["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #7",function(done){ + var expected = ["banana\n", "cabbage\n", "duffle\n"]; + var result = runMutationTest(["apple\n", "banana\n", "cabbage\n", "duffle\n", "eggplant\n"], [ ['remove', 6, 1, "apple\n"], ['skip', 15, 2, true], ['skip', 6, 0, true], ['remove', 1, 1, "\n"], ['remove', 8, 0, "eggplant"], ['skip', 1, 1, true] - ], ["banana\n", "cabbage\n", "duffle\n"]); - + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) // #2836 regressions - runMutationTest(8, ["\n","foo\n","\n"], [ + it("applies mutations to an array of lines #8",function(done){ + var expected = ["foo\n","c"]; + var result = runMutationTest(["\n","foo\n","\n"], [ ['remove', 1, 1, "\n"], ['skip', 4, 1, false], ['remove', 1, 1, "\n"], ['insert',"c"] - ], ["foo\n","c"]); - runMutationTest(9, ["\n","foo\n","\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #9",function(done){ + var expected = ["fooc"]; + var result = runMutationTest(["\n","foo\n","\n"], [ ['remove', 1, 1, "\n"], ['skip', 3, 0, false], ['remove', 2, 2, "\n\n"], ['insert',"c"] - ], ["fooc"]); - runMutationTest(10, ["\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #10",function(done){ + var expected = ["c"]; //TODO find out if c must have a newline because of unknown constraints + var result = runMutationTest(["\n"], [ ['remove', 1, 1, "\n"], ['insert',"c", 0] - ], ["c"]); //TODO find out if c must have a newline because of unknown constraints - runMutationTest(11, ["\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #11",function(done){ + var expected = ["ac\n"]; + var result = runMutationTest(["\n"], [ ['remove', 1, 1, "\n"], ['insert', "a"], ['insert',"c\n", 1] - ], ["ac\n"]); - runMutationTest(12, ["\n"], [ + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) + it("applies mutations to an array of lines #12",function(done){ + var expected = ["a\n","c"]; //TODO find out if c must have a newline because of unknown constraints + var result = runMutationTest(["\n"], [ ['remove', 1, 1, "\n"], ['insert', "a\n", 1], ['insert',"c"] - ], ["a\n","c"]); //TODO find out if c must have a newline because of unknown constraints + ]); + if (!assertEqualArrays(result[0], expected)) throw new Error("textLinesMutator result is wrong: expected "+expected+" got "+result[0]); + if (!assertEqualArrays(result[1], expected)) throw new Error("mutateTextLines result is wrong: expected "+expected+" got "+result[1]); + if (!assertEqualStrings(result[2], expected.join(''))) throw new Error('applyToText result is wrong: expected '+expected.join('')+" got "+result[2]); + done() + }) +}) + function poolOrArray(attribs) { if (attribs.getAttrib) { @@ -897,5 +973,4 @@ function random() { assertEqualArrays(origLines, lines); assertEqualArrays(origALines, alines); } - for (var i = 0; i < 30; i++) testInverseRandom(i); diff --git a/tests/backend/specs/easysync/helper.js b/tests/backend/specs/easysync/helper.js index 97bee326a..c8b82c573 100644 --- a/tests/backend/specs/easysync/helper.js +++ b/tests/backend/specs/easysync/helper.js @@ -10,11 +10,11 @@ exports.literal = function (v) { } exports.assertEqualArrays = function (a, b) { - exports.assert("JSON.stringify(" + exports.literal(a) + ") == JSON.stringify(" + exports.literal(b) + ")"); + return JSON.stringify(a) === JSON.stringify(b); } exports.assertEqualStrings = function (a, b) { - exports.assert(exports.literal(a) + " == " + exports.literal(b)); + return a === b } exports.throughIterator = function (opsStr) {