const contentcollector = require("../../../src/static/js/contentcollector"); const AttributePool = require("../../../src/static/js/AttributePool"); const cheerio = require("../../../src/node_modules/cheerio"); const tests = { nestedLi:{ description: "Complex nested Li", html: '
foo
", expectedLineAttribs : [ '*0*1*2+1+1', '*0*1*2+1+1', '+3' , '+3'], expectedText: ["*a","*b", "div", "foo"] } , ulIndented: { description : "Tests if indented uls properly get attributes", html : "foo
", expectedLineAttribs : [ '*0*1*2+1+1', '*0*3*2+1+1', '*0*1*2+1+1', '+3' ], expectedText: ["*a","*b", "*a", "foo"] }, ol: { description : "Tests if ols properly get line numbers when in a normal OL", html : "test
", expectedLineAttribs : ['*0*1*2*3+1+1', '*0*1*2*3+1+1', '*0*1*2*3+1+1', '+4'], expectedText: ["*a","*b","*c", "test"], noteToSelf: "Ensure empty P does not induce line attribute marker, wont this break the editor?" } , lineDoBreakInOl:{ description : "A single completely empty line break within an ol should reset count if OL is closed off..", html : "hello
line" }, bulletListInOL:{ description : "A bullet within an OL should not change numbering..", html : "
foo
", expectedLineAttribs : [ '+1', '*0*1*2*3+1+1', '*0*4*2*5+1+1', '+7', '+3' ], expectedText: ["a","*b","*c", "notlist", "foo"], noteToSelf: "Ensure empty P does not induce line attribute marker, wont this break the editor?" }, nestedOl: { description : "First item being an UL then subsequent being OL will fail", html : "а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь
`, expectedLineAttribs: [ '+1t' ], expectedText: ["а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь"] }, multiLineParagraphWithPre:{ description: "lines in preformatted text should be kept intact", html:`а б в г ґ д е є ж з и і ї й к л м н о
multiple lines in pre
п р с т у ф х ц ч ш щ ю я ь
`, expectedLineAttribs: [ '+12', '+8', '+5', '+2', '+3', '+r' ], expectedText: ["а б в г ґ д е є ж з и і ї й к л м н о ", "multiple", "lines", "in", "pre", "п р с т у ф х ц ч ш щ ю я ь"] } } describe(__filename, function() { for (let test in tests) { let testObj = tests[test]; describe(test, function() { if (testObj.disabled) { return xit("DISABLED:", test, function(done){ done(); }) } it(testObj.description, function(done) { var $ = cheerio.load(testObj.html); // Load HTML into Cheerio var doc = $('html')[0]; // Creates a dom-like representation of HTML // Create an empty attribute pool var apool = new AttributePool(); // Convert a dom tree into a list of lines and attribute liens // using the content collector object var cc = contentcollector.makeContentCollector(true, null, apool); cc.collectContent(doc); var result = cc.finish(); var recievedAttributes = result.lineAttribs; var expectedAttributes = testObj.expectedLineAttribs; var recievedText = new Array(result.lines) var expectedText = testObj.expectedText; // Check recieved text matches the expected text if (arraysEqual(recievedText[0], expectedText)) { // console.log("PASS: Recieved Text did match Expected Text\nRecieved:", recievedText[0], "\nExpected:", testObj.expectedText) } else { console.error("FAIL: Recieved Text did not match Expected Text\nRecieved:", recievedText[0], "\nExpected:", testObj.expectedText) throw new Error(); } // Check recieved attributes matches the expected attributes if (arraysEqual(recievedAttributes, expectedAttributes)) { // console.log("PASS: Recieved Attributes matched Expected Attributes"); done(); } else { console.error("FAIL", test, testObj.description); console.error("FAIL: Recieved Attributes did not match Expected Attributes\nRecieved: ", recievedAttributes, "\nExpected: ", expectedAttributes) console.error("FAILING HTML", testObj.html); throw new Error(); } }); }); } }); function arraysEqual(a, b) { if (a === b) return true; if (a == null || b == null) return false; if (a.length != b.length) return false; // If you don't care about the order of the elements inside // the array, you should sort both arrays here. // Please note that calling sort on an array will modify that array. // you might want to clone your array first. for (var i = 0; i < a.length; ++i) { if (a[i] !== b[i]) return false; } return true; }