Speed up xmleql performance
This commit is contained in:
@@ -977,7 +977,6 @@ describe('ol.format.GML3', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('writes back features as GML', function() {
|
it('writes back features as GML', function() {
|
||||||
this.timeout(4000);
|
|
||||||
var serialized = gmlFormat.writeFeaturesNode(features);
|
var serialized = gmlFormat.writeFeaturesNode(features);
|
||||||
expect(serialized).to.xmleql(ol.xml.parse(text));
|
expect(serialized).to.xmleql(ol.xml.parse(text));
|
||||||
});
|
});
|
||||||
|
|||||||
+43
-51
@@ -116,36 +116,25 @@
|
|||||||
|
|
||||||
function assertElementNodesEqual(node1, node2, options, errors) {
|
function assertElementNodesEqual(node1, node2, options, errors) {
|
||||||
var testPrefix = (options && options.prefix === true);
|
var testPrefix = (options && options.prefix === true);
|
||||||
try {
|
if (node1.nodeType !== node2.nodeType) {
|
||||||
expect(node1.nodeType).to.equal(node2.nodeType);
|
|
||||||
} catch(e) {
|
|
||||||
errors.push('nodeType test failed for: ' + node1.nodeName + ' | ' +
|
errors.push('nodeType test failed for: ' + node1.nodeName + ' | ' +
|
||||||
node2.nodeName + ' | ' + e.message);
|
node2.nodeName);
|
||||||
}
|
}
|
||||||
if (testPrefix) {
|
if (testPrefix) {
|
||||||
try {
|
if (node1.nodeName !== node2.nodeName) {
|
||||||
expect(node1.nodeName).to.equal(node2.nodeName);
|
|
||||||
} catch(e) {
|
|
||||||
errors.push('nodeName test failed for: ' + node1.nodeName + ' | ' +
|
errors.push('nodeName test failed for: ' + node1.nodeName + ' | ' +
|
||||||
node2.nodeName + ' | ' + e.message);
|
node2.nodeName);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (node1.nodeName.split(':').pop() !==
|
||||||
try {
|
node2.nodeName.split(':').pop()) {
|
||||||
expect(node1.nodeName.split(':').pop()).to.equal(
|
|
||||||
node2.nodeName.split(':').pop());
|
|
||||||
} catch(e) {
|
|
||||||
errors.push('nodeName test failed for: ' + node1.nodeName + ' | ' +
|
errors.push('nodeName test failed for: ' + node1.nodeName + ' | ' +
|
||||||
node2.nodeName + ' | ' + e.message);
|
node2.nodeName);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// for text nodes compare value
|
// for text nodes compare value
|
||||||
if (node1.nodeType === 3) {
|
if (node1.nodeType === 3) {
|
||||||
try {
|
if (node1.nodeValue.replace(/\s/g, '') !==
|
||||||
// TODO should we make this optional?
|
node2.nodeValue.replace(/\s/g, '')) {
|
||||||
expect(node1.nodeValue.replace(/\s/g, '')).to.equal(
|
errors.push('nodeValue test failed');
|
||||||
node2.nodeValue.replace(/\s/g, ''));
|
|
||||||
} catch(e) {
|
|
||||||
errors.push('nodeValue test failed | ' + e.message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// for element type nodes compare namespace, attributes, and children
|
// for element type nodes compare namespace, attributes, and children
|
||||||
@@ -153,20 +142,14 @@
|
|||||||
// test namespace alias and uri
|
// test namespace alias and uri
|
||||||
if (node1.prefix || node2.prefix) {
|
if (node1.prefix || node2.prefix) {
|
||||||
if (testPrefix) {
|
if (testPrefix) {
|
||||||
try {
|
if (node1.prefix !== node2.prefix) {
|
||||||
expect(node1.prefix).to.equal(node2.prefix);
|
errors.push('Prefix test failed for: ' + node1.nodeName);
|
||||||
} catch(e) {
|
|
||||||
errors.push('Prefix test failed for: ' + node1.nodeName + ' | ' +
|
|
||||||
e.message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (node1.namespaceURI || node2.namespaceURI) {
|
if (node1.namespaceURI || node2.namespaceURI) {
|
||||||
try {
|
if (node1.namespaceURI !== node2.namespaceURI) {
|
||||||
expect(node1.namespaceURI).to.equal(node2.namespaceURI);
|
errors.push('namespaceURI test failed for: ' + node1.nodeName);
|
||||||
} catch(e) {
|
|
||||||
errors.push('namespaceURI test failed for: ' + node1.nodeName +
|
|
||||||
' | ' + e.message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// compare attributes - disregard xmlns given namespace handling above
|
// compare attributes - disregard xmlns given namespace handling above
|
||||||
@@ -200,11 +183,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
if (node1AttrLen !== node2AttrLen) {
|
||||||
expect(node1AttrLen).to.equal(node2AttrLen);
|
errors.push('Number of attributes test failed for: ' + node1.nodeName);
|
||||||
} catch(e) {
|
|
||||||
errors.push('Number of attributes test failed for: ' + node1.nodeName +
|
|
||||||
' | ' + e.message);
|
|
||||||
}
|
}
|
||||||
var gv, ev;
|
var gv, ev;
|
||||||
for (var name in node1Attr) {
|
for (var name in node1Attr) {
|
||||||
@@ -213,32 +193,44 @@
|
|||||||
' expected for element ' + node1.nodeName);
|
' expected for element ' + node1.nodeName);
|
||||||
}
|
}
|
||||||
// test attribute namespace
|
// test attribute namespace
|
||||||
try {
|
|
||||||
// we do not care about the difference between an empty string and
|
// we do not care about the difference between an empty string and
|
||||||
// null for namespaceURI some tests will fail in IE9 otherwise
|
// null for namespaceURI some tests will fail in IE9 otherwise
|
||||||
// see also
|
// see also
|
||||||
// http://msdn.microsoft.com/en-us/library/ff460650(v=vs.85).aspx
|
// http://msdn.microsoft.com/en-us/library/ff460650(v=vs.85).aspx
|
||||||
expect(node1Attr[name].namespaceURI || null).to.be(
|
if ((node1Attr[name].namespaceURI || null) !==
|
||||||
node2Attr[name].namespaceURI || null);
|
(node2Attr[name].namespaceURI || null)) {
|
||||||
} catch(e) {
|
|
||||||
errors.push('namespaceURI attribute test failed for: ' +
|
errors.push('namespaceURI attribute test failed for: ' +
|
||||||
node1.nodeName + ' | ' + e.message);
|
node1.nodeName);
|
||||||
}
|
}
|
||||||
try {
|
if (node1Attr[name].value !== node2Attr[name].value) {
|
||||||
expect(node1Attr[name].value).to.equal(node2Attr[name].value);
|
errors.push('Attribute value test failed for: ' + node1.nodeName);
|
||||||
} catch(e) {
|
|
||||||
errors.push('Attribute value test failed for: ' + node1.nodeName +
|
|
||||||
' | ' + e.message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// compare children
|
// compare children
|
||||||
var node1ChildNodes = getChildNodes(node1, options);
|
var node1ChildNodes = getChildNodes(node1, options);
|
||||||
var node2ChildNodes = getChildNodes(node2, options);
|
var node2ChildNodes = getChildNodes(node2, options);
|
||||||
try {
|
if (node1ChildNodes.length !== node2ChildNodes.length) {
|
||||||
expect(node1ChildNodes.length).to.equal(node2ChildNodes.length);
|
// check if all child nodes are text, they could be split up in
|
||||||
} catch(e) {
|
// 4096 chunks
|
||||||
errors.push('Number of childNodes test failed for: ' + node1.nodeName +
|
// if so, ignore the childnode count error
|
||||||
' | ' + e.message);
|
var allText = true;
|
||||||
|
var c, cc;
|
||||||
|
for (c = 0, cc = node1ChildNodes.length; c < cc; ++c) {
|
||||||
|
if (node1ChildNodes[c].nodeType !== 3) {
|
||||||
|
allText = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (c = 0, cc = node2ChildNodes.length; c < cc; ++c) {
|
||||||
|
if (node2ChildNodes[c].nodeType !== 3) {
|
||||||
|
allText = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!allText) {
|
||||||
|
errors.push('Number of childNodes test failed for: ' +
|
||||||
|
node1.nodeName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// only compare if they are equal
|
// only compare if they are equal
|
||||||
if (node1ChildNodes.length === node2ChildNodes.length) {
|
if (node1ChildNodes.length === node2ChildNodes.length) {
|
||||||
|
|||||||
Reference in New Issue
Block a user