move mutation tests from easysync_tests to mocha

This commit is contained in:
webzwo0i 2016-02-29 18:00:58 +01:00
parent 172256d69a
commit 6f1b0d9185
2 changed files with 151 additions and 76 deletions

View file

@ -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);

View file

@ -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) {