a4bdcc3392
1. Introduce contentcollector.js backend tests 1. Fix issue with OL LI items not being properly numbered after import 1. Fix issue with nested OL LI items being improperly numbered on export 1. Fix issue with new lines not being introduced after lists in on import #3961 1. Sanitize HTML on the way in (import) 1. Fix ExportHTML CSS because it needs to support OL > LI > OL not OL > OL [The latter being the correct format] 1. Fix backend tests.
77 lines
2.9 KiB
JavaScript
Executable file
77 lines
2.9 KiB
JavaScript
Executable file
const Changeset = require("./src/static/js/Changeset");
|
|
const contentcollector = require("./src/static/js/contentcollector");
|
|
const AttributePool = require("./src/static/js/AttributePool");
|
|
const cheerio = require("./src/node_modules/cheerio");
|
|
const util = require('util');
|
|
|
|
const tests = {
|
|
bulletListInOL:{
|
|
description : "A bullet within an OL should not change numbering..",
|
|
html : "<html><body><ol><li>should be 1</li><ul><li>should be a bullet</li></ul><li>should be 2</li></ol><p></p></body></html>",
|
|
expectedLineAttribs : [ '*0*1*2*3+1+b', '*0*4*2*5+1+i', '*0*1*2*5+1+b', '' ],
|
|
expectedText: ["*should be 1","*should be a bullet","*should be 2", ""]
|
|
}
|
|
}
|
|
|
|
// For each test..
|
|
for (let test in tests){
|
|
let testObj = tests[test];
|
|
|
|
// describe(test, function() {
|
|
// 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;
|
|
}
|