var Changeset = require("ep_etherpad-lite/static/js/Changeset"); var AttributePool = require("ep_etherpad-lite/static/js/AttributePool"); var helper = require("./helper.js") var assertEqualStrings = helper.assertEqualStrings; var assertEqualArrays = helper.assertEqualArrays; var assert = helper.assert; describe("other",function(){ it("testMakeSplice",function(done){ var t = "a\nb\nc\n"; var t2 = Changeset.applyToText(Changeset.makeSplice(t, 5, 0, "def"), t); assertEqualStrings("a\nb\ncdef\n", t2); done(); }) it("testToSplices",function(done){ var cs = Changeset.checkRep('Z:z>9*0=1=4-3+9=1|1-4-4+1*0+a$123456789abcdefghijk'); var correctSplices = [ [5, 8, "123456789"], [9, 17, "abcdefghijk"] ]; assertEqualArrays(correctSplices, Changeset.toSplices(cs)); done(); }) it("testOpAttributeValue",function(done){ var p = new AttributePool(); p.putAttrib(['name', 'david']); p.putAttrib(['color', 'green']); assertEqualStrings("david", Changeset.opAttributeValue(Changeset.stringOp('*0*1+1'), 'name', p)); assertEqualStrings("david", Changeset.opAttributeValue(Changeset.stringOp('*0+1'), 'name', p)); assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('*1+1'), 'name', p)); assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('+1'), 'name', p)); assertEqualStrings("green", Changeset.opAttributeValue(Changeset.stringOp('*0*1+1'), 'color', p)); assertEqualStrings("green", Changeset.opAttributeValue(Changeset.stringOp('*1+1'), 'color', p)); assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('*0+1'), 'color', p)); assertEqualStrings("", Changeset.opAttributeValue(Changeset.stringOp('+1'), 'color', p)); done(); }) it("turn cactus\n into actusabcd\n",function(done){ runApplyToAttributionTest(1, ['bold,', 'bold,true'], "Z:7>3-1*0=1*1=1=3+4$abcd", "+1*1+1|1+5", "+1*1+1|1+8"); done(); }) it("turn david\ngreenspan\n into david\ngreen\n",function(done){ runApplyToAttributionTest(2, ['bold,', 'bold,true'], "Z:g<4*1|1=6*1=5-4$", "|2+g", "*1|1+6*1+5|1+1"); done(); }) it("test filter1",function(done){ testFilterAttribNumbers(1, "*0*1+1+2+3*1+4*2+5*0*2*1*b*c+6", function (n) { return (n % 2) == 0; }, "*0+1+2+3+4*2+5*0*2*c+6"); done(); }) it("test filter2",function(done){ testFilterAttribNumbers(2, "*0*1+1+2+3*1+4*2+5*0*2*1*b*c+6", function (n) { return (n % 2) == 1; }, "*1+1+2+3*1+4+5*1*b+6"); done(); }) it("take FFFFTTTTT and apply -FT--FFTT, the inverse of which is --F--TT--",function(done){ testInverse(1, "Z:9>0=1*0=1*1=1=2*0=2*1|1=2$", null, ["+4*1+5"], ['bold,', 'bold,true'], "Z:9>0=2*0=1=2*1=2$"); done(); }) it("testMutateTextLines 1",function(done){ testMutateTextLines(1, "Z:4<1|1-2-1|1+1+1$\nc", ["a\n", "b\n"], ["\n", "c\n"]); done(); }) it("testMutateTextLines 2",function(done){ testMutateTextLines(2, "Z:4>0|1-2-1|2+3$\nc\n", ["a\n", "b\n"], ["\n", "c\n", "\n"]); done(); }) xit("throughIterator",function(done){ var x = '-c*3*4+6|3=az*asdf0*1*2*3+1=1-1+1*0+1=1-1+1|c=c-1'; assert("throughIterator(" + literal(x) + ") == " + literal(x)); done(); }) xit("throughSmartAssembler",function(done){ var x = '-c*3*4+6|3=az*asdf0*1*2*3+1=1-1+1*0+1=1-1+1|c=c-1'; assert("throughSmartAssembler(" + literal(x) + ") == " + literal(x)); done(); }) }) // throughIterator is not used function throughIterator(opsStr) { var iter = Changeset.opIterator(opsStr); var assem = Changeset.opAssembler(); while (iter.hasNext()) { assem.append(iter.next()); } return assem.toString(); } // throughSmartAssembler is not used function throughSmartAssembler(opsStr) { var iter = Changeset.opIterator(opsStr); var assem = Changeset.smartOpAssembler(); while (iter.hasNext()) { assem.append(iter.next()); } assem.endDocument(); return assem.toString(); } function testMutateTextLines(testId, cs, lines, correctLines) { var a = lines.slice(); Changeset.mutateTextLines(cs, a); assertEqualArrays(correctLines, a); } function testInverse(testId, cs, lines, alines, pool, correctOutput) { pool = poolOrArray(pool); var str = Changeset.inverse(Changeset.checkRep(cs), lines, alines, pool); assertEqualStrings(correctOutput, str); } function testFilterAttribNumbers(testId, cs, filter, correctOutput) { var str = Changeset.filterAttribNumbers(cs, filter); assertEqualStrings(correctOutput, str); } function runApplyToAttributionTest(testId, attribs, cs, inAttr, outCorrect) { var p = poolOrArray(attribs); var result = Changeset.applyToAttribution( Changeset.checkRep(cs), inAttr, p); assertEqualStrings(outCorrect, result); } function poolOrArray(attribs) { if (attribs.getAttrib) { return attribs; // it's already an attrib pool } else { // assume it's an array of attrib strings to be split and added var p = new AttributePool(); attribs.forEach(function (kv) { p.putAttrib(kv.split(',')); }); return p; } } function literal(v) { if ((typeof v) == "string") { return '"' + v.replace(/[\\\"]/g, '\\$1').replace(/\n/g, '\\n') + '"'; } else return JSON.stringify(v); }